/* Operator palette — CoasterReady. Generated from data/coasterguide/site.json at
   build time; overrides the house tokens in main.css. Order matters: main.css, this, print.css. */
@font-face {
  font-family: 'Archivo Black';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/archivo-black.ttf') format('truetype');
}

:root {
  --paper: #0C0F16;
  --surface: #131826;
  --surface-2: #1A2234;
  --surface-3: #232D46;
  --ink: #FBFCFF;
  --ink-2: #D9DFEE;
  --muted: #9AA5BE;
  --line: #2C3854;
  --line-strong: #44547E;
  --brand: #DE4F44;
  --brand-2: #E8605A;
  --brand-3: #FF9A90;
  --brand-soft: #2E1416;
  --accent: #F7BC2F;
  --accent-2: #FFD970;
  --accent-soft: #332810;
  --danger: #F98E8E;
  --danger-soft: #331B1E;
  --warn: #E8973A;
  --warn-soft: #33250F;
  --good: #5FCB97;
  --good-soft: #12301F;
  --focus: #FFD970;
  --font-display: 'Archivo Black', 'Arial Black', Impact, sans-serif;
}

/* Trackline motif — CoasterReady's visual signature. The rule under every section
   title is a track: a rail bar, a gap, and a wheel dot. The hero carries a marquee bulb
   strip that chases only when motion is welcome. Cards read as spec plates. */
.band__head h2::after, .hero__title::after {
  content: ''; display: block; width: 4.6rem; height: 3px; margin-top: var(--space-3);
  background: linear-gradient(90deg,
    var(--accent) 0 2.2rem,
    transparent 2.2rem 2.85rem,
    var(--accent-2) 2.85rem 3rem,
    transparent 3rem);
}

.hero:not(.hero--photo)::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 10px; z-index: 2;
  /* Two spacings layered — ride lighting is irregular, and irregular reads as texture
     where a uniform strip reads as a pier arcade. */
  background-image:
    radial-gradient(circle at 6px 5px, var(--accent) 0 2.2px, transparent 2.9px),
    radial-gradient(circle at 17px 5px, var(--accent-2) 0 1.8px, transparent 2.5px);
  background-size: 26px 10px, 19px 10px;
  opacity: .55;
}
@media (prefers-reduced-motion: no-preference) {
  .hero:not(.hero--photo)::before { animation: trackline-marquee 2.4s linear infinite; }
  @keyframes trackline-marquee { to { background-position: 26px 0, 19px 0; } }
}

/* Single-weight display face: normalize the serif-era weights and spacing.
   Balance the rag — a stacked poster headline wants composed breaks, not accidents. */
h1, h2, h3, .hero__title, .brandmark__name, .brandmark__name * { font-weight: 400; letter-spacing: 0; }
.hero__title { text-transform: uppercase; line-height: .96; letter-spacing: .012em; text-wrap: balance; }
.band__head h2 { text-transform: uppercase; letter-spacing: .012em; }

/* Signal red is strictly interactive; data reads as deep white, never as an alert.
   The 800 weights come from multi-weight display faces — under a single-weight face
   they only trigger synthetic bold. */
.hero__meta-value { color: var(--ink); }
.stat-row__value, .food-card__price { color: var(--ink); font-weight: 400; }

/* Spec plates: data reads as engineering. */
.card { border-top: 3px solid var(--accent); }
.card__meta { font-family: var(--font-mono); font-size: .66rem; letter-spacing: .05em; text-transform: uppercase; }
.card__badges { font-family: var(--font-mono); font-size: .68rem; }
.data-table th { font-family: var(--font-mono); font-size: .68rem; text-transform: uppercase; letter-spacing: .06em; }

::selection { background: var(--accent); color: #241a08; }
