/* ==========================================================================
   NightKeep: public pages (landing, /privacy, /terms)
   --------------------------------------------------------------------------
   Hand-written stylesheet, the look of the testing branch's landing page
   translated one to one from its Tailwind build: the same tokens, type scale,
   spacing and breakpoints (640 / 768 / 1024px), written as semantic classes.
   The 3D scene (js/landing-scene.js) reads the --scene-* tokens at runtime.
   ========================================================================== */

/* ── 1. Tokens ─────────────────────────────────────────────────────────────── */
:root {
  color-scheme: dark;
  /* Neon green: 400 is the signal colour, the rest are its tints and shadows */
  --color-neon-50: #ebffea;
  --color-neon-100: #ccffc9;
  --color-neon-200: #9bff96;
  --color-neon-300: #65ff5c;
  --color-neon-400: #52f549;
  --color-neon-500: #0df000;
  --color-neon-600: #0bc900;
  --color-neon-700: #089e00;
  --color-neon-800: #0b7a05;
  --color-neon-900: #0e5a0a;
  --color-neon-950: #053302;

  /* Night: the near-black surfaces, all with a green cast */
  --color-night-950: #030806;
  --color-night-900: #07110c;
  --color-night-800: #0c1a13;
  --color-night-700: #12261c;
  --color-night-600: #1b3529;
  --color-mist: #8aa598;

  --color-danger: #ff5d5d;
  --color-warn: #f2c14e;

  --font-display: 'Bricolage Grotesque', serif;
  --font-sans: 'Hanken Grotesk', sans-serif;
  --font-mono: 'JetBrains Mono', monospace;

  /* Four sizes, 3x apart */
  --text-meta: 12px;
  --text-meta-line: 16px;
  --text-head: 48px;
  --text-head-line: 48px;

  /* Glow colours as variables so the light theme can tone them down */
  --glow-soft: rgb(82 245 73 / 0.45);
  --glow-wide: rgb(82 245 73 / 0.35);
  --glow-text: rgb(82 245 73 / 0.55);
  --glow-halo: rgb(82 245 73 / 0.22);
  --glow-card: rgb(82 245 73 / 0.18);
  --shadow-glow: 0 0 32px var(--glow-soft);
  --shadow-glow-lg: 0 0 64px var(--glow-wide);
  --text-shadow-glow: 0 0 32px var(--glow-text);

  /* Read by js/landing-scene.js */
  --scene-signal: var(--color-neon-400);
  --scene-threat: var(--color-danger);
  --scene-night: var(--color-night-950);
  --scene-surface: var(--color-night-600);
  --scene-mist: var(--color-mist);

  --ease-colors: cubic-bezier(0.4, 0, 0.2, 1);
}
/* Light theme: the same token names, remapped. Night turns into pale green
   paper, neon into deep greens that hold 4.5:1 as text on it. Components keep
   using the tokens and need no light variants of their own. */
:root[data-theme="light"] {
  color-scheme: light;
  --color-night-950: #f3f8f2;
  --color-night-900: #ffffff;
  --color-night-800: #e8f1e6;
  --color-night-700: #dbe8d8;
  --color-night-600: #c9dcc5;
  --color-mist: #4d6650;
  --color-neon-50: #0d1f0f;
  --color-neon-100: #133d14;
  --color-neon-200: #1a5a1a;
  --color-neon-300: #1b7a14;
  --color-neon-400: #1c8215;
  --color-neon-500: #2fb326;
  --color-neon-600: #24961c;
  --color-neon-700: #3b7a35;
  --color-neon-800: #9fd39a;
  --color-neon-900: #c4e6c0;
  --color-neon-950: #e3f5e0;
  --color-danger: #c62828;
  --color-warn: #9a6700;
  --glow-soft: rgb(28 130 21 / 0.18);
  --glow-wide: rgb(28 130 21 / 0.12);
  --glow-text: rgb(28 130 21 / 0);
  --glow-halo: rgb(82 245 73 / 0.28);
  --glow-card: rgb(82 245 73 / 0.16);
}

@font-face {
  font-family: 'Bricolage Grotesque';
  src: url('/fonts/bricolagegrotesque/bricolage-grotesque-latin-wght.woff2') format('woff2');
  font-weight: 200 800;
  font-display: swap;
}
@font-face {
  font-family: 'Hanken Grotesk';
  src: url('/fonts/hankengrotesk/hanken-grotesk-latin-wght.woff2') format('woff2');
  font-weight: 100 900;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrainsmono/jetbrains-mono-latin-wght.woff2') format('woff2');
  font-weight: 100 800;
  font-display: swap;
}

/* ── 2. Base (the part of the former preflight these pages rely on) ───────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; border: 0 solid; }
html { -webkit-text-size-adjust: 100%; }
body {
  font-family: var(--font-sans);
  font-size: 16px;
  line-height: 1.5;
  color: var(--color-neon-50);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* The panel's background: two ambient green glows behind the scene. Fixed,
     so they stay in the viewport while ScrollSmoother moves the content. */
  background:
    radial-gradient(1200px 820px at 12% -12%, color-mix(in oklab, var(--color-neon-400) 14%, transparent) 0%, transparent 60%),
    radial-gradient(900px 700px at 104% 18%, color-mix(in oklab, var(--color-neon-300) 10%, transparent) 0%, transparent 60%),
    var(--color-night-950);
  background-attachment: fixed;
}
h1, h2, h3 { font-size: inherit; font-weight: inherit; }
a { color: inherit; text-decoration: inherit; }
ol, ul { list-style: none; }
img, svg, canvas { display: block; vertical-align: middle; }
img { max-width: 100%; height: auto; }
b, strong { font-weight: bolder; }
code, kbd { font-family: var(--font-mono); font-size: 1em; }
button { font: inherit; color: inherit; background: transparent; cursor: pointer; }
[hidden] { display: none !important; }
/* Used by the translated headings (data-i18n-html): the accent word on its own line */
.block { display: block; }

:focus-visible { outline: 2px solid var(--color-neon-400); outline-offset: 2px; }
/* The page behind an open modal does not scroll */
html:has(dialog[open]) { overflow: hidden; }

/* Scrollbars: thin, translucent, neon on hover; the same on every page */
* { scrollbar-width: thin; scrollbar-color: color-mix(in oklab, var(--color-neon-400) 35%, transparent) transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
  background: color-mix(in oklab, var(--color-neon-400) 30%, transparent);
  border: 3px solid transparent;
  background-clip: padding-box;
  border-radius: 999px;
}
::-webkit-scrollbar-thumb:hover { background-color: color-mix(in oklab, var(--color-neon-400) 60%, transparent); }
::-webkit-scrollbar-corner { background: transparent; }

/* Set by the inline script in landing.html before the first paint, lifted by
   landing.js once GSAP owns the hero and header. */
.intro-pending .hero-copy, .intro-pending .site-head { visibility: hidden; }

/* ── 3. Shared pieces ──────────────────────────────────────────────────────── */
.btn-neon, .btn-ghost {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 48px;
  padding: 0 24px;
  border-radius: 8px;
  border: 1px solid;
  font-weight: 800;
  text-decoration: none;
  transition: color 150ms var(--ease-colors), background-color 150ms var(--ease-colors), border-color 150ms var(--ease-colors);
}
.btn-neon { border-color: var(--color-neon-400); background: var(--color-neon-400); color: var(--color-night-950); box-shadow: var(--shadow-glow); }
.btn-neon:hover { background: var(--color-neon-300); }
.btn-ghost { border-color: var(--color-neon-800); color: var(--color-neon-100); }
.btn-ghost:hover { border-color: var(--color-neon-400); color: var(--color-neon-300); }

.eyebrow {
  font-family: var(--font-mono);
  font-size: var(--text-meta);
  line-height: var(--text-meta-line);
  font-weight: 800;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-neon-300);
}
.eyebrow-row { display: flex; align-items: center; gap: 8px; }
.glow-dot { display: inline-block; width: 8px; height: 8px; border-radius: 999px; background: var(--color-neon-400); box-shadow: var(--shadow-glow); }
/* Accent words inside headings */
.neon-word { font-weight: 800; color: var(--color-neon-400); text-shadow: var(--text-shadow-glow); }

/* Display headings: the 48px step, extralight, tight */
.hero-title, .section-title {
  font-family: var(--font-display);
  font-size: var(--text-head);
  line-height: var(--text-head-line);
  font-weight: 200;
  letter-spacing: -0.025em;
  text-wrap: balance;
}
.mono-meta { font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line); }
.muted { color: var(--color-mist); }

/* Text tones, also toggled by landing.js on the live log rows */
.tone-danger { color: var(--color-danger); }
.tone-warn { color: var(--color-warn); }
.tone-accent { color: var(--color-neon-300); }
.tone-text { color: var(--color-neon-50); }
.tone-dim { color: var(--color-neon-700); }
.tone-signal { color: var(--color-neon-400); }

/* The 1440px column every section and the header sit in */
.panel, .site-head, .site-foot { max-width: 1440px; margin-inline: auto; padding-inline: 16px; }
@media (min-width: 768px) { .panel, .site-head, .site-foot { padding-inline: 48px; } }

/* ── 4. Backdrop, progress bar, smoother ───────────────────────────────────── */
.scroll-progress {
  position: fixed; inset: 0 0 auto 0; z-index: 10;
  height: 2px;
  transform-origin: left;
  transform: scaleX(0);
  background: var(--color-neon-400);
  box-shadow: var(--shadow-glow);
  pointer-events: none;
}
.scene-backdrop { position: fixed; inset: 0; pointer-events: none; }
.hero-halo {
  position: absolute;
  top: 50%; left: 66%;
  width: min(1100px, 120vw); height: min(1100px, 120vw);
  translate: -50% -50%;
  border-radius: 999px;
  background: radial-gradient(closest-side, var(--glow-halo), transparent);
  opacity: calc(0.6 + var(--flash, 0) * 0.8);
}
.scene-canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
@media (max-width: 1023.98px) { .scene-canvas { opacity: 0.45; } }
@media (min-width: 1024px) { .scene-canvas { mask-image: linear-gradient(to right, transparent 8%, black 46%); } }
/* Clips the side fly-ins: ScrollSmoother sets overflow:visible inline on #smooth-content */
#smooth-content, .site-main { overflow-x: clip; }

/* ── 5. Header ─────────────────────────────────────────────────────────────── */
.site-head {
  position: relative; z-index: 30;
  display: flex; align-items: center; gap: 16px;
  min-height: 96px;
}
@media (min-width: 768px) { .site-head { gap: 32px; } }
/* The brand mark, identical on every page (panel header, server select):
   28px logo, 8px gap, "Night" in the text colour, "Keep" in the signal green. */
.brand {
  display: flex; align-items: center;
  font-family: var(--font-display);
  font-size: 1.08rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  text-decoration: none;
  white-space: nowrap;
}
/* Margin instead of gap: the wordmark is a text node plus a span, a gap would split it. */
.brand img { width: 28px; height: 28px; margin-right: 8px; }
.brand span { color: var(--color-neon-400); }
.site-nav { display: none; margin-left: auto; gap: 32px; }
@media (min-width: 1024px) { .site-nav { display: flex; } }
.site-nav a, .foot-nav a { color: var(--color-mist); text-decoration: none; transition: color 150ms var(--ease-colors); }
.site-nav a:hover, .foot-nav a:hover { color: var(--color-neon-400); }
.prefs { display: flex; align-items: center; gap: 8px; margin-left: auto; }
@media (min-width: 1024px) { .prefs { margin-left: 0; } }
.head-cta { display: none; }
@media (min-width: 640px) { .head-cta { display: inline-flex; } }

/* Language menu: globe plus the active code, the three languages drop down below */
.lang-menu { position: relative; }
.lang-menu-toggle {
  display: inline-flex; align-items: center; gap: 6px;
  height: 36px; padding: 0 10px;
  border-radius: 8px; border: 1px solid var(--color-night-600);
  font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line); font-weight: 800;
  color: var(--color-mist);
  transition: color 150ms var(--ease-colors), border-color 150ms var(--ease-colors);
}
.lang-menu-toggle:hover, .lang-menu-toggle[aria-expanded="true"] { border-color: var(--color-neon-500); color: var(--color-neon-300); }
.lang-menu-toggle svg { width: 16px; height: 16px; }
.lang-menu-list {
  position: absolute; top: 100%; right: 0; z-index: 20;
  display: grid; gap: 4px;
  min-width: 160px; margin-top: 8px; padding: 4px;
  border-radius: 12px; border: 1px solid var(--color-night-600);
  background: var(--color-night-900);
  box-shadow: var(--shadow-glow);
}
.lang-menu-list .lang-btn {
  display: flex; align-items: center; width: 100%;
  min-height: 36px; padding: 0 12px;
  border-radius: 8px; border: 1px solid transparent;
  font-family: var(--font-sans); font-size: 14px; line-height: 20px; font-weight: 400;
  color: var(--color-neon-50);
  text-align: left;
}
.lang-menu-list .lang-btn:hover { background: var(--color-night-800); }
.lang-menu-list .lang-btn--active { font-weight: 800; color: var(--color-neon-400); }

/* Header switch between dark and light; shows the icon of the theme it switches to */
.theme-toggle {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px;
  border-radius: 8px; border: 1px solid var(--color-night-600);
  color: var(--color-mist);
  transition: color 150ms var(--ease-colors), border-color 150ms var(--ease-colors);
}
.theme-toggle:hover { border-color: var(--color-neon-500); color: var(--color-neon-300); }
.theme-toggle svg { width: 1em; height: 1em; }
.theme-toggle .icon-moon { display: none; }
:root[data-theme="light"] .theme-toggle .icon-moon { display: block; }
:root[data-theme="light"] .theme-toggle .icon-sun { display: none; }

/* ── 6. Hero ───────────────────────────────────────────────────────────────── */
.hero {
  position: relative;
  display: grid; gap: 32px;
  padding-top: 48px; padding-bottom: 96px;
}
.hero-copy { position: relative; z-index: 1; display: grid; gap: 24px; max-width: 560px; }
.hero-lead { max-width: 480px; color: var(--color-mist); }
.hero-actions { display: flex; flex-wrap: wrap; gap: 16px; padding-top: 8px; }
.login-error {
  max-width: 480px;
  padding: 12px 16px;
  border-radius: 12px;
  border: 1px solid color-mix(in oklab, var(--color-danger) 50%, transparent);
  background: color-mix(in oklab, var(--color-danger) 10%, transparent);
  font-size: 14px; line-height: 20px;
}
.login-error-title { font-weight: 800; color: var(--color-danger); }
.login-error-text { margin-top: 4px; color: var(--color-mist); }
.hero-facts {
  display: flex; flex-wrap: wrap; gap: 8px 24px;
  padding-top: 16px;
  font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line);
  color: var(--color-mist);
}
@media (min-width: 1024px) {
  .hero {
    grid-template-columns: repeat(12, minmax(0, 1fr));
    align-items: center;
    min-height: calc(100svh - 96px);
    padding-top: 0;
  }
  .hero-copy { grid-column: 1 / span 6; grid-row: 1; }
}

/* ── 7. Server log section ─────────────────────────────────────────────────── */
.log { display: grid; gap: 48px; padding-top: 96px; padding-bottom: 96px; }
.log-figure { display: grid; align-content: start; gap: 16px; }
.log-text { max-width: 440px; color: var(--color-mist); }
.log-feed {
  align-self: center;
  overflow: hidden;
  border-radius: 16px;
  border: 1px solid var(--color-neon-900);
  background: color-mix(in oklab, var(--color-night-900) 80%, transparent);
  box-shadow: var(--shadow-glow-lg);
}
.log-feed figcaption {
  padding: 16px 24px;
  border-bottom: 1px solid var(--color-neon-900);
  background: var(--color-night-800);
}
.log-feed ol { font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line); }
.log-feed li {
  display: grid;
  grid-template-columns: 72px minmax(0, 1fr);
  column-gap: 16px;
  padding: 16px 24px;
}
/* Only the bottom row draws no divider; the live feed prepends rows, so this
   follows the order on its own. */
.log-feed li:not(:last-child) { border-bottom: 1px solid var(--color-night-600); }
.log-feed time { grid-row: span 2; color: var(--color-neon-700); }
.log-feed li > span { color: var(--color-mist); }
@media (min-width: 1024px) {
  .log { grid-template-columns: repeat(12, minmax(0, 1fr)); align-content: center; min-height: 100svh; padding-top: 64px; padding-bottom: 64px; }
  .log-figure { grid-column: span 5; }
  .log-feed { grid-column: span 7; }
  .log-feed li { grid-template-columns: 96px 176px minmax(0, 1fr); }
  .log-feed time { grid-row: span 1; }
}

/* ── 8. Feature sections ───────────────────────────────────────────────────── */
.features-panel { display: grid; gap: 32px; padding-top: 96px; padding-bottom: 96px; }
.feature-head { display: grid; align-content: start; gap: 8px; }
.feature-rule { display: block; width: 48px; height: 2px; margin-bottom: 16px; background: var(--color-neon-400); box-shadow: var(--shadow-glow); }
.feature-body { display: grid; gap: 16px; }
.feature-list { display: grid; gap: 16px; }
.feature-card {
  display: grid; align-content: start; gap: 8px;
  padding: 24px;
  border-radius: 16px;
  border: 1px solid var(--color-night-600);
  background: color-mix(in oklab, var(--color-night-900) 70%, transparent);
  transition: border-color 300ms var(--ease-colors), box-shadow 300ms var(--ease-colors);
}
.feature-card:hover { border-color: var(--color-neon-500); box-shadow: var(--shadow-glow); }
.feature-card h3 { font-weight: 800; }
.feature-card p { color: var(--color-mist); }
.feature-num { font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line); color: var(--color-neon-400); }
.feature-tag {
  justify-self: start;
  margin-top: 8px;
  padding: 4px 12px;
  border-radius: 999px;
  border: 1px solid var(--color-neon-900);
  background: color-mix(in oklab, var(--color-neon-950) 60%, transparent);
  font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line);
  color: var(--color-neon-200);
}
/* Lead card: the ticket preview is the slot for a real screenshot later */
.feature-card--lead { display: flex; flex-direction: column; }
.feature-card--lead h3 { font-family: var(--font-display); font-size: 24px; line-height: 32px; }
.feature-card--lead p { max-width: 520px; }
.ticket-demo {
  display: grid; gap: 8px;
  margin-top: auto;
  padding: 24px 16px 16px;
  border-radius: 12px;
  border: 1px solid var(--color-night-700);
  background: color-mix(in oklab, var(--color-night-950) 80%, transparent);
  font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line);
}
.ticket-demo li { display: flex; flex-wrap: wrap; column-gap: 12px; }
.feature-card--premium { border-color: var(--color-neon-800); background: color-mix(in oklab, var(--color-neon-950) 40%, transparent); }
.feature-card--premium:hover { border-color: var(--color-neon-400); }
.feature-card--premium h3 { color: var(--color-neon-300); }
.feature-more { color: var(--color-mist); }
@media (min-width: 768px) {
  .feature-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .feature-list--three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .feature-card--wide { grid-column: span 2; }
  .feature-card--lead { grid-column: span 2; grid-row: span 2; padding: 32px; }
  .feature-card--full { grid-column: span 3; }
}
@media (min-width: 1024px) {
  .features-panel { grid-template-columns: repeat(12, minmax(0, 1fr)); align-content: center; min-height: 100svh; padding-top: 64px; padding-bottom: 64px; }
  .feature-head { grid-column: span 3; }
  .feature-list, .feature-body { grid-column: span 9; }
  .feature-body .feature-list { grid-column: auto; }
}

/* ── 9. Closing ────────────────────────────────────────────────────────────── */
.closing { padding-top: 96px; padding-bottom: 96px; }
.closing-card {
  display: grid; gap: 32px;
  padding: 32px;
  border-radius: 24px;
  border: 1px solid var(--color-neon-800);
  background: radial-gradient(70% 120% at 15% 100%, var(--glow-card), transparent 70%);
  box-shadow: var(--shadow-glow-lg);
}
.closing-action { display: grid; justify-items: start; gap: 16px; }
@media (min-width: 768px) { .closing-card { padding: 64px; } }
@media (min-width: 1024px) {
  .closing { display: grid; align-content: center; min-height: calc(100svh - 97px); padding-top: 64px; padding-bottom: 64px; }
  .closing-card { grid-template-columns: repeat(12, minmax(0, 1fr)); align-items: center; }
  .closing-card .section-title { grid-column: span 7; }
  .closing-action { grid-column: 9 / span 4; }
}

/* ── 10. Footer ────────────────────────────────────────────────────────────── */
.site-foot {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px;
  padding-top: 32px; padding-bottom: 32px;
  border-top: 1px solid var(--color-night-600);
}
.foot-nav { display: flex; gap: 24px; font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line); }

/* ── 11. Legal documents (/privacy, /terms, and the landing page's modal) ──
   The document bodies are long plain HTML, so they are styled by element
   instead of class by class. */
.legal-main { display: flex; align-items: center; justify-content: center; min-height: 100svh; padding: 16px; }
.legal-card {
  display: flex; flex-direction: column;
  width: 100%; max-width: 768px;
  max-height: min(860px, calc(100svh - 32px));
  overflow: hidden;
  border-radius: 16px;
  border: 1px solid var(--color-night-600);
  background: var(--color-night-900);
  box-shadow: var(--shadow-glow-lg);
}
.legal-toolbar { display: flex; align-items: center; gap: 8px; padding: 12px 16px; border-bottom: 1px solid var(--color-night-600); }
.legal-toolbar .lang-btn {
  min-height: 36px; padding: 0 12px;
  border-radius: 8px; border: 1px solid var(--color-night-600);
  font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line); font-weight: 800;
  color: var(--color-mist);
  transition: color 150ms var(--ease-colors), border-color 150ms var(--ease-colors);
}
.legal-toolbar .lang-btn:hover { border-color: var(--color-neon-500); color: var(--color-neon-100); }
.legal-toolbar .lang-btn--active { border-color: var(--color-neon-400); color: var(--color-neon-300); }
.legal-close {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; margin-left: auto;
  border-radius: 8px; border: 1px solid var(--color-night-600);
  font-size: 20px; line-height: 28px;
  color: var(--color-mist);
  text-decoration: none;
  transition: color 150ms var(--ease-colors), border-color 150ms var(--ease-colors);
}
.legal-close:hover { border-color: var(--color-neon-400); color: var(--color-neon-300); }
.legal-body { overflow-y: auto; overscroll-behavior: contain; padding: 32px 16px; }
.legal-doc { display: grid; gap: 16px; color: var(--color-neon-50); }
.legal-doc h1 { font-family: var(--font-display); font-size: 32px; line-height: 1.25; font-weight: 200; letter-spacing: -0.025em; text-wrap: balance; }
.legal-doc h1 .accent { font-weight: 800; color: var(--color-neon-400); text-shadow: var(--text-shadow-glow); }
.legal-doc .updated { margin-top: -8px; font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line); color: var(--color-neon-700); }
.legal-doc h2 { margin-top: 16px; font-family: var(--font-display); font-size: 20px; line-height: 28px; font-weight: 800; color: var(--color-neon-100); }
.legal-doc p, .legal-doc li { color: var(--color-mist); }
.legal-doc ul { display: grid; gap: 8px; padding-left: 20px; list-style: disc; }
.legal-doc ul li::marker { color: var(--color-neon-700); }
.legal-doc strong { font-weight: 800; color: var(--color-neon-50); }
.legal-doc a { color: var(--color-neon-300); text-decoration: underline; text-decoration-color: var(--color-neon-800); text-underline-offset: 2px; }
.legal-doc a:hover { text-decoration-color: var(--color-neon-400); }
.legal-doc code { padding: 2px 4px; border-radius: 4px; background: var(--color-night-800); font-family: var(--font-mono); font-size: 0.9em; color: var(--color-neon-200); }
.legal-nav {
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: 16px;
  padding: 16px;
  border-top: 1px solid var(--color-night-600);
  font-family: var(--font-mono); font-size: var(--text-meta); line-height: var(--text-meta-line);
}
.legal-nav a { color: var(--color-mist); text-decoration: none; }
.legal-nav a:hover { color: var(--color-neon-400); }
@media (min-width: 768px) {
  .legal-toolbar, .legal-nav { padding-inline: 32px; }
  .legal-body { padding-inline: 32px; }
}
.legal-dialog {
  margin: auto;
  width: calc(100% - 32px); max-width: 768px; max-height: none;
  padding: 0;
  overflow: visible;
  background: transparent;
  color: var(--color-neon-50);
}
.legal-dialog[open] { display: flex; }
.legal-dialog::backdrop { background: color-mix(in oklab, var(--color-night-950) 80%, transparent); backdrop-filter: blur(4px); }
