/* ============================================================================
   heldin-ui.css — Geteiltes Stylesheet für Theme- (hell/dunkel) und
   Sprach-Umschaltung (DE/EN) über alle Seiten der heldin-resilience-lab-Website.
   ----------------------------------------------------------------------------
   Stand: 9. Juni 2026
   Geladen von:  index · plattform · impact · threat-news/* · beide CVs ·
                 beide Knowledge Graphs (dort nur Theme).

   THEME-KONZEPT (wichtig):
     Dark-first bleibt Default (Brand). Das Light-Theme greift über
     html[data-theme="light"] und arbeitet mit zwei Hebeln:
       1) MARKEN-TOKENS DREHEN: --midnight/--deep-indigo/--indigo (Flächen) und
          --lavender (Text) werden im Light-Theme auf Hell-auf-Dunkel-Werte
          umdefiniert. Da ALLE Seiten konsequent diese Tokens nutzen
          (Hintergründe = --midnight/--deep-indigo, Text = --lavender bzw.
          rgba(var(--text-rgb),…)), kippt damit praktisch die gesamte Seite
          automatisch — ohne dass jede Karte/Sektion einzeln benannt werden muss.
       2) RGBA-TRIPEL DREHEN: die in den Seiten auf rgba(var(--*-rgb),…)
          umgestellten Opazitäts-Töne (Text, Ränder, Overlays) kippen mit.
     Anschließend werden nur die WENIGEN doppelt belegten Stellen zurückgesetzt:
       · Button-Text auf Crimson (muss hell bleiben),
       · die helle Sektion S8 (.light-section) bleibt hell.
   Dark-Werte stehen als Kommentar zur Orientierung in den Seiten selbst.
   Dieses Stylesheet wird als LETZTES im <head> eingebunden → gewinnt bei
   gleicher Spezifität.
   ============================================================================ */

/* ── RGB-Tripel: Default (Dark) ──────────────────────────────────────────────
   Füttern die rgba(var(--*-rgb), <alpha>)-Aufrufe in den Seiten. */
:root {
  --text-rgb:    237,232,245;   /* Lavender-Text/-Ränder auf Dunkel */
  --surface-rgb: 15,8,38;       /* dunkle, transluzente Flächen/Overlays */
  --indigo-rgb:  45,27,105;     /* Indigo-Tints */
  --teal-rgb:    126,200,200;   /* Teal als rgba */
  --gold-rgb:    255,215,0;     /* Gold als rgba */

  /* ── Gemeinsame Marken-Tokens · EINE Quelle für ALLE heldin.eu-Seiten ──
     Wird NACH den Inline-Styles jeder Seite geladen und überschreibt damit
     abweichende Inline-:root-Werte → einheitliche Farben/Abstände/Breite
     („aus einem Guss"). Das Light-Theme weiter unten dreht Flächen & Farben. */
  --midnight:    #0F0826;
  --deep-indigo: #1A0F3C;
  --deep:        #1A0F3C;       /* Alias, von CV-Seiten genutzt */
  --indigo:      #2D1B69;
  --lavender:    #EDE8F5;
  --gold:        #FFD700;
  --teal:        #7EC8C8;
  --crimson:     #B91E32;       /* einheitliches, kontraststarkes Crimson (WCAG-AA auch auf Hell) */
  --radius:      10px;
  --pad-x:       clamp(24px, 6vw, 80px);
  --pad-y:       clamp(56px, 8vw, 104px);
  --content-max: min(1500px, 94vw);
}

/* ── i18n: jeweils inaktive Sprache ausblenden ───────────────────────────────
   (Auch inline im <head> jeder Seite dupliziert → kein Doppeltext-Flash.) */
html[lang="de"] .i18n-en { display: none; }
html[lang="en"] .i18n-de { display: none; }

/* ════════════════════════════════════════════════════════════════════════════
   TOGGLE-UI (wird per heldin-ui.js automatisch in die Nav injiziert).
   Nutzt selbst nur Tokens/rgba-Tripel → funktioniert in beiden Themes.
   ════════════════════════════════════════════════════════════════════════════ */
.hui-group { display: inline-flex; align-items: center; gap: 10px; flex-shrink: 0; }

.hui-lang {
  display: inline-flex; align-items: stretch;
  border: .5px solid rgba(var(--text-rgb), .28);
  border-radius: 4px; overflow: hidden;
}
.hui-lang button {
  font-family: 'DM Mono', monospace; font-size: 10px; font-weight: 400;
  letter-spacing: .1em; text-transform: uppercase;
  background: transparent; color: rgba(var(--text-rgb), .62);
  border: 0; padding: 5px 9px; cursor: pointer; line-height: 1;
  transition: background .18s ease, color .18s ease;
}
.hui-lang button + button { border-left: .5px solid rgba(var(--text-rgb), .22); }
.hui-lang button:hover { color: rgba(var(--text-rgb), .92); }
.hui-lang button[aria-pressed="true"] { background: var(--teal); color: var(--midnight); }

.hui-theme {
  display: inline-flex; align-items: center; justify-content: center;
  width: 32px; height: 28px;
  background: transparent; color: rgba(var(--text-rgb), .72);
  border: .5px solid rgba(var(--text-rgb), .28); border-radius: 4px;
  cursor: pointer;
  transition: background .18s ease, color .18s ease, border-color .18s ease;
}
.hui-theme:hover { color: var(--teal); border-color: rgba(var(--teal-rgb), .6); }
.hui-theme svg { width: 15px; height: 15px; display: block; }
/* Nur das passende Icon zeigen: Dark → Sonne (Klick = hell), Light → Mond */
.hui-theme .i-moon { display: none; }
.hui-theme .i-sun  { display: block; }
html[data-theme="light"] .hui-theme .i-sun  { display: none; }
html[data-theme="light"] .hui-theme .i-moon { display: block; }

@media (max-width: 420px) {
  .hui-group { gap: 7px; }
  .hui-lang button { padding: 5px 7px; }
}

/* Schmale Screens: Marke + Umschalter + CTA + Hamburger würden die Nav-Bar
   überfüllen. Der Crimson-CTA ist im aufklappbaren Mobile-Menü enthalten →
   in der Top-Bar ausblenden, damit die Umschalter sauber Platz haben. */
@media (max-width: 600px) {
  nav .nav-cta { display: none; }
}

/* ════════════════════════════════════════════════════════════════════════════
   LIGHT-THEME
   ════════════════════════════════════════════════════════════════════════════ */
html[data-theme="light"] {
  /* (1) Marken-Tokens drehen — Flächen werden hell, Text wird dunkel.
         --midnight/--deep/--deep-indigo/--indigo decken alle Token-Namen ab,
         die in den verschiedenen Seiten für Flächen verwendet werden. */
  --midnight:    #EDE8F5;   /* Seiten-/Karten-Grund (Lavender, nie #fff) */
  --deep:        #E3DCF2;   /* CV nutzt --deep */
  --deep-indigo: #E3DCF2;   /* alternierende Sektionen / Karten in Dark-Design */
  --indigo:      #D6CEEC;   /* Tints/Texturen */
  --lavender:    #160C2E;   /* war heller Text → jetzt dunkle „Tinte" */
  --teal:        #1F6B6B;   /* dunkleres Teal für Kontrast auf Hell */
  --gold:        #8A6D00;   /* dunkleres Gold für Kontrast */
  --gold-dim:    #8A6D00;

  /* (2) RGB-Tripel drehen */
  --text-rgb:    22,12,46;       /* dunkler Text/Ränder */
  --surface-rgb: 237,232,245;    /* zuvor dunkle Overlays → hell */
  --indigo-rgb:  205,197,230;
  --teal-rgb:    31,107,107;
  --gold-rgb:    138,109,0;
}

/* Karten minimal vom Seitengrund abheben (sanftes Off-White) */
html[data-theme="light"] .card,
html[data-theme="light"] .news-card,
html[data-theme="light"] .research-tile { background: #FAF8FE; }

/* (Fixup A) Button-Text auf Crimson MUSS hell bleiben (Crimson bleibt dunkelrot). */
html[data-theme="light"] .btn-crimson,
html[data-theme="light"] .nav-cta { color: #EDE8F5; }

/* (Fixup B) S8 — die helle Sektion bleibt hell (kein Invertieren).
   Da --lavender/--midnight gedreht sind, hier die konkreten Werte zurücksetzen. */
html[data-theme="light"] .light-section { background: #E3DCF2; color: #160C2E; }
html[data-theme="light"] .light-section h2 { color: #160C2E; }
html[data-theme="light"] .light-section p  { color: rgba(15,8,38,.74); }
html[data-theme="light"] .light-section .overline { color: #5a4b8a; }

/* (Fixup C) Binär-Textur dezent halten (dunkles Indigo auf Hell wäre zu laut) */
html[data-theme="light"] .texture { color: #CFC7E6; opacity: .55; }

/* (Fixup D) Sanfter Schatten statt hartem Schwarz auf hellen „Papier"-Flächen */
html[data-theme="light"] .cv { box-shadow: 0 16px 48px rgba(45,27,105,.16), 0 4px 14px rgba(45,27,105,.10); }

/* ============================================================================
   Pitch-/Erklärvideo-Embed (sprachabhängiges <iframe>, 16:9, responsiv)
   Eingebunden auf der Startseite (Sektion „Das Projekt"). Single Source: die
   eigenständigen Dateien heldin_pitch_video_de.html / _en.html (?embed=1).
   ============================================================================ */
.pitch-embed { margin: 40px 0 0; }
.pitch-frame {
  position: relative; width: 100%; height: 0; padding-bottom: 56.25%;   /* robustes 16:9 (kein aspect-ratio nötig) */
  border-radius: 12px; overflow: hidden;
  border: 1px solid rgba(237,232,245,.14);
  background: #0F0826;                 /* Midnight, bis das iframe geladen ist */
  box-shadow: 0 24px 60px rgba(0,0,0,.35);
}
.pitch-frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; }
/* Direktlink unter dem Pitch-Video (öffnet die Vollversion in neuem Tab) */
.pitch-link {
  display: inline-block; margin-top: 6px;
  font-family: 'DM Mono', monospace; font-size: 12px; letter-spacing: .06em;
  text-transform: uppercase; color: var(--teal); text-decoration: none;
  border-bottom: 1px solid transparent; transition: border-color .15s ease;
}
.pitch-link:hover { border-bottom-color: currentColor; }
/* Deep-Link-Ziel #pitch: Offset, damit die fixe Nav die Sektion beim Anspringen nicht überdeckt */
#pitch { scroll-margin-top: 96px; }

/* ════════════════════════════════════════════════════════════════════════
   SITE-IDENTITÄT heldin.eu · Teal-Akzent
   Greift auf ALLEN heldin.eu-Seiten (geteiltes CSS): 3px-Akzentleiste oben
   an der Nav + leicht teal-getönter Nav-Hintergrund. Kippt mit dem Theme
   (Light: dunkleres Teal/helle Fläche über die Tokens). Wird nach den Inline-
   Styles geladen → gewinnt bei gleicher Spezifität.
   ════════════════════════════════════════════════════════════════════════ */
nav {
  border-top: 3px solid var(--teal);
  background: linear-gradient(0deg, rgba(var(--teal-rgb),0.06), rgba(var(--teal-rgb),0.06)), rgba(var(--surface-rgb),0.92);
}

/* ── Ökosystem-Leiste (heldin.io · heldin.eu · aquino.at) · aktuelle Site = Teal ── */
.eco-bar { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; max-width: var(--content-max, min(1500px, 94vw)); margin: 0 auto 18px; padding-bottom: 18px; border-bottom: 1px solid rgba(var(--text-rgb),0.08); }
.eco-kicker { font-family: 'DM Mono', monospace; font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(var(--text-rgb),0.4); }
.eco-links { display: flex; gap: 22px; flex-wrap: wrap; }
.eco-link { font-family: 'Montserrat', sans-serif; font-size: 13px; font-weight: 500; color: rgba(var(--text-rgb),0.6); display: inline-flex; align-items: baseline; gap: 7px; transition: color .15s; }
.eco-link:hover { color: rgba(var(--text-rgb),0.95); }
.eco-link .eco-role { font-family: 'DM Mono', monospace; font-size: 10px; letter-spacing: 0.04em; text-transform: uppercase; color: rgba(var(--text-rgb),0.38); }
.eco-link.is-current { color: var(--teal); }
.eco-link.is-current::before { content: "\25CF"; font-size: 9px; margin-right: 5px; line-height: 1; }
@media (max-width: 520px) { .eco-bar { flex-direction: column; align-items: flex-start; gap: 10px; } }

/* ════════════════════════════════════════════════════════════════════════
   WIRKUNGSTREPPE · gemeinsames Bauteil (index + impact)
   Durchgehende, aufsteigende Treppe (Stufe 1 unten → 7 oben), gefüllte
   Zahlen-Wasserzeichen, Farbzonen Grundlage/Output/Wirkung, klickbar über
   natives <details> (kein JS nötig). Theme-aware über die Tokens.
   ════════════════════════════════════════════════════════════════════════ */
.wtr { display: flex; flex-direction: column-reverse; gap: 0; margin-top: 36px; }
.wtr-row { margin-left: calc((var(--lvl, 1) - 1) * 26px); }
@media (max-width: 600px) { .wtr-row { margin-left: 0; } }
.wtr-step { list-style: none; cursor: pointer; display: flex; align-items: center; gap: 14px; background: var(--wtr-bg); border: 0.5px solid rgba(var(--text-rgb),0.12); border-left: 3px solid var(--wtr-st); border-radius: 8px; padding: 13px 16px; transition: background .15s; }
.wtr-step::-webkit-details-marker { display: none; }
.wtr-row[open] > .wtr-step, .wtr-step:hover { background: var(--wtr-bgh); }
.wtr-num { flex: 0 0 auto; width: 50px; text-align: center; font-family: 'Plus Jakarta Sans', sans-serif; font-weight: 800; font-size: 46px; line-height: 1; color: var(--wtr-st); opacity: 0.3; }
.wtr-ti { flex: 1; min-width: 0; font-family: 'Montserrat', sans-serif; font-size: 14.5px; font-weight: 400; color: rgba(var(--text-rgb),0.92); }
.wtr-kw { font-family: 'DM Mono', monospace; font-size: 10.5px; letter-spacing: 0.03em; color: var(--wtr-st); white-space: nowrap; }
@media (max-width: 640px) { .wtr-kw { display: none; } }
.wtr-chev { flex: 0 0 auto; color: rgba(var(--text-rgb),0.5); font-size: 12px; transition: transform .2s; }
.wtr-row[open] .wtr-chev { transform: rotate(90deg); }
.wtr-body { padding: 10px 18px 14px 66px; }
.wtr-body > p { font-size: 13px; line-height: 1.62; color: rgba(var(--text-rgb),0.74); margin: 0 0 10px; }
.wtr-body ul { list-style: none; margin: 0; padding: 0; }
.wtr-body li { position: relative; padding-left: 16px; font-size: 13px; line-height: 1.6; color: rgba(var(--text-rgb),0.74); margin-bottom: 8px; }
.wtr-body li::before { content: "\25B8"; position: absolute; left: 0; top: 1px; color: var(--wtr-st); font-size: 10px; }
.wtr-ann { font-family: 'DM Mono', monospace; font-size: 11px; line-height: 1.55; color: var(--gold); border-left: 2px solid rgba(var(--gold-rgb),0.5); padding-left: 11px; margin-top: 10px; }
.wtr-g-found   { --wtr-st: rgba(var(--text-rgb),0.7); --wtr-bg: rgba(var(--text-rgb),0.05); --wtr-bgh: rgba(var(--text-rgb),0.09); }
.wtr-g-output  { --wtr-st: var(--teal); --wtr-bg: rgba(var(--teal-rgb),0.08); --wtr-bgh: rgba(var(--teal-rgb),0.13); }
.wtr-g-wirkung { --wtr-st: var(--gold); --wtr-bg: rgba(var(--gold-rgb),0.08); --wtr-bgh: rgba(var(--gold-rgb),0.13); }
.wtr-legend { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 18px; }
.wtr-legend span { display: inline-flex; align-items: center; gap: 7px; font-family: 'DM Mono', monospace; font-size: 10px; letter-spacing: 0.04em; text-transform: uppercase; color: rgba(var(--text-rgb),0.55); }
.wtr-legend i { width: 9px; height: 9px; border-radius: 2px; display: inline-block; }
