/* ============================================================================
   rivok-tokens.css — Token-Schicht (Theme A/B/C) + option{} + der gemeinsame
   Seiten-Hintergrund (body/body::before/::after, ganz unten).
   Single source der Design-Tokens. Wird von rivok.css ge-@import-t (Chrome-Seiten)
   UND direkt von play.html gelinkt — play.html bekommt hier Tokens, option{} und den
   Hintergrund, aber KEINE Komponenten-Klassen (.btn/.lbl/.card/…) → kein Leak ins Spiel-UI.
   ============================================================================ */

/* Inter selbst-gehostet (DSGVO-konform — KEIN Google-Request). Variable-Font: ein File deckt 100–900.
   Datei `/fonts/inter-latin-wght-normal.woff2` MUSS mit deployt werden (in den Docroot unter fonts/). */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url('/fonts/inter-latin-wght-normal.woff2') format('woff2');
}

/* ============================ TOKENS · THEME A ============================= */
/* Theme via data-theme auf <html> ODER <body> — am besten per Inline-Head-Script
   VOR dem ersten Paint setzen (verhindert Laufzeit-Umschalt-Quirks bei Form-Controls):
   <script>document.documentElement.dataset.theme=localStorage.getItem('rivok-theme')||'a'</script> */
:root,
[data-theme="a"] {
  /* Palette = KONZEPT-1 (ex tools/ui-concepts.html). Stand bis 2026-07-21 NUR lokal in
     play.html #lobby → die Lobby sah minimal anders aus als jede andere Seite. Jetzt global. */
  --bg:#070912;
  --bg-soft:#0e1117;
  --bg-card:#131820;
  --bg-card-hi:#1a2230;      /* SOLIDE lassen: Spiel-HUD über bewegter Karte. Chrome nutzt --chrome-* */
  --border:#232a36;          /* SOLIDE lassen: dito */
  --border-hi:#2f3a4a;
  --text:#eef1fb;
  --text-mute:#9aa3c4;
  --text-dim:#6b7494;
  --accent:#7b5cff;          /* primärer Akzent (Violett = Marke) */
  /* Textfarbe AUF --accent-Flächen. Früher stand dort hart #08090d — das passte zum alten
     hellen Cyan-Akzent, auf dem violetten war es dunkel auf dunkel (Allianz-Knopf, Chat-Badge,
     aktiver Chat-Tab unlesbar). --accent ist in ALLEN Themes dunkel/mittel → immer hell. */
  --accent-on:#fff;
  --warm:#ffb24d;            /* zweiter Akzent (Amber) */
  --danger:#ff5d5d;
  --good:#4fe39a;
  --purple:#a371f7;
  --grid-line:rgba(93,217,255,.04);
  /* Legacy-Aliase. --cyan = Daten-/Zahlenfarbe und bewusst NICHT = --accent (so im Konzept). */
  --cyan:#39d4f5; --amber:#ffb24d; --red:#ff5d5d; --green:#4fe39a;
  --discord:#5865f2;   /* Marken-Fixwert, nicht gethemt */

  --radius:12px;
  --radius-sm:8px;
  --radius-pill:999px;
  --font-ui:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;
  --font-mono:'JetBrains Mono','Fira Code','SF Mono',Consolas,ui-monospace,monospace;

  /* Seiten-Hintergrund: Konzept-Dunkelbasis (Aurora + Raster kommen aus rivok.css als Body-Pseudos) */
  --body-bg:#070912;
  --body-bg-attach:scroll;

  /* Card / Panel — Alias-Tokens als DIREKTE Werte (siehe Hinweis oben am Block) */
  --card-bg:linear-gradient(180deg,#1a2230,#131820);
  --card-border:#232a36;
  --card-border-w:1px;
  --card-shadow:0 10px 26px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.03);
  --card-blur:none;
  --card-edge:linear-gradient(180deg,#39d4f5,transparent);
  --card-edge-glow:0 0 10px rgba(57,212,245,.5);
  --card-edge-w:2px;
  --card-inner:0 solid transparent;   /* B: gestrichelte Innenkante */

  /* Inputs */
  --input-bg:#0e1117;
  --input-border:#232a36;
  --input-border-w:1px;
  --focus-border:#39d4f5;
  --focus-ring:0 0 0 3px rgba(57,212,245,.15);

  /* Buttons */
  --btn-bg:#1a2230;
  --btn-border:#2f3a4a;
  --btn-border-w:1px;
  --btn-shadow:none;
  --btn-radius:8px;
  /* Primary = Marken-Verlauf des Konzepts (lag vorher doppelt: rivok.css [data-theme=a] .btn.primary
     UND play.html .kz-hero-cta .btn.primary). Jetzt ein Token für alle Seiten. */
  --btn-primary-bg:linear-gradient(135deg,#7b5cff 0%,#ff5dbb 55%,#ff9a4d 100%);
  --btn-primary-on:#fff;
  --btn-primary-shadow:0 10px 30px -8px rgba(255,93,187,.55);
  --btn-primary-shadow-hover:0 16px 40px -8px rgba(255,93,187,.7);
  --btn-warm-bg:linear-gradient(180deg,#ffce5e,#ffb24d);
  --btn-warm-on:#2a1d02;
  --btn-danger-bg:#1d1115;
  --btn-danger-border:#5a2730;
  --btn-danger-fg:#ffb3b3;

  /* Pills */
  --pill-bg:rgba(57,212,245,.12);
  --pill-fg:#39d4f5;
  --pill-border:rgba(57,212,245,.25);

  /* Balken (Kontaktbox) */
  --bar-track:#0a1130;
  --bar-me:linear-gradient(90deg,#7fe3ff,var(--cyan));
  --bar-them:#3a2630;

  /* Spiel-HUD über dem Canvas (play.html): halbtransparente Float-Panels + Aktions-Tiles, gethemt */
  --panel:rgba(19,24,32,.82);
  --panel-strong:rgba(19,24,32,.94);
  /* In-Game-Float-HUD (über bewegter Karte): deckend, KEIN Blur, KEIN weicher Schatten (blüht über hellem Terrain zum Halo).
     Abgrenzung allein über die klare --border-hi-Kante. */
  --hud-bg:rgba(19,24,32,.96); --hud-blur:none; --hud-shadow:none;
  --tile-hover:#1c2532;
  --tile-sel:#11212b;
  --menu-bg:#131820;   /* solider Hintergrund für native <option>-Popups */

  /* --- CHROME (Seiten-Shell: Sidebar, Rail-Cards, Lobby-Panels) ---------------
     Glasig — bewusst getrennt von den SOLIDEN HUD-Tokens oben (--border/--bg-card-hi),
     die über der bewegten Karte lesbar bleiben müssen.
     Ex-Lokalvariablen aus play.html #lobby: --g1/--g2/--s1/--s2/--rr/--rr2/--gshadow/--grad2. */
  --chrome-panel:rgba(255,255,255,.045);
  --chrome-panel-hi:rgba(255,255,255,.07);
  --chrome-line:rgba(255,255,255,.10);
  --chrome-line-hi:rgba(255,255,255,.18);
  --chrome-radius:20px;
  --chrome-radius-sm:16px;
  --chrome-shadow:0 18px 50px -18px rgba(0,0,0,.7);
  --chrome-blur:blur(16px);
  --chrome-av:linear-gradient(135deg,#4f8cff,#39d4f5);

  /* Aurora-Hintergrund (Body-Pseudos am Dateiende) */
  --aurora-blobs:
    radial-gradient(55vw 55vw at 18% 12%, rgba(91,60,255,.55), transparent 60%),
    radial-gradient(55vw 55vw at 84% 86%, rgba(255,61,154,.55), transparent 60%),
    radial-gradient(46vw 46vw at 60% 50%, rgba(25,182,224,.42), transparent 60%);
  --aurora-grid:
    linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);
}

/* ============================ TOKENS · THEME B ============================= */
/* „Feldhandbuch" — helles Papier, Mono, Olive/Orange, Stempel, harte Kanten */
[data-theme="b"] {
  --bg:#e7e0cd;
  --bg-soft:#ddd4bc;
  --bg-card:#f1ecdc;
  --bg-card-hi:#f1ecdc;
  --border:#b9ad8c;
  --border-hi:#7d7556;
  --text:#211d12;
  --text-mute:#5f5840;
  --text-dim:#5f5840;
  --accent:#5a6233;          /* Olive */
  --accent-on:#f1ecdc;       /* Papierweiß auf Olive */
  --warm:#c9531a;            /* Signal-Orange */
  --danger:#9e2417;          /* Stempel-Rot */
  --good:#5a6233;
  --purple:#3a5f7d;          /* Blau als „cool"-Akzent */
  --cyan:#5a6233; --amber:#c9531a; --red:#9e2417; --green:#5a6233;   /* Legacy-Aliase → Olive/Orange/Stempel */

  --radius:2px;
  --radius-sm:2px;
  --radius-pill:2px;
  --font-ui:'Courier New',ui-monospace,monospace;
  --font-mono:'Courier New',ui-monospace,monospace;

  --body-bg:
    repeating-linear-gradient(0deg, rgba(58,95,125,.05) 0 1px, transparent 1px 26px),
    repeating-linear-gradient(90deg, rgba(58,95,125,.05) 0 1px, transparent 1px 26px),
    radial-gradient(1000px 500px at 80% -5%, rgba(0,0,0,.05), transparent 60%),
    #e7e0cd;
  --body-bg-attach:scroll;

  --card-bg:#f1ecdc;
  --card-border:#211d12;
  --card-border-w:2px;
  --card-shadow:3px 3px 0 #7d7556;
  --card-blur:none;
  --card-edge:transparent;             /* keine Akzentkante — stattdessen Stempel */
  --card-edge-glow:none;
  --card-edge-w:0px;
  --card-inner:1px dashed #b9ad8c;

  --input-bg:#e7e0cd;
  --input-border:#7d7556;
  --input-border-w:2px;
  --focus-border:#c9531a;
  --focus-ring:none;

  --btn-bg:#e7e0cd;
  --btn-border:#211d12;
  --btn-border-w:2px;
  --btn-shadow:2px 2px 0 #7d7556;
  --btn-radius:2px;
  --btn-primary-bg:#5a6233;
  --btn-primary-on:#f1ecdc;
  --btn-primary-shadow:2px 2px 0 #7d7556;
  --btn-primary-shadow-hover:2px 2px 0 #7d7556;
  --btn-warm-bg:#c9531a;
  --btn-warm-on:#f1ecdc;
  --btn-danger-bg:#9e2417;
  --btn-danger-border:#6e1810;
  --btn-danger-fg:#f1ecdc;

  --pill-bg:#e7e0cd;
  --pill-fg:#211d12;
  --pill-border:#211d12;

  --bar-track:#e7e0cd;
  --bar-me:#5a6233;
  --bar-them:#c9531a;

  --panel:rgba(241,236,220,.92);
  --panel-strong:rgba(245,241,228,.97);
  --hud-bg:rgba(245,241,228,.98); --hud-blur:none; --hud-shadow:3px 3px 0 #7d7556;
  --tile-hover:#ddd4bc;
  --tile-sel:#e7e0cd;
  --menu-bg:#f1ecdc;

  /* CHROME · Papier: deckend, harte Kanten, Versatz-Schatten, kein Blur */
  --chrome-panel:#f1ecdc;
  --chrome-panel-hi:#e7e0cd;
  --chrome-line:#211d12;
  --chrome-line-hi:#7d7556;
  --chrome-radius:2px;
  --chrome-radius-sm:2px;
  --chrome-shadow:3px 3px 0 #7d7556;
  --chrome-blur:none;
  --chrome-av:#5a6233;
  /* Kein Aurora — das Papier-Raster steckt bereits in --body-bg */
  --aurora-blobs:none;
  --aurora-grid:none;
}

/* ============================ TOKENS · THEME C ============================= */
/* „Neon Glass" — Glasmorphismus, Farbverlauf-Grund, Blau/Pink-Neon */
[data-theme="c"] {
  --bg:#0a0518;
  --bg-soft:rgba(0,0,0,.22);
  --bg-card:rgba(255,255,255,.055);
  --bg-card-hi:rgba(255,255,255,.10);
  --border:rgba(255,255,255,.14);
  --border-hi:rgba(255,255,255,.3);
  --text:#eef0ff;
  --text-mute:rgba(238,240,255,.62);
  --text-dim:rgba(238,240,255,.38);
  --accent:#5b8cff;          /* Blau */
  /* Dieses Blau ist zu hell für weissen Text (Kontrast nur 3.2) — dunkel darauf bringt 5.9.
     Deshalb ist --accent-on hier bewusst dunkel, in A/B dagegen hell. */
  --accent-on:#08122e;
  --warm:#ffd35b;            /* Gold */
  --danger:#ff6b81;
  --good:#9dff6b;
  --purple:#ff5bd0;          /* Pink */
  --cyan:#5b8cff; --amber:#ffd35b; --red:#ff6b81; --green:#9dff6b;   /* Legacy-Aliase → Blau/Gold/Neon */

  --radius:18px;
  --radius-sm:12px;
  --radius-pill:999px;
  --font-ui:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
  --font-mono:'JetBrains Mono','SF Mono',Consolas,ui-monospace,monospace;

  --body-bg:
    radial-gradient(42% 50% at 14% 8%, rgba(91,140,255,.55), transparent 60%),
    radial-gradient(46% 55% at 88% 16%, rgba(255,91,208,.48), transparent 60%),
    radial-gradient(55% 60% at 60% 98%, rgba(157,255,107,.22), transparent 62%),
    linear-gradient(160deg,#180b32,#0a0518);
  --body-bg-attach:fixed;

  --card-bg:rgba(255,255,255,.055);
  --card-border:rgba(255,255,255,.14);
  --card-border-w:1px;
  --card-shadow:0 12px 40px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.18);
  --card-blur:blur(18px) saturate(1.3);
  --card-edge:linear-gradient(180deg,#5b8cff,#ff5bd0);
  --card-edge-glow:0 0 14px rgba(91,140,255,.8);
  --card-edge-w:3px;
  --card-inner:0 solid transparent;

  --input-bg:rgba(0,0,0,.22);
  --input-border:rgba(255,255,255,.14);
  --input-border-w:1px;
  --focus-border:#5b8cff;
  --focus-ring:0 0 0 3px rgba(91,140,255,.25);

  --btn-bg:rgba(255,255,255,.10);
  --btn-border:rgba(255,255,255,.14);
  --btn-border-w:1px;
  --btn-shadow:none;
  --btn-radius:999px;
  --btn-primary-bg:linear-gradient(95deg,#5b8cff,#ff5bd0);
  --btn-primary-on:#fff;
  --btn-primary-shadow:0 6px 20px rgba(91,140,255,.45);
  --btn-primary-shadow-hover:0 8px 26px rgba(255,91,208,.5);
  --btn-warm-bg:linear-gradient(95deg,#ffd35b,#ffaf5b);
  --btn-warm-on:#241a02;
  --btn-danger-bg:rgba(255,107,129,.12);
  --btn-danger-border:rgba(255,107,129,.4);
  --btn-danger-fg:#ffb3bf;

  --pill-bg:rgba(91,140,255,.16);
  --pill-fg:#bcd0ff;
  --pill-border:rgba(91,140,255,.35);

  --bar-track:rgba(0,0,0,.35);
  --bar-me:linear-gradient(90deg,#5b8cff,#7fb0ff);
  --bar-them:linear-gradient(90deg,#5a2c4a,#ff5bd0);

  --panel:rgba(15,10,35,.55);
  --panel-strong:rgba(15,10,35,.72);
  /* Glas-Blur über der Karte = Halo, .72-Transparenz = Schleier, weicher Schatten = Halo über hellem Terrain → alles aus:
     deckendes Lila + helle Kante, kein Blur, kein Schatten. */
  --hud-bg:rgba(17,12,38,.96); --hud-blur:none; --hud-shadow:none;
  --tile-hover:rgba(255,255,255,.12);
  --tile-sel:rgba(91,140,255,.2);
  --menu-bg:#1a0f33;

  /* CHROME · Glas: transparenter + stärkerer Blur als A */
  --chrome-panel:rgba(255,255,255,.055);
  --chrome-panel-hi:rgba(255,255,255,.10);
  --chrome-line:rgba(255,255,255,.14);
  --chrome-line-hi:rgba(255,255,255,.3);
  --chrome-radius:18px;
  --chrome-radius-sm:12px;
  --chrome-shadow:0 12px 40px rgba(0,0,0,.4);
  --chrome-blur:blur(18px) saturate(1.3);
  --chrome-av:linear-gradient(135deg,#5b8cff,#ff5bd0);
  /* Kein zusätzlicher Aurora — der Neon-Verlauf steckt bereits in --body-bg (attach:fixed) */
  --aurora-blobs:none;
  --aurora-grid:none;
}

/* Select-Popup-Lesbarkeit (alle Themes); hier, weil play.html das ebenfalls braucht. */
option{ background:var(--menu-bg); color:var(--text); }

/* ==================== GEMEINSAMER SEITEN-HINTERGRUND =======================
   Aurora + Raster für JEDE Seite — die Chrome-Seiten (via rivok.css) und play.html
   (linkt diese Datei direkt). Lag vorher DOPPELT und mit abweichenden Werten vor:
   rivok.css `[data-theme="a"] body::before/::after` vs. play.html `.kz-aurora`/`.kz-grid`
   (andere Blob-Positionen, andere Animationsdauer, andere Raster-Maske). Genau daran hat
   man gemerkt, dass die Lobby "eine andere Seite" ist. Steuerung pro Theme über
   --aurora-blobs / --aurora-grid (B und C: none).
   Kein Komponenten-Leak: nur `body` + dessen Pseudos, keine Klassen. */
body{
  background:var(--body-bg);
  background-attachment:var(--body-bg-attach);
}
body::before{
  content:""; position:fixed; inset:-25%; z-index:-2; pointer-events:none;
  background:var(--aurora-blobs,none);
  filter:blur(85px);
  animation:kz-drift 28s ease-in-out infinite;
}
body::after{
  content:""; position:fixed; inset:0; z-index:-1; pointer-events:none;
  background-image:var(--aurora-grid,none);
  background-size:46px 46px;
  -webkit-mask:radial-gradient(circle at 50% 16%,#000,transparent 78%);
          mask:radial-gradient(circle at 50% 16%,#000,transparent 78%);
}
@keyframes kz-drift{
  0%,100%{ transform:translate(0,0) scale(1); }
  33%    { transform:translate(6vw,3vw) scale(1.12); }
  66%    { transform:translate(-5vw,5vw) scale(.94); }
}
/* Dauerlaufende 85px-Blur-Animation ist teuer — bei Reduced-Motion einfrieren. */
@media (prefers-reduced-motion:reduce){ body::before{ animation:none; } }
