/* Hallmark - macrostructure: inherited Caribbean chart; genre: atmospheric.
 * Theme: COMMON-H6; typography only; shell geometry and scene code retained.
 * Pre-emit critique: P5 H4 E4 S5 R5 V4. Three voices, no added motion.
 */
@font-face {
  font-family: "Anybody";
  src: url("/assets/units/type/anybody-latin-wdth-normal.woff2") format("woff2");
  font-style: normal; font-weight: 100 900; font-stretch: 50% 150%;
  font-display: swap;
}
@font-face {
  font-family: "Newsreader";
  src: url("/assets/units/type/newsreader-latin-wght-normal.woff2") format("woff2");
  font-style: normal; font-weight: 200 800;
  font-display: swap;
}
@font-face {
  font-family: "Azeret Mono";
  src: url("/assets/units/type/azeret-mono-latin-wght-normal.woff2") format("woff2");
  font-style: normal; font-weight: 100 900;
  font-display: swap;
}
@font-face {
  font-family: "Anybody Metric"; src: local("Arial Bold");
  font-style: normal; font-weight: 100 900;
  size-adjust: 112.3404%; ascent-override: 70.76706%;
  descent-override: 21.36364%; line-gap-override: 0.0%;
}
@font-face {
  font-family: "Anybody Roar Metric"; src: local("Arial Bold");
  font-style: normal; font-weight: 100 900;
  size-adjust: 81.49939%; ascent-override: 97.54674%;
  descent-override: 29.44807%; line-gap-override: 0.0%;
}
@font-face {
  font-family: "Anybody Wide Metric"; src: local("Arial Bold");
  font-style: normal; font-weight: 100 900;
  size-adjust: 138.96639%; ascent-override: 57.20808%;
  descent-override: 17.27036%; line-gap-override: 0.0%;
}
@font-face {
  font-family: "Newsreader Metric"; src: local("Georgia");
  font-style: normal; font-weight: 100 900;
  size-adjust: 96.21703%; ascent-override: 76.38981%;
  descent-override: 27.5419%; line-gap-override: 0.0%;
}
@font-face {
  font-family: "Azeret Metric"; src: local("Consolas");
  font-style: normal; font-weight: 100 900;
  size-adjust: 118.2238%; ascent-override: 79.25646%;
  descent-override: 19.45463%; line-gap-override: 0.0%;
}
/* Metric values above come from font_metrics.py and real source text.
 * Matching average advances reduces swap movement; it cannot match every wrap.
 * Root specificity 0,2,0 beats legacy html[data-glowmap] token assignments.
 */
:root:root {
  --n4-face-display: "Anybody", "Anybody Metric", Arial, sans-serif;
  --n4-face-roar: "Anybody", "Anybody Roar Metric", Arial, sans-serif;
  --n4-face-wide: "Anybody", "Anybody Wide Metric", Arial, sans-serif;
  --n4-reading: "Newsreader", "Newsreader Metric", Georgia, serif;
  --n4-mono: "Azeret Mono", "Azeret Metric", monospace;
  --n4-display: var(--n4-face-display);
  --n4-display-chart: var(--n4-face-roar);
  --font-display: var(--n4-face-display);
  --font-body: var(--n4-reading);
  --font-text: var(--n4-reading);
  --font-ui: var(--n4-mono);
  --font-label: var(--n4-mono);
  --font-mono: var(--n4-mono);
  --glow-font: var(--n4-reading);
  --glow-mono: var(--n4-mono);
  --board-font: var(--n4-reading);
  --board-mono: var(--n4-mono);
  --fin-mono: var(--n4-mono);
  --wf-display: var(--n4-face-display);
  --c3-title: var(--n4-face-roar);
  --c3-display: var(--n4-face-display);
  --c3-body: var(--n4-reading);
  --n4-type-ink: var(--glow-ink, #e8f6f3);
  --n4-type-stage: var(--glow-stage, #02070d);
  --n4-type-focus: var(--n4-type-ink);
  --n4-type-track: -.025em;
}
/* Money defines its own inherited display token. Replace it at that boundary. */
:root:root body .money3-hero {
  --n4-display: var(--n4-face-display);
  --n4-display-chart: var(--n4-face-roar);
}
:root:root body { font-family: var(--n4-reading); }
:root:root body :where(main, .eco-hero) {
  font-optical-sizing: auto;
  font-synthesis: none;
}
/* Shell declarations change only family. All sizes, boxes, spacing and states
 * remain with the shell owner, including its later font shorthands.
 */
:root body :is(.app-header, .site-footer, .collective-footer, #n4mu-bar, .s1-islands-dialog, .s1-menu-dialog),
:root body :is(.app-header, .site-footer, .collective-footer, #n4mu-bar, .s1-islands-dialog, .s1-menu-dialog) * {
  font-family: var(--n4-mono);
}
:root:root body .topline { font-family: var(--n4-face-display); }
/* Prose is explicit so later page shorthands cannot restore a UI face. */
:root:root body :where(main, .eco-hero) :is(p, li, dd, figcaption, blockquote, .scene-person__bio, .profile-bio, .c3-bio) {
  font-family: var(--n4-reading);
  text-wrap: pretty;
}
/* Small labels, controls, dates and data retain one instrument voice.
 * The final :not excludes shell descendants even when main wraps a shell.
 */
:root:root body :where(main, .eco-hero) :is(button, input, select, textarea, summary, label, nav, time, data, code, pre, kbd, dt, th, td, small,
  .meta, .item-meta, .phase-eyebrow, .phase-index, .phase-meta, .phase-status, .source-line,
  .source-slip, .cost-period, .cost-status, .cost-country, .trade-label, .section-code,
  .glow-caption, .glow-hint, .orb-state, .glow-map-legend, .glow-map-legend a,
  .home-kicker, .home-meta, .home-source, .home-via, .home-news-filters,
  .c1-eyebrow, .c1-kicker, .c1-draft-tag, .c1-source-label, .c3-chart-note, .c3-map-caption,
  .c3-grand-label, .c3-little-label, .c3-brac-label, .c3-credits-jump, .creators-heading > p,
  .mx3-count, .mx3-kicker, .mx3-meta, .mx3-dispatch-meta, .mx3-dispatch-detail, .mx3-chart-note, .mx3-source,
  .l3-kicker, .l3-room__meta, .l3-room__state, .l3-room__location, .l3-map-label,
  .m3-kicker, .m3-meta, .m3-chart-label, .money3-kicker, .mw-row-value,
  .wh-eyebrow, .wh-chart-key, .wh-notice-meta, .wh-map-label, .wh-post, .wh-doorway,
  .row-meta, .row-age, .row-close, .row-actions, .tag-label, .board-state, .board-footnote,
  .lc3-tag__place, .lc3-tag__measure, .lc3-tag__date, .lc3-key__unit, .lc3-unit, .lc3-basis,
  .lc3-map-label, .lc3-reading-note, .lc3-trace__ends, .lc3-trace__high, .lc3-trace__low,
  .fin-ad-label, .fin-credit, .fin-night-tag, .fin-band-copy,
  .action, .phase-action, .submit-button, .c1-cta-link, .l3-tune, .lc3-key__go,
  .n4-number, .n4-money, .n4-date):not(:where(.app-header *, .site-footer *, .collective-footer *, #n4mu-bar *)) {
  font-family: var(--n4-mono);
  font-variant-numeric: lining-nums tabular-nums;
}
:root:root body :where(main, .eco-hero) :is(button, label, dt, th, .phase-eyebrow, .phase-index,
  .home-kicker, .c1-eyebrow, .c1-kicker, .c1-draft-tag, .c1-source-label,
  .mx3-kicker, .l3-kicker, .m3-kicker, .money3-kicker, .wh-eyebrow, .section-code,
  .row-meta, .tag-label, .lc3-tag__place, .fin-ad-label, .action, .phase-action, .submit-button) {
  letter-spacing: .07em;
  text-transform: uppercase;
}
/* Display specificity 0,3,2 beats the old 0,2,2 heading reset and later
 * page-level family shorthands. Every round-2 display selector is retained.
 */
:root:root body :where(main, .eco-hero) :is(h1, h2, h3, h4, .n4-display, .signal-title, .cost-figure,
  .hero-value, .hero-figure, .brief-value, .live-figure__value, .pay-figure,
  .running-figure, .running-number, .look-number, .not-found-code,
  .station-ident__title, .ident-letter, .l3-cover__title, .cost-ruler__headline,
  :where(.scene-person, .cost-ruler__item, .editorial-global__slots) > strong,
  :where(.home-facts, .money3-cell, .m3-race, .m3-spark, .cost-ruler__headline) strong,
  :where(.home-watch-art) b, :where(.creator-peek) .mark,
  :where(.profile-head) .profile-art, :where(.mx3-plate) .w,
  :where(.board-push__prices) dd, :where(.board-push__prices) [data-product],
  :where(.fuel-register, .lc3-fuel) dd, .lc3-key__fig b, .l3-room__name, .row-title,
  [data-race-output], [data-ident-title], .wordmark, .house-art, .mday b,
  .mx3-dispatch-title, .c3-card-name, .c3-map-person strong, .lc3-tag__value, .wh-pinned-sign, .fin-card-art b):not(:where(.app-header *, .site-footer *, .collective-footer *, #n4mu-bar *)) {
  font-family: var(--n4-face-display);
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-variation-settings: normal;
  font-optical-sizing: auto;
  font-synthesis: none;
  letter-spacing: var(--n4-type-track);
  text-wrap: balance;
  hyphens: none;
  overflow-wrap: anywhere;
  min-width: 0;
}
:root:root body :is(main, .eco-hero) h1 {
  font-family: var(--n4-face-roar);
  font-weight: 800;
  font-stretch: 70%;
}
/* The old home lock is released for this temporary typographic treatment.
 * Only the type changes; the hero's camera, box sizes and scene stay owned.
 */
:root body #glow-title {
  font-family: var(--n4-face-roar);
  font-weight: 800;
  font-stretch: 70%;
  font-variation-settings: normal;
  font-synthesis: none;
}
/* Large figures are wide signs, small tabular values remain mono above. */
:root:root body :where(main, .eco-hero) :is(.cost-figure, .hero-value, .hero-figure,
  .brief-value, .live-figure__value, .pay-figure, .running-figure, .running-number,
  .look-number, .not-found-code, .lc3-key__fig b, .lc3-tag__value,
  .home-facts strong, .money3-cell strong, .m3-race strong, .m3-spark strong,
  .board-push__prices dd, .fuel-register dd, .lc3-fuel dd, [data-race-output]) {
  font-family: var(--n4-face-wide);
  font-weight: 600;
  font-stretch: 125%;
  font-variant-numeric: lining-nums tabular-nums;
}
:root:root body :where(main, .eco-hero) :is(h1, h2, h3, h4) :is(em, i) { font-style: normal; }
:root:root body :is(main, .eco-hero) :is(h1, h2, h3, h4) :is(a, em, i, span, strong) {
  font-family: inherit;
  font-weight: inherit;
  font-stretch: inherit;
  font-variation-settings: inherit;
}
/* Dense island selection and the Wharf action pair need proportional controls. */
:root:root body :is(main, .eco-hero) :is(select, .wh-post, .wh-doorway) {
  font-family: var(--n4-face-display);
  font-weight: 600;
  font-stretch: 100%;
  letter-spacing: normal;
  text-transform: none;
}
:root:root body :is(main, .eco-hero) svg text:not(:where(.mx3-plate .w)) {
  font-family: var(--n4-mono);
  font-variant-numeric: lining-nums tabular-nums;
}
@media (max-width: 600px) {
  /* A figure is never split inside a decimal on a three-column fuel plate. */
  :root:root body :is(main, .eco-hero) :is(.fuel-register, .lc3-fuel) dd {
    font-family: var(--n4-face-display);
    font-stretch: 100%;
    white-space: nowrap;
  }
}
:root:root body :where(main, .eco-hero) :is(table, time, data, .n4-number, .n4-date, .n4-money,
  .mw-row-value, .m1-number, .phase-meta, .board-row__copy, .mx3-count, .mday b) {
  font-variant-numeric: lining-nums tabular-nums;
}
:root:root body :where(main, .eco-hero) .record-register__number::before {
  font-family: var(--n4-face-wide);
  font-weight: 600;
  font-stretch: 125%;
  font-variant-numeric: lining-nums tabular-nums;
}
:root:root body :where(main, .eco-hero) :is(.n4-number, .n4-money, .n4-date) { white-space: nowrap; }
:root:root body :where(main, .eco-hero) .n4-decimal { text-align: end; font-variant-numeric: lining-nums tabular-nums; }
:root:root body :where(main, .eco-hero) a {
  text-underline-offset: .18em;
  text-decoration-thickness: .065em;
  text-decoration-skip-ink: auto;
}
:root:root body :where(main, .eco-hero) :is(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 2px solid var(--n4-type-focus);
  outline-offset: 3px;
  transition: none;
}
::selection { background: var(--n4-type-ink); color: var(--n4-type-stage); }
@media (forced-colors: active) {
  :root:root body :where(main, .eco-hero) :focus-visible { outline-color: Highlight; }
  ::selection { background: Highlight; color: HighlightText; }
}
@media (max-width: 414px) {
  /* The narrow island picker keeps its supplied box and 44px target. */
  :root:root body .money3-hero .m3-hero-picker select {
    font-size: clamp(11px, 3.125vw, 13px);
    font-weight: 500;
  }
}
/* Plotted place names are signs beside their source counts. */
:root:root body :where(main, .eco-hero) :is(.mx3-map-place, .mx3-map-place > span, .wh-map-label strong) {
  font-family: var(--n4-face-display);
  font-weight: 600;
  font-stretch: 100%;
  font-variation-settings: normal;
}

@media (max-width: 360px) {
  /* Use 12px of the existing 16px control gutter for the new face's name. */
  :root:root body .money3-hero .m3-hero-picker select { inline-size: calc(100% + 12px); letter-spacing: -.04em; }
}
