:root {
  /* Single source of truth for brand blue — #263e58 everywhere.
     --navy-deep is only a darker shade of this same blue, for gradients
     (hero, planes panel); it isn't a second color. There used to also be a
     --slate token holding the old #1d2573 blue — removed so nothing can
     drift from --navy again. */
  --navy: #263e58;
  --navy-deep: #1e3146;
  --orange: #ea5c1c;
  /* Deeper shade of the brand orange, used wherever orange sits behind/under
     text (buttons, eyebrows, highlights) — the brand orange alone fails
     WCAG AA (~3.5:1) for text against white or paper backgrounds. This tone
     clears 4.5:1 while staying visually the same orange. */
  --orange-strong: #b74715;
  /* Lighter orange used for text on dark backgrounds (navy/black),
     where the base orange also falls short of 4.5:1. */
  --orange-on-dark: #ff8a54;
  --orange-light: #fdede6;
  --black: #0a0a0c;
  --paper: #f4f6fa;
  --card: #ffffff;
  /* Warm complementary accent — used sparingly (a section background here,
     a card surface there), never as the dominant background. */
  --cream: #f2efdf;
  --ink: #1a1b2e;
  --ink-soft: #4a4c68;
  --line: rgba(26, 27, 46, 0.1);
  --line-light: rgba(255, 255, 255, 0.16);
  /* Form validation error state — not a brand color (red is functionally
     required for "something went wrong"), kept as its own token instead of
     a loose hex so it has one source of truth too. */
  --danger: #dc3545;
  --danger-text: #ffb3ba;
  --radius: 18px;
  --maxw: 1180px;
  --ff-display: "Poppins", sans-serif;
  --ff-body: "Inter", sans-serif;
  --ff-mono: "IBM Plex Mono", monospace;
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  * {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
}

:focus-visible {
  outline: 3px solid var(--orange);
  outline-offset: 3px;
  border-radius: 4px;
}
