/* ============================================================
   88 SILVER · /th/ locale overrides — GENERATED by scripts/build-locales.mjs
   Spec: i18n/TYPOGRAPHY-TH.md. Do not edit by hand; edit the spec + generator.
   ============================================================ */
@font-face{
  font-family:'Anuphan TH';
  src:url('../assets/fonts/anuphan-th-sub.woff2') format('woff2');
  font-weight:300 600;font-style:normal;font-display:swap;
}

/* §1 stack strategy — brand faces first, Anuphan as the Thai layer */
html[lang=th]{
  --font-display:'Sentient','Anuphan TH',Georgia,serif;
  --font-support:'Familjen Grotesk','Anuphan TH',-apple-system,'Helvetica Neue',Arial,sans-serif;
  --font-mono:'Fragment Mono','Anuphan TH',ui-monospace,'SFMono-Regular',Menlo,monospace;
  font-synthesis:none; /* §1: NEVER fake-bold or faux-oblique Thai (Anuphan has no italic) */
}

/* §2 voice lockup, Thai edition — weight + size + air, never slant */
html[lang=th] .voice-caps-th{
  font-family:var(--font-support);font-weight:600;font-size:.84em;
  letter-spacing:0;text-transform:none; /* NEVER track Thai */
}
html[lang=th] .voice-caps-th-lg{font-size:.76em}
html[lang=th] .voice-serif-th{
  font-family:var(--font-display);font-style:normal;font-weight:300;
  font-size:1.05em;letter-spacing:0;
}
html[lang=th] .m-line--close .voice-serif-th{color:var(--text-night-2)}
html[lang=th] .ch-body .voice-serif-th{color:var(--text-night)}
html.veilmode[data-act="day"][lang=th] .sm2-zone .ch-body .voice-serif-th{color:var(--text-day)}
html.veilmode[data-act="day"][lang=th] .sm2-zone .m-line--close .voice-serif-th{color:var(--text-day-2)}
/* italics killed on Thai em runs; latin ems carry lang="en" and keep Sentient italic */
html[lang=th] em:not([lang=en]){font-style:normal;font-weight:300}
/* Phase-6 offer tagline is Sentient-italic latin in EN → render upright Anuphan 300 on Thai
   (Sentient carries no Thai glyphs, so italic would faux-oblique Anuphan — banned by §1) */
html[lang=th] .offer__tagline{font-style:normal;font-weight:300}

/* §3 line-height — tone-mark stack clearance (worst cluster ink box ≈ 1.28em) */
html[lang=th] .hero h1{line-height:1.22;font-size:clamp(42px,8vw,108px);letter-spacing:0}
@media(max-width:767px){html[lang=th] .hero h1{font-size:clamp(40px,12vw,58px)}}
html.fx[lang=th] .hero h1 .line-in,
html.fx[lang=th] .hero.hero-in h1 .line-in{letter-spacing:0} /* EN tracks .05em→−.01em: never on Thai */
html[lang=th] h2{line-height:1.32;letter-spacing:0}
html[lang=th] .m-line{line-height:1.52}
html[lang=th] .ch-text{line-height:1.45}
html[lang=th] .coming-head{line-height:1.4}
html[lang=th] body{line-height:1.75}
html[lang=th] .body{line-height:1.8}
html[lang=th] .ch-body{line-height:1.8}
html[lang=th] .material-line{line-height:1.65}
html[lang=th] .honest-line{line-height:1.7}
html[lang=th] .vow-line,html[lang=th] .t-note,html[lang=th] .aftercare-line{line-height:1.7}
html[lang=th] .legal-item p{line-height:1.8}
html[lang=th] .nl-line{line-height:1.75}
/* §3 reveal-mask guard (MANDATORY): headroom inside .line masks, zero layout shift */
html[lang=th] .line{padding-top:.18em;margin-top:-.18em;padding-bottom:.12em;margin-bottom:-.12em}

/* §4 small type + the clerical layer — Thai is never letter-spaced like latin caps */
html[lang=th] .kicker{font-size:12px;letter-spacing:.06em;text-transform:none}
html.js[lang=th] .hero-kicker,
html.js[lang=th] .hero.hero-in .hero-kicker{letter-spacing:.06em} /* kicker settle animation: CJK-only device */
html[lang=th] .mono{font-size:12px;letter-spacing:.04em;text-transform:none}
html[lang=th] .chip{font-size:11px;letter-spacing:.04em}
html[lang=th] .price .from{letter-spacing:.06em}
html[lang=th] .sr-note{letter-spacing:.02em}
/* §4 rule extended to every tracked-caps surface that now carries Thai */
html[lang=th] .scroll-cue{letter-spacing:.06em;text-transform:none}
html[lang=th] .c-status{letter-spacing:.04em;text-transform:none}
html[lang=th] .cta-walkin,html[lang=th] .cta-solid,html[lang=th] .cta-outline{letter-spacing:.03em;text-transform:none}
html[lang=th] .nl-btn{letter-spacing:.04em;text-transform:none}
html[lang=th] .legal-item summary{letter-spacing:.04em;text-transform:none}
html[lang=th] .sheet-foot{letter-spacing:.02em}

/* §5 hand-placed breaks only at display sizes (ZWSP/br/space; no dictionary splits).
   NOTE: Blink/WebKit apply keep-all to CJK only — Thai dictionary breaks still occur.
   text-wrap:balance is the cross-engine guard: the balancer prefers the authored
   space/ZWSP points, killing mid-phrase orphans (e.g. "…ไม่ต้อง / จอง") while
   keeping the dictionary as a same-as-EN overflow safety valve at 320px. */
html[lang=th] h1,html[lang=th] h2,html[lang=th] .m-line,html[lang=th] .ch-text,html[lang=th] .coming-head{
  word-break:keep-all;line-break:strict;overflow-wrap:normal;
}
html[lang=th] h2,html[lang=th] .m-line,html[lang=th] .ch-text,html[lang=th] .coming-head{text-wrap:balance}
/* authored segments (build-wrapped between space/ZWSP/br points) are atomic */
html[lang=th] .th-seg{white-space:nowrap}

/* TH channel order, desktop: LINE schemes are unreliable on PC (conversion.md §1.1) —
   hide the LINE coming-CTA and dress the remaining WhatsApp CTA solid */
@media(min-width:1024px){
  html[lang=th] .coming .cta-solid[data-channel="line"]{display:none}
  html[lang=th] .coming .cta-outline[data-channel="whatsapp"]{background:var(--text-day);color:var(--day-bg);border-color:var(--text-day)}
  html[lang=th] .coming .cta-outline[data-channel="whatsapp"]:hover{background:var(--mint-day);border-color:var(--mint-day);color:var(--day-bg)}
  html[lang=th] .coming .cta-outline[data-channel="whatsapp"]:active{background:var(--oxblood);border-color:var(--oxblood);color:var(--day-bg)}
}
