/* Where's the NWSL Schedule? — departures-board look.
   Two palettes, chosen by the site (not the viewer's system setting):
   "night" (default): a classic black split-flap board.
   "air": <html data-palette="air">, a bright modern-terminal version. */
:root {
  color-scheme: dark;
  --ground: #0f1113;      /* page around the board */
  --board: #15171a;       /* board panel */
  --tile: #25282c;        /* split-flap tile, top half */
  --tile-low: #1e2124;    /* split-flap tile, bottom half */
  --rule: #2c3035;        /* hairlines */
  --ink: #f3ecdc;         /* flap lettering, warm cream */
  --ink-2: #b9b4a8;       /* secondary text */
  --ink-3: #7f8388;       /* muted text */
  --amber: #f6b40e;       /* DELAYED, the brand accent */
  --green: #7fd69a;       /* ON TIME / YES */
  --red: #ff6a5c;         /* record-breaking lateness */
  --amber-fill: #f6b40e;  /* amber used as a surface (strip, buttons, live bar) */
  --green-fill: #7fd69a;
  --on-fill: #15171a;     /* text on amber/green surfaces */
  --hinge: #15171a;       /* split line across a flap */
  --flap-shadow: 0 .03em 0 #000, inset 0 0 0 1px rgba(255,255,255,.03);
  --bar: #7f8388;         /* past seasons in the chart */
  --bar-ink: #15171a;     /* labels inside chart bars */

  --display: "Big Shoulders Display", "Oswald", "Arial Narrow", Impact, sans-serif;
  --mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
  --sans: "IBM Plex Sans Condensed", "Arial Narrow", "Helvetica Neue", Arial, sans-serif;
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
html { background: var(--ground); }
body {
  margin: 0;
  background: var(--ground);
  color: var(--ink);
  font: 400 17px/1.55 var(--sans);
  -webkit-font-smoothing: antialiased;
}
a { color: inherit; }
:focus-visible { outline: 2px solid var(--amber); outline-offset: 3px; }

/* ---------- top strip ---------- */
.strip {
  display: flex; justify-content: space-between; align-items: center; gap: 16px;
  padding: 10px 20px;
  background: var(--amber-fill); color: var(--on-fill);
  font: 600 13px/1 var(--mono); letter-spacing: .14em; text-transform: uppercase;
}
.strip-clock { font-variant-numeric: tabular-nums; }

/* ---------- layout ---------- */
.wrap {
  max-width: 960px; margin: 0 auto;
  padding-inline: 20px; padding-block: 40px 24px;
  display: grid; gap: 56px;
}
.label {
  margin: 0 0 14px;
  font: 600 13px/1.2 var(--mono); letter-spacing: .14em; text-transform: uppercase;
  color: var(--ink-3);
}

/* ---------- hero ---------- */
.hero { display: grid; gap: 18px; justify-items: start; }
.eyebrow { margin: 0; font: 400 13px/1.3 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--amber); }
h1 {
  margin: 0; max-width: 14ch;
  font: 800 clamp(44px, 9vw, 96px)/.92 var(--display);
  text-transform: uppercase; letter-spacing: .005em; text-wrap: balance;
}
.quip { margin: 0; max-width: 52ch; font-size: clamp(18px, 2.4vw, 22px); line-height: 1.4; color: var(--ink-2); }
.cta { display: flex; flex-wrap: wrap; gap: 12px; }
.cta a {
  display: inline-block; padding: 12px 18px; border-radius: 3px;
  font: 600 14px/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; text-decoration: none;
  background: var(--green-fill); color: var(--on-fill);
}
.cta a + a { background: transparent; color: var(--ink); box-shadow: inset 0 0 0 1px var(--rule); }

/* ---------- split-flap tiles ---------- */
.flaps { display: flex; flex-wrap: wrap; gap: .08em; perspective: 600px; }
.flap {
  position: relative; display: inline-grid; place-items: center;
  width: .74em; height: 1.08em; border-radius: .05em;
  background: linear-gradient(var(--tile) 0 50%, var(--tile-low) 50% 100%);
  box-shadow: var(--flap-shadow);
  font-family: var(--display); font-weight: 800; line-height: 1;
  color: var(--ink);
}
.flap::after { /* the hinge line */
  content: ""; position: absolute; left: 0; right: 0; top: calc(50% - 1px); height: 2px;
  background: var(--hinge); opacity: .9;
}
.flap.gap { background: transparent; box-shadow: none; width: .32em; }
.flap.gap::after { display: none; }
.flap > span { display: block; }
.flap.turn > span { animation: turn .32s ease-out; }
@keyframes turn {
  0% { transform: rotateX(0); }
  45% { transform: rotateX(88deg); opacity: .4; }
  100% { transform: rotateX(0); }
}
.answer { font-size: clamp(64px, 15vw, 150px); }
.answer.tone-amber .flap { color: var(--amber); }
.answer.tone-green .flap { color: var(--green); }

/* ---------- counter ---------- */
.counter { padding-top: 28px; border-top: 1px solid var(--rule); }
.flaps-days { font-size: clamp(72px, 17vw, 168px); }
.hms { margin: 16px 0 0; font: 400 15px/1.4 var(--mono); color: var(--ink-2); font-variant-numeric: tabular-nums; }
.note { margin: 8px 0 0; max-width: 60ch; color: var(--ink-2); }
.note a { color: var(--amber); }
.note strong { color: var(--ink); font-weight: 600; }

/* ---------- departures board ---------- */
.board-scroll { overflow-x: auto; background: var(--board); border-radius: 4px; box-shadow: inset 0 0 0 1px var(--rule); }
table { width: 100%; border-collapse: collapse; font: 400 15px/1.3 var(--mono); }
th {
  text-align: left; padding: 12px 16px; font-weight: 600; font-size: 11px; letter-spacing: .14em; text-transform: uppercase;
  color: var(--ink-3); border-bottom: 1px solid var(--rule);
}
td { padding: 14px 16px; border-bottom: 1px solid var(--rule); vertical-align: top; text-transform: uppercase; }
tr:last-child td { border-bottom: 0; }
.c-flight, td.c-flight { color: var(--amber); white-space: nowrap; }
td.c-due { white-space: nowrap; font-variant-numeric: tabular-nums; }
td.c-remark { white-space: nowrap; font-weight: 600; letter-spacing: .06em; }
.tone-amber { color: var(--amber); }
.tone-green { color: var(--green); }
.tone-muted { color: var(--ink-3); }
.tone-red { color: var(--red); }
.blink { animation: blink 1.2s steps(1) infinite; }
@keyframes blink { 50% { opacity: .25; } }

/* ---------- chart ---------- */
.chart-sub { margin: -6px 0 18px; color: var(--ink-3); font-size: 15px; }
.bars { position: relative; display: grid; gap: 10px; padding-top: 26px; padding-bottom: 28px; }
.bar-row { display: grid; grid-template-columns: 52px 1fr; gap: 12px; align-items: center; }
.bar-year { font: 600 14px/1 var(--mono); color: var(--ink-2); font-variant-numeric: tabular-nums; }
.bar-track { position: relative; height: 26px; }
.bar {
  position: absolute; left: 0; top: 3px; bottom: 3px; min-width: 2px;
  background: var(--bar); border-radius: 0 4px 4px 0;
}
.bar.is-live { background: var(--amber-fill); }
.bar.is-done { background: var(--green-fill); }
.bar-val {
  position: absolute; top: 50%; transform: translateY(-50%);
  padding-left: 8px; white-space: nowrap;
  font: 400 13px/1 var(--mono); color: var(--ink-2); font-variant-numeric: tabular-nums;
}
.bar-val strong { color: var(--ink); font-weight: 600; }
.bar-val:not(.inside) { margin-left: 4px; padding: 3px 6px; background: var(--ground); border-radius: 2px; }
.bar-val.inside { padding: 0 8px 0 0; color: var(--bar-ink); font-weight: 600; }
.bar-val.inside strong { color: inherit; }
.axis { position: absolute; left: 64px; right: 0; top: 0; bottom: 0; pointer-events: none; }
.tick { position: absolute; top: 26px; bottom: 18px; border-left: 1px dashed var(--rule); }
.tick span { position: absolute; bottom: -20px; transform: translateX(-50%); font: 400 11px/1 var(--mono); color: var(--ink-3); }
.kickoff { position: absolute; top: 0; bottom: 18px; border-left: 2px solid var(--green); }
.kickoff span {
  position: absolute; top: -2px; right: 6px; white-space: nowrap;
  font: 600 11px/1.2 var(--mono); letter-spacing: .06em; text-transform: uppercase; color: var(--green); text-align: right;
}

/* ---------- share ---------- */
.share { padding: 22px; background: var(--board); border-radius: 4px; box-shadow: inset 0 0 0 1px var(--rule); }
.share-text { margin: 0 0 16px; font: 400 16px/1.45 var(--mono); color: var(--ink); }
.share-actions { display: flex; flex-wrap: wrap; gap: 10px; }
.share-actions button, .share-actions a {
  appearance: none; border: 0; cursor: pointer; text-decoration: none;
  padding: 11px 16px; border-radius: 3px;
  font: 600 13px/1 var(--mono); letter-spacing: .08em; text-transform: uppercase;
  background: transparent; color: var(--ink); box-shadow: inset 0 0 0 1px var(--rule);
}
.share-actions button { background: var(--amber-fill); color: var(--on-fill); box-shadow: none; }
.share-actions a:hover, .share-actions button:hover { filter: brightness(1.12); }

/* ---------- podcast ---------- */
.pod h2 { margin: 0 0 8px; font: 800 clamp(28px, 4.5vw, 40px)/1 var(--display); text-transform: uppercase; }
.pod p { margin: 0 0 16px; max-width: 58ch; color: var(--ink-2); }
.pod-links { display: flex; flex-wrap: wrap; gap: 20px; }
.pod-links a { font: 600 14px/1.4 var(--mono); letter-spacing: .06em; text-transform: uppercase; color: var(--amber); text-underline-offset: 4px; }

/* ---------- footer ---------- */
.foot {
  max-width: 960px; margin: 0 auto;
  padding-inline: 20px; padding-block: 24px 48px;
  border-top: 1px solid var(--rule);
  font: 400 13px/1.5 var(--mono); color: var(--ink-3);
}
.foot p { margin: 0 0 4px; }

/* ---------- preview switcher (only with #preview) ---------- */
.preview {
  position: fixed; left: 50%; transform: translateX(-50%);
  bottom: calc(12px + env(safe-area-inset-bottom, 0px));
  display: flex; flex-wrap: wrap; justify-content: center; gap: 4px; align-items: center;
  max-width: calc(100% - 24px);
  padding: 6px; border-radius: 6px; background: #000; box-shadow: 0 8px 30px rgba(0,0,0,.35), inset 0 0 0 1px #2c3035;
  font: 600 11px/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; z-index: 10;
}
.preview span { padding: 0 8px; color: #7f8388; }
.preview .sep { width: 1px; height: 20px; padding: 0; background: #2c3035; margin: 0 4px; }
.preview button {
  appearance: none; border: 0; cursor: pointer; padding: 8px 10px; border-radius: 4px;
  background: transparent; color: #b9b4a8; font: inherit; letter-spacing: inherit; text-transform: inherit;
}
.preview button[aria-pressed="true"] { background: #f6b40e; color: #15171a; }

/* ---------- "air" palette: bright terminal, cool paper white ---------- */
:root[data-palette="air"] {
  color-scheme: light;
  --ground: #f2f5f7;      /* airy, faintly cool off-white */
  --board: #ffffff;
  --tile: #ffffff;
  --tile-low: #edf1f4;
  --rule: #dce2e7;
  --ink: #1b2229;         /* deep slate lettering */
  --ink-2: #4c5761;
  --ink-3: #7c8791;
  --amber: #9a6200;       /* amber dark enough to read as text */
  --green: #1d7a48;
  --red: #c0392e;
  --amber-fill: #ffc63d;
  --green-fill: #9fe0b5;
  --on-fill: #1b2229;
  --hinge: #d6dde3;
  --flap-shadow: 0 1px 0 rgba(27,34,41,.10), 0 8px 18px -10px rgba(27,34,41,.25), inset 0 0 0 1px #e3e8ec;
  --bar: #c9d2da;
  --bar-ink: #1b2229;
}
/* On a light board the answer tiles flip to solid colour, like a lit status panel. */
:root[data-palette="air"] .answer.tone-amber .flap {
  background: linear-gradient(#ffc63d 0 50%, #f7b928 50% 100%); color: var(--ink);
}
:root[data-palette="air"] .answer.tone-green .flap {
  background: linear-gradient(#a6e3ba 0 50%, #93d9aa 50% 100%); color: var(--ink);
}
:root[data-palette="air"] .answer.tone-amber .flap::after,
:root[data-palette="air"] .answer.tone-green .flap::after { background: rgba(27,34,41,.18); }
:root[data-palette="air"] .blink { animation-name: blink-soft; }
@keyframes blink-soft { 50% { opacity: .4; } }

/* ---------- narrow screens ---------- */
@media (max-width: 560px) {
  body { font-size: 16px; }
  .wrap { padding-inline: 16px; gap: 44px; padding-block: 28px 20px; }
  .strip { padding-inline: 16px; }
  .foot { padding-inline: 16px; padding-bottom: 96px; }
  th.c-flight, td.c-flight { display: none; }
  th, td { padding-inline: 12px; }
  table { font-size: 13px; }
  .bar-row { grid-template-columns: 40px 1fr; gap: 8px; }
  .axis { left: 48px; }
}

@media (prefers-reduced-motion: reduce) {
  .flap.turn > span, .blink { animation: none; }
}
