/* ============================================================
   88 SILVER · /zh/ locale overrides — GENERATED by scripts/build-locales.mjs
   Spec: i18n/TYPOGRAPHY-ZH.md. Do not edit by hand; edit the spec + generator.
   ============================================================ */
@font-face{
  font-family:'Noto Serif SC';
  src:url('../assets/fonts/noto-serif-sc-sub.woff2') format('woff2');
  font-weight:600;font-style:normal;font-display:swap;
}
@font-face{
  font-family:'Noto Sans SC';
  src:url('../assets/fonts/noto-sans-sc-sub.woff2') format('woff2');
  font-weight:400;font-style:normal;font-display:swap;
}

/* §3 stack strategy — latin stays in the brand faces; hanzi fall through to Noto */
html[lang="zh-Hans"]{
  --font-display:'Sentient','Noto Serif SC',serif;
  --font-support:'Familjen Grotesk','Noto Sans SC','Anuphan',sans-serif;
  --font-mono:'Fragment Mono','Noto Sans SC',monospace;
  font-synthesis:none; /* NEVER fake-bold or oblique CJK */
}

/* §4 voice lockup — 宣言句 / 强调句 */
html[lang="zh-Hans"] .voice-caps-zh{
  font-family:var(--font-support);font-weight:400;font-size:.82em;
  letter-spacing:.18em;text-transform:none;
}
html[lang="zh-Hans"] .voice-caps-zh-lg{font-size:.70em;letter-spacing:.12em}
html[lang="zh-Hans"] .voice-serif-zh{
  font-family:var(--font-display);font-style:italic;font-weight:440;letter-spacing:.02em; /* Sentient italic for latin runs */
}

/* §5 per-element overrides */
html[lang="zh-Hans"] body{line-height:1.85;letter-spacing:.02em}
html[lang="zh-Hans"] .hero h1{font-size:clamp(40px,7.6vw,104px);line-height:1.14;letter-spacing:.06em;font-weight:600}
/* the EN hero settles wght 350->430; hanzi wants the heavier 600 target, so the
   settle rides 520->600 here and the tracking stays open (EN's negative settle clips hanzi) */
html.fx[lang="zh-Hans"] .hero h1 .line-in{font-variation-settings:"wght" 520;letter-spacing:.06em}
html.fx[lang="zh-Hans"] .hero.hero-in h1 .line-in{font-variation-settings:"wght" 600;letter-spacing:.06em}
html:not(.fx)[lang="zh-Hans"] .hero h1 .line-in{font-variation-settings:"wght" 600} /* reduced-motion: settled 600 */
@media(max-width:767px){html[lang="zh-Hans"] .hero h1{font-size:clamp(40px,12vw,56px)}}
html[lang="zh-Hans"] .m-line{font-size:clamp(24px,4.2vw,50px);line-height:1.45}
html[lang="zh-Hans"] .coll-copy h2,html[lang="zh-Hans"] .cart-copy h2,html[lang="zh-Hans"] .pierce-copy h2,
html[lang="zh-Hans"] .visit h2,html[lang="zh-Hans"] .reviews h2,html[lang="zh-Hans"] .gifting .coll-copy h2{
  font-size:clamp(34px,4.2vw,58px);line-height:1.18;letter-spacing:.04em;font-weight:600; /* Sentient wider: latin run "Central Ramindra" cleared the wrap at 62px→58px */
}
@media(max-width:900px){html[lang="zh-Hans"] .coll-copy h2{font-size:clamp(34px,10vw,48px)}}
html[lang="zh-Hans"] .material-line{font-size:18px;line-height:1.7}
html[lang="zh-Hans"] .ch-text{font-size:clamp(25px,3.4vw,42px);line-height:1.42}
html[lang="zh-Hans"] .ch-body{line-height:1.85}
html[lang="zh-Hans"] .kicker{font-size:11.5px;letter-spacing:.28em}
html.js[lang="zh-Hans"] .hero.hero-in .hero-kicker{letter-spacing:.28em} /* settle end-state wider for CJK */
html[lang="zh-Hans"] .vow-name{letter-spacing:.06em;color:var(--text-night)}
html[lang="zh-Hans"] .price .from{letter-spacing:.10em} /* 「起」 is one glyph */
html[lang="zh-Hans"] .honest-line{font-size:19px}
html[lang="zh-Hans"] .cta-walkin,html[lang="zh-Hans"] .cta-solid,html[lang="zh-Hans"] .cta-outline,html[lang="zh-Hans"] .nl-btn{letter-spacing:.08em}
html[lang="zh-Hans"] h1,html[lang="zh-Hans"] h2,html[lang="zh-Hans"] .coming-head{text-wrap:balance}
html[lang="zh-Hans"] .body,html[lang="zh-Hans"] .ch-body,html[lang="zh-Hans"] .m-line,html[lang="zh-Hans"] .nl-line{
  line-break:strict;hanging-punctuation:first allow-end;
}

/* ZH sheet: promoted WeChat QR row (visible at every width — WeChat has no deep link) */
html[lang="zh-Hans"] .sheet-row.wechat-qr{display:flex;align-items:center}
