/*
 * theme.css — TicketDesk's design-system values.
 * Mood: corporate + swiss. Small corners, one quiet shadow tier, a strict
 * neutral palette built from a single deep teal-green accent.
 */

:root {
  --canvas: #ffffff;
  --surface: #ffffff;
  --surface-2: #f3f6f5;
  --border: #dfe4e2;
  --border-strong: #b7c0bd;
  --ink: #16211f;
  --muted: #6a706f;

  --accent: #0f5c56;
  --accent-hover: #0b4a45;
  --accent-ink: #ffffff;
  --accent-text: #0f5c56;
  --accent-strong: #0f5c56;
  --accent-soft: #e3efec;
  --accent-border: #bcd8d2;

  --success: #157f3c;
  --success-ink: #ffffff;
  --success-soft: #e2f0e6;
  --success-strong: #146b34;
  --warning: #b45309;
  --warning-ink: #ffffff;
  --warning-soft: #f2e6dd;
  --warning-strong: #a64c08;
  --danger: #b91c1c;
  --danger-ink: #ffffff;
  --danger-soft: #f6e1e1;
  --danger-strong: #a51818;

  --chart-1: #0f5c56;
  --chart-2: #b45309;
  --chart-3: #5152a5;
  --chart-4: #7c285c;
  --chart-5: #0b5668;
  --chart-6: #425605;

  --font-display: "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;
  --font-body: "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;
  --font-sans: "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;
  --font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --display-weight: 700;
  --display-tracking: -0.015em;
  --eyebrow-tracking: 0.09em;

  --radius-btn: 0.375rem;
  --radius-card: 0.375rem;
  --radius-input: 0.375rem;
  --radius-lg: 0.375rem;
  --radius-xl: 0.375rem;
  --border-w: 1px;
  --border-strong-w: 1px;
  --shadow-card: 0 1px 2px 0 color-mix(in srgb, var(--ink) 7%, transparent);
  --shadow-raised: 0 8px 24px -6px color-mix(in srgb, var(--ink) 16%, transparent);
  --shadow-btn: none;
  --card-pad: 1.5rem;
  --caps: none;
  --caps-tracking: 0.02em;
  --btn-weight: 600;
  --measure: 66ch;

  /* App-specific tokens (--x-*) — the closing band stays dark in both
     modes on purpose (a deliberate statement band, not the page ground). */
  --x-band-dark: #10201d;
  --x-band-ink: #f4f8f7;
  --x-band-muted: #9fb5b0;
  --x-band-border: #29403b;
}

html[data-theme="dark"] {
  --canvas: #101615;
  --surface: #16201e;
  --surface-2: #1c2825;
  --border: #2b3634;
  --border-strong: #47534f;
  --ink: #eef2f0;
  --muted: #9caaa6;

  --accent: #45ab9e;
  --accent-hover: #59bcae;
  --accent-ink: #0a1615;
  --accent-text: #5cc2b3;
  --accent-strong: #6ecebf;
  --accent-soft: #1c3733;
  --accent-border: #2f5850;

  --success: #3fae6d;
  --success-ink: #08150c;
  --success-soft: #163524;
  --success-strong: #6cc994;
  --warning: #d68a45;
  --warning-ink: #180d00;
  --warning-soft: #3a2717;
  --warning-strong: #e5a468;
  --danger: #d5726f;
  --danger-ink: #180000;
  --danger-soft: #3a1c1b;
  --danger-strong: #e59794;

  --chart-1: #58bcae;
  --chart-2: #d68a45;
  --chart-3: #9092d6;
  --chart-4: #c27aa8;
  --chart-5: #57a8c2;
  --chart-6: #9ba85c;

  --shadow-card: 0 1px 2px 0 color-mix(in srgb, black 30%, transparent);
  --shadow-raised: 0 8px 24px -6px color-mix(in srgb, black 45%, transparent);

  --x-band-dark: #0a1210;
  --x-band-ink: #f4f8f7;
  --x-band-muted: #93a9a4;
  --x-band-border: #223530;
}

/*
 * app.css — THIS APP'S OWN CSS, for what no primitive and no utility covers:
 * the one screen that makes this app itself — a timer's dial, a kanban
 * board's columns, a seating plan, a game grid. Write those here, named for
 * what they are, in tokens only (var(--accent), var(--radius-card),
 * var(--font-display)). It loads last, after design.css and theme.css, and
 * wins. Ships empty.
 *
 * Not for restyling a primitive: those live in tailwind/components.css and
 * are yours to edit there. Not for colours: those live in theme.css.
 */

/* ---- The closing statement band: dark in both light and dark mode, on
   purpose — a deliberate band, not the page ground flipping with the toggle. */
.band-dark {
  background: var(--x-band-dark);
  border-top: 1px solid var(--x-band-border);
}

/* ---- The hero product panel: the "photograph" for this product-first hero
   is a real rendered ticket queue. It is the ONE thing that animates on
   load — the brief's hero-only motion — and nothing below it moves. */
.queue-panel {
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-card);
  overflow: hidden;
}

@keyframes queue-panel-in {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: none; }
}
@keyframes queue-row-in {
  from { opacity: 0; transform: translateX(8px); }
  to { opacity: 1; transform: none; }
}

.hero-panel .queue-panel {
  animation: queue-panel-in 560ms ease-out both;
}
.hero-panel .queue-row {
  opacity: 0;
  animation: queue-row-in 420ms ease-out both;
}
.hero-panel .queue-row:nth-child(1) { animation-delay: 220ms; }
.hero-panel .queue-row:nth-child(2) { animation-delay: 300ms; }
.hero-panel .queue-row:nth-child(3) { animation-delay: 380ms; }
.hero-panel .queue-row:nth-child(4) { animation-delay: 460ms; }

html.reduced-motion .hero-panel .queue-panel,
html.reduced-motion .hero-panel .queue-row {
  animation: none;
  opacity: 1;
  transform: none;
}
