/* TapShareCard design tokens (CONTRACT §12, BRAND.md). Dark is the :root default (landing + cards).
   Portal/admin layouts set <html data-theme="light"> by default; app.js applies the stored `tsc-theme` choice. */
/* QA M7: font-display:optional (both fonts are preloaded by tscHead) - the web font is used only if it is ready for first paint,
   so it can never swap in later and shift the layout. If it misses, the metric-matched local fallbacks below are used for that view.
   QA r5 (WP-F2): re-tuned by MEASURING rendered widths in Chromium (Playwright, landing copy: body paragraphs for Inter, h1/h2 + names for
   Fraunces) against the real woff2 files. Each fallback has a regular face (100-500) and a bold face (600-900, the real Bold file instead of
   synthetic bold) with its own size-adjust; ascent/descent = the real font's hhea metrics / size-adjust (Inter .96875/.2412, Fraunces .978/.255).
   Desktop/iOS: Arial/Helvetica/Liberation Sans and Times New Roman/Times/Liberation Serif. Android: Roboto and Noto Serif/Droid Serif (own
   families, so a device without Arial/Times skips to them instead of an untuned system font). Measured ratios real/fallback:
   Inter 400 vs Arial 105.8, 600 vs Arial Bold 100.4 (700: 101.6), 400 vs Roboto 107.6, 600 vs Roboto Bold 107.5;
   Fraunces 600 opsz72 (h1/h2) vs Times Bold 102.3 (opsz24: 110.7), 500/400 vs Times 115.2/114.1, 600 opsz72 vs Noto Serif Bold 86.9 (opsz24: 94.1), 400 vs Noto Serif 97.3. */
@font-face{font-family:'Inter';src:url('../fonts/inter-latin-wght-normal.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:optional}
@font-face{font-family:'Fraunces';src:url('../fonts/fraunces-latin-opsz-normal.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:optional}
@font-face{font-family:'Inter Fallback';src:local('Arial'),local('ArialMT'),local('Helvetica'),local('Liberation Sans'),local('LiberationSans');font-weight:100 500;size-adjust:105.8%;ascent-override:91.56%;descent-override:22.8%;line-gap-override:0%}
@font-face{font-family:'Inter Fallback';src:local('Arial Bold'),local('Arial-BoldMT'),local('Helvetica Bold'),local('Helvetica-Bold'),local('Liberation Sans Bold'),local('LiberationSans-Bold');font-weight:600 900;size-adjust:100.8%;ascent-override:96.11%;descent-override:23.93%;line-gap-override:0%}
@font-face{font-family:'Inter Fallback Android';src:local('Roboto'),local('Roboto-Regular'),local('Roboto Regular');font-weight:100 500;size-adjust:107.6%;ascent-override:90.03%;descent-override:22.42%;line-gap-override:0%}
@font-face{font-family:'Inter Fallback Android';src:local('Roboto Bold'),local('Roboto-Bold');font-weight:600 900;size-adjust:107.8%;ascent-override:89.87%;descent-override:22.38%;line-gap-override:0%}
@font-face{font-family:'Fraunces Fallback';src:local('Times New Roman'),local('TimesNewRomanPSMT'),local('Times'),local('Times-Roman'),local('Liberation Serif'),local('LiberationSerif');font-weight:100 500;size-adjust:114.8%;ascent-override:85.19%;descent-override:22.21%;line-gap-override:0%}
@font-face{font-family:'Fraunces Fallback';src:local('Times New Roman Bold'),local('TimesNewRomanPS-BoldMT'),local('Times Bold'),local('Times-Bold'),local('Liberation Serif Bold'),local('LiberationSerif-Bold');font-weight:600 900;size-adjust:102%;ascent-override:95.88%;descent-override:25%;line-gap-override:0%}
@font-face{font-family:'Fraunces Fallback Android';src:local('Noto Serif'),local('NotoSerif-Regular'),local('Noto Serif Regular'),local('Droid Serif'),local('DroidSerif');font-weight:100 500;size-adjust:97.8%;ascent-override:100%;descent-override:26.07%;line-gap-override:0%}
@font-face{font-family:'Fraunces Fallback Android';src:local('Noto Serif Bold'),local('NotoSerif-Bold'),local('Droid Serif Bold'),local('DroidSerif-Bold');font-weight:600 900;size-adjust:87.2%;ascent-override:112.16%;descent-override:29.24%;line-gap-override:0%}
/* Landing hero h1 only (.tsc-hero__h, Fraunces 600 at opsz 144 is much narrower): measured real/fallback 90.65 (Times Bold), 76.67 (Noto Serif Bold). */
@font-face{font-family:'Fraunces Hero Fallback';src:local('Times New Roman Bold'),local('TimesNewRomanPS-BoldMT'),local('Times Bold'),local('Times-Bold'),local('Liberation Serif Bold'),local('LiberationSerif-Bold');font-weight:100 900;size-adjust:90%;ascent-override:108.67%;descent-override:28.33%;line-gap-override:0%}
@font-face{font-family:'Fraunces Hero Fallback Android';src:local('Noto Serif Bold'),local('NotoSerif-Bold'),local('Droid Serif Bold'),local('DroidSerif-Bold');font-weight:100 900;size-adjust:76%;ascent-override:128.68%;descent-override:33.55%;line-gap-override:0%}
:root{
  --tsc-bg:#0B1220;--tsc-bg-2:#111A2E;--tsc-ink:#F6F7FB;--tsc-mute:#9AA4B8;
  --tsc-accent:#19D3C5;--tsc-accent-ink:#06302C;--tsc-accent2:#F2B64A;
  --tsc-danger:#FF6B6B;--tsc-ok:#3DDC97;
  --tsc-card:#FFFFFF0F;--tsc-line:#FFFFFF1F;
  --tsc-r:16px;--tsc-r-sm:10px;--tsc-ctl-h:44px;
  --tsc-font-text:'Inter','Inter Fallback','Inter Fallback Android',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --tsc-font-display:'Fraunces','Fraunces Fallback','Fraunces Fallback Android',Georgia,'Times New Roman',serif;
  /* derived (not in CONTRACT; safe to rely on inside WP-0B/portal/admin CSS) */
  --tsc-focus:0 0 0 3px #19D3C559;
  --tsc-shadow:0 8px 28px #00000059;
  --tsc-field-bg:#FFFFFF0F;--tsc-field-line:#FFFFFF33;
  --tsc-space-1:4px;--tsc-space-2:8px;--tsc-space-3:12px;--tsc-space-4:16px;--tsc-space-5:24px;--tsc-space-6:32px;
  --tsc-safe-t:env(safe-area-inset-top,0px);--tsc-safe-r:env(safe-area-inset-right,0px);
  --tsc-safe-b:env(safe-area-inset-bottom,0px);--tsc-safe-l:env(safe-area-inset-left,0px);
  color-scheme:dark;
}
html[data-theme=light]{
  --tsc-bg:#F6F7FB;--tsc-bg-2:#FFFFFF;--tsc-ink:#0B1220;--tsc-mute:#5B6478;
  --tsc-card:#FFFFFF;--tsc-line:#0B12201A;
  --tsc-accent-text:#0A6F68; /* teal as TEXT on light backgrounds (AA); fills keep --tsc-accent */
  --tsc-focus:0 0 0 3px #19D3C58C;
  --tsc-shadow:0 6px 22px #0B122014;
  --tsc-field-bg:#FFFFFF;--tsc-field-line:#0B122033;
  color-scheme:light;
}
:root{--tsc-accent-text:var(--tsc-accent)}
