/* ============================================================
   gd-content.css — EINZIGE Content-Farbquelle (Ee, MoAI/BB-Auftrag 260707)
   Abnahme (verifyReadability): NUR hsl(var(--t-*)), 0 Literalfarben, 0 !important.
   0 !important reicht, weil Content in .gd-doc gekapselt wird: copas
   !important-Regeln hängen an "main > p" / "> body > h" / ".wrap > p" und
   greifen NICHT auf .gd-doc h2 / .gd-doc .card. Tokens: gdti-tokens.css (7 Styles).
   ============================================================ */

/* Ee 260803-1440 (Jens-Auftrag): Breite grundsaetzlich +20% (920->1104px). Sitewide, gilt fuer JEDE .gd-doc-Seite. */
.gd-doc{ max-width:1104px; margin:0 auto; padding:0 18px 120px; color:var(--auto-ink,hsl(var(--t-foreground))); }

/* Ee 260731-1958: .gd-doc ist seit der Transparenz-Grundregel (s.u.) auf JEDEM Theme
   ohne eigene Kartenflaeche -- Text sitzt direkt auf dem rohen Seiten-HG (dunkles Hexagon
   bei default/holz/paris/tokyo/dawn). --t-foreground ist fuer HELLE Karten gedacht und macht
   Fliesstext/Ueberschriften dort fast unlesbar. Fix: --auto-ink (pro Theme echt gemessen). */
.gd-doc h1, .gd-doc h2, .gd-doc h3, .gd-doc h4{ color:var(--auto-ink,hsl(var(--t-foreground))); line-height:1.18; }
.gd-doc p, .gd-doc li{ color:var(--auto-ink,hsl(var(--t-foreground))); line-height:1.62; }
.gd-doc .kick{ color:var(--auto-ink,hsl(var(--t-muted-foreground))); opacity:.82; text-transform:uppercase; letter-spacing:.14em; font-size:.78rem; }
.gd-doc .lead{ color:var(--auto-ink,hsl(var(--t-foreground))); font-size:1.18rem; line-height:1.5; }
.gd-doc .sub{ color:var(--auto-ink,hsl(var(--t-muted-foreground))); opacity:.82; font-size:1rem; }
/* Ee 260803-1440 (Jens-Auftrag): Links grundsaetzlich fett, auf hell UND dunkel. */
.gd-doc a{ color:hsl(var(--t-accent)); font-weight:700; }

.gd-doc .card, .gd-doc .note, .gd-doc .box, .gd-doc .step, .gd-doc .panel{
  background:hsl(var(--t-card));
  color:hsl(var(--t-card-foreground));
  border:1px solid hsl(var(--t-border));
  border-radius:14px;
  padding:16px 18px;
}
.gd-doc .card h1, .gd-doc .card h2, .gd-doc .card h3, .gd-doc .card h4,
.gd-doc .card p, .gd-doc .card li, .gd-doc .card span,
.gd-doc .note h1, .gd-doc .note h2, .gd-doc .note h3, .gd-doc .note p, .gd-doc .note li,
.gd-doc .box p, .gd-doc .box li, .gd-doc .step p, .gd-doc .step li, .gd-doc .panel p, .gd-doc .panel li{
  color:hsl(var(--t-card-foreground));
}
.gd-doc .card .sub, .gd-doc .card small, .gd-doc .card .muted,
.gd-doc .note .sub, .gd-doc .note small,
.gd-doc .box .sub, .gd-doc .step .sub, .gd-doc .panel .sub{
  color:hsl(var(--t-muted-foreground));
}
.gd-doc .card a, .gd-doc .note a, .gd-doc .box a, .gd-doc .step a, .gd-doc .panel a{
  color:hsl(var(--t-accent));
}

.gd-doc table{ border-collapse:collapse; width:100%; }
.gd-doc th, .gd-doc td{
  color:hsl(var(--t-card-foreground));
  background:hsl(var(--t-card));
  border:1px solid hsl(var(--t-border));
  padding:8px 10px; text-align:left;
}
.gd-doc th{ color:hsl(var(--t-foreground)); background:hsl(var(--t-muted)); }
.gd-doc caption{ color:hsl(var(--t-muted-foreground)); padding:6px 0; }

.gd-doc input, .gd-doc textarea, .gd-doc select{
  color:hsl(var(--t-card-foreground));
  background:hsl(var(--t-card));
  border:1px solid hsl(var(--t-border));
  border-radius:8px; padding:8px 10px;
}
.gd-doc ::placeholder{ color:hsl(var(--t-muted-foreground)); }

/* ============================================================
   TRAGE-FLÄCHE (Scrim) — BB-Anweisung A (260709) + bewiesene Erweiterung (MoAI 260710):
   Bei JEDEM Style mit dunklem Vollflächen-Deko-HG (--gf-surface: holz/paris/dawn/tokyo
   + ki-3D-Himmel) liegt freistehender .gd-doc-Text sonst NACKT auf dem HG -> unlesbar.
   Loesung: .gd-doc bekommt eine halbtransparente Token-Trage-Flaeche + backdrop-blur.
   EINE Stelle, alle Seiten, alle dunklen Styles. Helle Styles (default/hawaii) brauchen
   das nicht (heller HG) und bleiben unberuehrt. 0 Literalfarben, 0 !important.
   ============================================================ */
html[data-theme="default"] .gd-doc,
html:not([data-theme]) .gd-doc,
html[data-theme="ki"] .gd-doc,
html[data-theme="paris"] .gd-doc,
html[data-theme="holz"] .gd-doc,
html[data-theme="dawn"] .gd-doc,
html[data-theme="tokyo"] .gd-doc{
  background:hsl(var(--t-background) / 0.86);
  -webkit-backdrop-filter:blur(3px);
  backdrop-filter:blur(3px);
  border-radius:16px;
  padding:22px 20px 120px;
}
html[data-theme="default"] .gd-doc .card, html[data-theme="default"] .gd-doc .note,
html[data-theme="default"] .gd-doc .box,  html[data-theme="default"] .gd-doc .panel,
html:not([data-theme]) .gd-doc .card,     html:not([data-theme]) .gd-doc .note,
html:not([data-theme]) .gd-doc .box,      html:not([data-theme]) .gd-doc .panel,
html[data-theme="ki"] .gd-doc .card,   html[data-theme="ki"] .gd-doc .note,
html[data-theme="ki"] .gd-doc .box,     html[data-theme="ki"] .gd-doc .panel,
html[data-theme="paris"] .gd-doc .card, html[data-theme="paris"] .gd-doc .note,
html[data-theme="paris"] .gd-doc .box,  html[data-theme="paris"] .gd-doc .panel,
html[data-theme="holz"] .gd-doc .card,  html[data-theme="holz"] .gd-doc .note,
html[data-theme="holz"] .gd-doc .box,   html[data-theme="holz"] .gd-doc .panel,
html[data-theme="dawn"] .gd-doc .card,  html[data-theme="dawn"] .gd-doc .note,
html[data-theme="dawn"] .gd-doc .box,   html[data-theme="dawn"] .gd-doc .panel,
html[data-theme="tokyo"] .gd-doc .card, html[data-theme="tokyo"] .gd-doc .note,
html[data-theme="tokyo"] .gd-doc .box,  html[data-theme="tokyo"] .gd-doc .panel{
  background:hsl(var(--t-card) / 0.72);
}

/* ============================================================
   MUTED-IN-CARD FIX (Ee, MoAI 260707): --t-muted-foreground ist bei holz/paris HELL
   (fuer dunklen Body-HG). In der HELLEN Card-Flaeche reisst es (CR 1.4/1.6).
   Loesung: Muted-Text INNERHALB Karten/Boxen nutzt card-foreground gedaempft (72% alpha)
   -> gedaempftes, aber lesbares Dunkel in ALLEN 7 Styles (holz 5.98, paris 6.15). 0 !important.
   ============================================================ */
.gd-doc .card .sub,  .gd-doc .card small,  .gd-doc .card .muted,  .gd-doc .card figcaption,
.gd-doc .note .sub,  .gd-doc .note small,  .gd-doc .note .muted,
.gd-doc .box .sub,   .gd-doc .box small,
.gd-doc .step .sub,  .gd-doc .panel .sub,
.gd-doc .ms-sect .kick, .gd-doc .ms-sect .sub, .gd-doc .ms-sect small,
.gd-doc .ms-sect figcaption, .gd-doc .ms-sect .ms-cap{
  color:hsl(var(--t-card-foreground) / 0.72);
}

/* ============================================================
   STYLE-GRUNDREGEL HELL/DUNKEL (Jens/MoAI 260713):
   Pauschale .gd-doc-Trageflaechen raus; nur KI-Himmel bekommt Glas-Scrim.
   Spezialflaechen bleiben semantisch, aber folgen den Style-Tokens.
   ============================================================ */
html[data-theme] .gd-doc,
html:not([data-theme]) .gd-doc{
  background:transparent;
}
html[data-theme=ki] .gd-doc{
  background:hsl(var(--t-background) / 0.72);
  -webkit-backdrop-filter:blur(4px);
  backdrop-filter:blur(4px);
  border-radius:16px;
  padding:22px 20px 120px;
}
html[data-theme] .gd-doc .card,
html[data-theme] .gd-doc .note,
html[data-theme] .gd-doc .box,
html[data-theme] .gd-doc .step,
html[data-theme] .gd-doc .panel{
  background:hsl(var(--t-card) / 0.68);
}
html[data-theme] .gd-doc figure,
html[data-theme] .gd-doc figcaption{
  background:transparent;
}
/* Ee 260803-1550 (Jens-Fund, sitewide Bug): --t-muted-foreground ist fuer HELLE Karten gedacht,
   machte JEDE Bildunterschrift auf JEDER .gd-doc-Seite grau-auf-dunkel kaum lesbar. Fix: auto-ink
   (gleiches Muster wie h1/h2/h3 oben), passt sich pro Theme automatisch an. */
html[data-theme] .gd-doc figcaption{
  color:var(--auto-ink,hsl(var(--t-foreground)));
}

/* ============================================================
   LEGACY-VAR-BRIDGE (Jens/MoAI 260713):
   Alte Seitennamen wie --cream/--ink/--orange werden bei Themes auf --t-* gefuehrt.
   Hohe Spezifitaet schlaegt lokale :root-Kopien ohne !important.
   ============================================================ */
html[data-theme][data-theme]{
  --cream:hsl(var(--t-background));
  --cream-deep:hsl(var(--t-card));
  --ink:hsl(var(--t-foreground));
  --ink-soft:hsl(var(--t-foreground) / 0.82);
  --ink-faint:hsl(var(--t-muted-foreground));
  --orange:hsl(var(--t-accent));
  --orange-deep:hsl(var(--t-accent));
  --orange-soft:hsl(var(--t-accent) / 0.12);
  --forest:hsl(var(--t-card));
  --terracotta:hsl(var(--t-accent));
  --border:hsl(var(--t-border) / 0.72);
  --border-soft:hsl(var(--t-border) / 0.38);
}

/* ============================================================
   RELATED-LESBARKEIT HARD OVERRIDE (Jens/MoAI 260713):
   Zusammenhang-Karten folgen strikt --t-*; verhindert weisse Karten mit heller Schrift.
   ============================================================ */
html[data-theme] body .gd-related,
html:not([data-theme]) body .gd-related{
  color:hsl(var(--t-foreground));
}
html[data-theme] body .gd-related h2,
html:not([data-theme]) body .gd-related h2{
  color:hsl(var(--t-foreground));
  background:transparent;
}

/* Ee 260731-1935: globale, EINZIGE Quelle fuer .gh/.gsub (cx-group Eyebrow-Label),
   ersetzt inkonsistente Pro-Seiten-Lokaldefinitionen (Ursache fuer unterschiedliche
   Farben auf standards.html vs baeren.html trotz identischem gd-related.js-Markup). */
html[data-theme] body .gd-related .cx-group .gh,
html[data-theme] body .gd-related .cx-group .gsub,
html:not([data-theme]) body .gd-related .cx-group .gh,
html:not([data-theme]) body .gd-related .cx-group .gsub{
  color:var(--auto-ink,hsl(var(--t-foreground))) !important;
  background:transparent !important;
}
.gd-related .cx-group .gsub{ opacity:.78; }

html[data-theme] body .gd-related .gd-rel-sub,
html:not([data-theme]) body .gd-related .gd-rel-sub{
  color:hsl(var(--t-muted-foreground));
}
html[data-theme] body .gd-related .gd-rel-cat > h3,
html:not([data-theme]) body .gd-related .gd-rel-cat > h3{
  color:hsl(var(--t-accent));
}
html[data-theme] body .gd-related a.gd-rel-card,
html:not([data-theme]) body .gd-related a.gd-rel-card{
  background:hsl(var(--t-card) / 0.64);
  border-color:hsl(var(--t-border) / 0.72);
  color:hsl(var(--t-card-foreground));
}
html[data-theme] body .gd-related .gd-rel-card .t,
html:not([data-theme]) body .gd-related .gd-rel-card .t{
  color:hsl(var(--t-card-foreground));
}
html[data-theme] body .gd-related .gd-rel-card .k,
html:not([data-theme]) body .gd-related .gd-rel-card .k,
html[data-theme] body .gd-related a.gd-rel-ext .t,
html:not([data-theme]) body .gd-related a.gd-rel-ext .t{
  color:hsl(var(--t-accent));
}
html[data-theme] body .gd-related a.gd-rel-ext .nn,
html:not([data-theme]) body .gd-related a.gd-rel-ext .nn,
html[data-theme] body .gd-related .gd-rel-empty,
html:not([data-theme]) body .gd-related .gd-rel-empty{
  color:hsl(var(--t-muted-foreground));
}

/* RELATED-LESBARKEIT SAFETY IMPORTANT (zentral, nicht Content): alte dynamische CSS-Versionen ueberstimmen */
html[data-theme] body .gd-related h2,
html:not([data-theme]) body .gd-related h2{
  color:hsl(var(--t-foreground)) !important;
  background:transparent !important;
}
html[data-theme] body .gd-related a.gd-rel-card,
html:not([data-theme]) body .gd-related a.gd-rel-card{
  background:hsl(var(--t-card) / 0.92) !important;
  border-color:hsl(var(--t-border) / 0.72) !important;
  color:hsl(var(--t-card-foreground)) !important;
}
html[data-theme] body .gd-related .gd-rel-card .t,
html:not([data-theme]) body .gd-related .gd-rel-card .t{
  color:hsl(var(--t-card-foreground)) !important;
}
html[data-theme] body .gd-related .gd-rel-card .k,
html:not([data-theme]) body .gd-related .gd-rel-card .k,
html[data-theme] body .gd-related a.gd-rel-ext .t,
html:not([data-theme]) body .gd-related a.gd-rel-ext .t{
  color:hsl(var(--t-accent)) !important;
}

/* RELATED-LESBARKEIT FINAL: Flaeche auf Seiten-Grund statt potenziell altem Card-Token
   MoAI 260713: auf Jens' Screenshot waren Related-Karten zu transparent;
   ca. 50% weniger Transparenz: Alpha 0.58 -> 0.86. */
html[data-theme] body .gd-related a.gd-rel-card,
html:not([data-theme]) body .gd-related a.gd-rel-card{
  background:hsl(var(--t-background) / 0.86) !important;
  background-color:hsl(var(--t-background) / 0.86) !important;
  background-image:none !important;
  border-color:hsl(var(--t-border) / 0.88) !important;
  color:hsl(var(--t-foreground)) !important;
}
html[data-theme] body .gd-related .gd-rel-card .t,
html:not([data-theme]) body .gd-related .gd-rel-card .t{
  color:hsl(var(--t-foreground)) !important;
}

/* Ee 260727-0420 (korrigiert 0432 -- --gdti-orange ist HEX, kein HSL-Tripel, hsl()-Wrap war ungueltig+verworfen):
   .gd-related-Karten hatten GAR KEINEN Hover/Focus-State -- GR-Pflicht ist ueberall oranger HG + weisser Text bei Hover/Focus-visible.
   Scoped NUR auf .gd-rel-card, keine globale Aenderung. */
html[data-theme] body .gd-related a.gd-rel-card.gd-rel-card.gd-rel-card:hover,
html:not([data-theme]) body .gd-related a.gd-rel-card.gd-rel-card.gd-rel-card:hover,
html[data-theme] body .gd-related a.gd-rel-card.gd-rel-card.gd-rel-card:focus-visible,
html:not([data-theme]) body .gd-related a.gd-rel-card.gd-rel-card.gd-rel-card:focus-visible{
  /* Ee 260727-0435: Klassen-Wiederholung noetig -- gdti-copa.css hat fuer [data-theme="default"]
     eine :not()-lastige Regel mit hoeherer Spezifitaet (0,5,1) als meine urspruengliche (0,4,3),
     die NUR bei default die Textfarbe zurueck auf orange kippte (Text=HG=unsichtbar). Fix erhoeht
     lokal NUR diese eine Regel, keine globale Aenderung. */
  background:var(--gdti-orange,#FF6A00) !important;
  background-color:var(--gdti-orange,#FF6A00) !important;
  border-color:var(--gdti-orange,#FF6A00) !important;
  color:#fff !important;
  outline:none;
}
html[data-theme] body .gd-related a.gd-rel-card:hover .t,
html:not([data-theme]) body .gd-related a.gd-rel-card:hover .t,
html[data-theme] body .gd-related a.gd-rel-card:focus-visible .t,
html:not([data-theme]) body .gd-related a.gd-rel-card:focus-visible .t,
html[data-theme] body .gd-related a.gd-rel-card:hover .k,
html:not([data-theme]) body .gd-related a.gd-rel-card:hover .k,
html[data-theme] body .gd-related a.gd-rel-card:focus-visible .k,
html:not([data-theme]) body .gd-related a.gd-rel-card:focus-visible .k{
  color:#fff !important;
}

/* === Ra 260731: related-headfix ERSETZT (Jens-Befund: card-foreground+shadow ist KEIN
   Kontrast-Ersatz, war dunkler Text auf dunklem Hintergrund in default/holz/paris/tokyo/dawn).
   Einziger Mechanismus: --auto-ink (gd-ink-mode.css, pro Theme am ECHTEN Backdrop gemessen).
   KEIN text-shadow mehr -- Schatten ersetzt keinen Kontrast (GR-Regel). === */
html[data-theme] body .gd-related h2,
html:not([data-theme]) body .gd-related h2{
  color:var(--auto-ink) !important;
  text-shadow:none !important;
}
html[data-theme] body .gd-related .gd-rel-sub,
html:not([data-theme]) body .gd-related .gd-rel-sub{
  color:var(--auto-ink) !important;
  opacity:.82;
  text-shadow:none !important;
}

/* MoAI 260713 voice test: dark voice cards need explicit light text in default theme */
.tts-test-page .gd-doc .voice-card,
.tts-test-page .gd-doc .voice-card h2,
.tts-test-page .gd-doc .voice-card p,
.tts-test-page .gd-doc .voice-card small,
.tts-test-page .gd-doc .voice-card strong,
.tts-test-page .gd-doc .voice-card code{ color:hsl(var(--t-foreground)) !important; }
.tts-test-page .gd-doc .voice-card{ background:hsl(var(--t-card) / .88) !important; border-color:hsl(var(--t-foreground) / .24) !important; }
.tts-test-page .gd-doc .voice-status{ color:hsl(var(--t-card-foreground)) !important; }
html:not([data-theme="paris"]):not([data-theme="dawn"]):not([data-theme="tokyo"]):not([data-theme="ki"]) body.tts-test-page[class] .gd-doc [class*="voice-card"] :is(h1,h2,h3,h4,p,li,small,strong,span,code){ color:hsl(var(--t-foreground)) !important; }


/* MoAI 260717 readable standard classes — use on every new page/story */
.gd-readable{color:hsl(var(--t-foreground));}
.gd-readable-title,.gd-display-title,.gd-page-title{font-family:'Fraunces',serif;font-weight:800;line-height:.96;letter-spacing:-.025em;color:hsl(var(--t-foreground));}
/* Ee 260731-2220, Jens-Vorgabe woertlich: Head/Sub/ZUEen in default IMMER serifenlos, keine
   Ausnahme. .gd-readable-title & Co. hatten 'Fraunces' hart eincodiert (kein Token, griff
   in JEDEM Theme) -- fuer default jetzt explizit auf die Sans-Stack zurueckgezwungen. */
html[data-theme="default"] .gd-readable-title,
html[data-theme="default"] .gd-display-title,
html[data-theme="default"] .gd-page-title{
  font-family:var(--gdti-font)!important;
}
.gd-readable-kicker,.gd-readable-meta,.gd-readable-sub{font-family:'Oswald',sans-serif;letter-spacing:.08em;color:hsl(var(--t-muted-foreground));}
.gd-readable-section,.gd-section-title{font-family:'Oswald',sans-serif;letter-spacing:.16em;text-transform:uppercase;color:hsl(var(--t-foreground));border-bottom:2px solid hsl(var(--t-border));}
html[data-theme="holz"] .gd-readable-title,html[data-theme="holz"] .gd-display-title,html[data-theme="holz"] .gd-page-title,html[data-theme="holz"] .gd-section-title,
html[data-theme="paris"] .gd-readable-title,html[data-theme="paris"] .gd-display-title,html[data-theme="paris"] .gd-page-title,html[data-theme="paris"] .gd-section-title,
html[data-theme="tokyo"] .gd-readable-title,html[data-theme="tokyo"] .gd-display-title,html[data-theme="tokyo"] .gd-page-title,html[data-theme="tokyo"] .gd-section-title{color:hsl(var(--t-foreground));}

/* MoAI 260718 — trea/vibe final cascade contrast repair
   Loaded after gd-readfix; keeps world landing pages readable under global theme switches. */
body[data-warp-label="trea"],
body[data-warp-label="vibe"]{
  --cream:var(--gf-bg, hsl(var(--t-background)));
  --cream-deep:var(--gf-bg-deep, hsl(var(--t-muted)));
  --ink:var(--gf-ink, hsl(var(--t-foreground)));
  --ink-soft:var(--gf-ink, hsl(var(--t-foreground)));
  --ink-faint:var(--gf-ink-soft, hsl(var(--t-muted-foreground)));
  --orange:var(--gf-accent, hsl(var(--t-accent)));
  --orange-deep:var(--gf-accent, hsl(var(--t-accent)));
  --border:var(--gf-rule, hsl(var(--t-border)));
  --card:var(--gf-panel, hsl(var(--t-card)));
  background-color:var(--cream);
  background-image:none;
  color:var(--ink);
}
body[data-warp-label="trea"] .wrap,
body[data-warp-label="vibe"] .wrap{color:var(--ink);}
body[data-warp-label="trea"] header.trea-head,
body[data-warp-label="vibe"] header.v-head,
body[data-warp-label="trea"] footer.trea-foot,
body[data-warp-label="vibe"] footer.v-foot{border-color:var(--border);color:var(--ink-faint);}
body[data-warp-label="trea"] .trea-title,
body[data-warp-label="vibe"] .v-title,
body[data-warp-label="trea"] .coll h2,
body[data-warp-label="vibe"] .sect h2,
body[data-warp-label="trea"] .card h3,
body[data-warp-label="vibe"] .world .wn,
body[data-warp-label="vibe"] .tile .num{color:var(--ink);}
body[data-warp-label="trea"] .trea-sub,
body[data-warp-label="vibe"] .v-meta,
body[data-warp-label="vibe"] .sect .lead,
body[data-warp-label="trea"] .card p,
body[data-warp-label="vibe"] .world .wd,
body[data-warp-label="vibe"] .tile .lbl,
body[data-warp-label="vibe"] .bar-row .val,
body[data-warp-label="trea"] .empty{color:var(--ink-faint);}
body[data-warp-label="trea"] .card,
body[data-warp-label="trea"] .chip,
body[data-warp-label="vibe"] .tile,
body[data-warp-label="vibe"] .world,
body[data-warp-label="trea"] .lang-toggle button,
body[data-warp-label="vibe"] .lang-toggle button{background:var(--card);color:var(--ink);border:2px solid var(--border);}
body[data-warp-label="trea"] .chip.active,
body[data-warp-label="trea"] .chip:hover,
body[data-warp-label="trea"] .lang-toggle button.on,
body[data-warp-label="vibe"] .lang-toggle button.on,
body[data-warp-label="trea"] .card:hover,
body[data-warp-label="vibe"] .world:hover{border-color:var(--orange);}
body[data-warp-label="trea"] .chip.active,
body[data-warp-label="trea"] .lang-toggle button.on,
body[data-warp-label="vibe"] .lang-toggle button.on{background:var(--orange);color:var(--gf-panel);}
body[data-warp-label="trea"] .eyebrow,
body[data-warp-label="trea"] .card .kind,
body[data-warp-label="trea"] .card .go,
body[data-warp-label="trea"] footer.trea-foot a,
body[data-warp-label="vibe"] .eyebrow,
body[data-warp-label="vibe"] .v-role,
body[data-warp-label="vibe"] .world .go,
body[data-warp-label="vibe"] footer.v-foot a{color:var(--orange);}
body[data-warp-label="vibe"] .bar-track{background:var(--cream-deep);border:2px solid var(--border);}
body[data-warp-label="vibe"] .v-av{color:var(--gf-panel);}

/* MoAI 260719: standard article support for FTS-style research pages */
body:has(.fts-content){font-family:var(--t-font-sans,'Inter Tight',system-ui,sans-serif);color:hsl(var(--t-card-foreground));}
.fts-content{max-width:78ch;margin:0 auto;padding:calc(var(--gf-overnav-h,64px) + 18px) 20px calc(var(--gf-copa-h,90px) + 44px);color:hsl(var(--t-card-foreground));}
.fts-content *{box-sizing:border-box;}
.fts-content .kicker,.fts-meta{font-size:.86rem;line-height:1.42;color:hsl(var(--t-card-foreground) / .86);margin:0 0 .9rem;}
.fts-title{font-family:var(--t-font-serif,'Fraunces',Georgia,serif);font-size:clamp(2.15rem,5.4vw,4rem);line-height:.98;letter-spacing:-.04em;margin:0 0 .78rem;color:hsl(var(--t-card-foreground));font-weight:820;max-width:12ch;}
.fts-lead{font-size:clamp(1.05rem,1.6vw,1.23rem);line-height:1.46;color:hsl(var(--t-card-foreground) / .96);margin:0 0 .78rem;font-weight:430;max-width:68ch;}
.fts-heading{color:hsl(var(--t-card-foreground));font-weight:770;scroll-margin-top:calc(var(--gf-overnav-h,64px) + 18px);}
.fts-heading--h2{font-family:var(--t-font-serif,'Fraunces',Georgia,serif);font-size:clamp(1.55rem,3.1vw,2.25rem);line-height:1.12;margin:2.15rem 0 .65rem;letter-spacing:-.022em;}
.fts-heading--h3{font-size:1.08rem;line-height:1.22;margin:1.35rem 0 .38rem;}
.fts-heading--h4{font-size:1rem;line-height:1.25;margin:1rem 0 .3rem;}
.fts-p,.fts-li{font-size:1rem;line-height:1.56;color:hsl(var(--t-card-foreground));margin:.45rem 0;}
.fts-list{padding-left:1.16rem;margin:.65rem 0 1rem;}
.fts-list--ordered{padding-left:1.25rem;}
.fts-strong{color:hsl(var(--t-card-foreground));font-weight:780;}
.fts-link{color:var(--gdti-orange,var(--ci-orange));text-decoration:underline;text-decoration-thickness:1.2px;text-underline-offset:.19em;cursor:pointer;}
.fts-link:focus-visible{color:hsl(var(--t-card-foreground));outline:2px solid var(--gdti-orange,var(--ci-orange));outline-offset:2px;border-radius:.18rem;}
.fts-rule{border:0;border-top:1px solid hsl(var(--t-card) / .24);margin:1.6rem 0;}
.fts-code{font-family:var(--t-font-mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace);font-size:.9em;padding:.07rem .24rem;border-radius:.25rem;background:hsl(var(--t-card) / .13);color:hsl(var(--t-card-foreground));white-space:normal;}
.fts-toc,.fts-box,.fts-sources,body:has(.fts-content) .gd-related{margin:1rem 0 1.15rem;padding:.82rem .95rem;border-left:4px solid var(--gdti-orange,var(--ci-orange));border-radius:12px;background:hsl(var(--t-card) / .86);color:hsl(var(--t-card-foreground));box-shadow:0 10px 30px hsl(var(--t-foreground) / .16);text-shadow:none;}
.fts-toc__title,.fts-box > .fts-strong:first-child{display:block;font-size:1.08rem;line-height:1.2;margin:0 0 .34rem;color:hsl(var(--t-card-foreground));font-weight:900;letter-spacing:.005em;}
.fts-toc__list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:.18rem .75rem;}
.fts-toc .fts-li{margin:0;line-height:1.28;font-size:.9rem;}
.fts-toc .fts-link,.fts-box .fts-link,.fts-sources .fts-link{color:var(--gdti-orange,var(--ci-orange));}
.fts-box .fts-strong,.fts-box .fts-p,.fts-box .fts-li,.fts-sources .fts-heading,.fts-sources .fts-p,.fts-sources .fts-li,.fts-sources .fts-strong{color:hsl(var(--t-card-foreground));}
.fts-box--legend{font-size:.94rem;line-height:1.45;}
.fts-sources .fts-heading--h2{font-family:var(--t-font-sans,'Inter Tight',system-ui,sans-serif);font-size:1.05rem;margin:0 0 .45rem;letter-spacing:0;}
body:has(.fts-content) .gd-related{max-width:78ch;margin:1.8rem auto calc(var(--gf-copa-h,90px) + 34px);}
body:has(.fts-content) .gd-related,body:has(.fts-content) .gd-related *{color:hsl(var(--t-card-foreground));opacity:1;text-shadow:none;}
body:has(.fts-content) .gd-related a{background:hsl(var(--t-card) / .70);color:hsl(var(--t-card-foreground));border:1px solid hsl(var(--t-card-foreground) / .18);}
body:has(.fts-content) .page-ai-head{position:relative;min-height:18px;margin:.15rem 0 .45rem;padding:0;overflow:visible;}



/* ============================================================
   STANDARD-KLASSEN-FIX (Ee 260724, Jens-Direktive):
   (1) Font: freistehender .gd-doc-Text bekam KEINEN font-family
       -> Browser-Fallback Times New Roman in ALLEN Styles.
       Jetzt der per-Style g--d-Font-Stack via --gdti-font.
   (2) holz: freistehender Head/Text war dunkel-auf-dunkel (unsichtbar).
       Jens seit Monaten: "holz IMMER helle Head". holz freistehend -> hell.
       Karten (eigener heller HG) bleiben via hoeherer Spezifitaet dunkel.
   Additiv am Dateiende -> gewinnt bei gleicher Spezifitaet, verliert aber
   gegen die spezifischeren .gd-doc .card-Regeln (Karten unberuehrt).
   ============================================================ */
.gd-doc,
.gd-doc :is(h1,h2,h3,h4,h5,p,li,blockquote,figcaption,th,td,.lead,.sub,.kick){
  font-family: var(--gdti-font, 'Inter Tight','Inter',system-ui,-apple-system,sans-serif);
}
/* holz freistehend hell (nicht in Karten/Boxen) */
html[data-theme="holz"] .gd-doc :is(h1,h2,h3,h4,p,li,blockquote,.lead,.sub){
  color: hsl(38 46% 92%);
}
html[data-theme="holz"] .gd-doc :is(.kick,.sub){
  color: hsl(38 30% 80%);
}


/* ============================================================
   STANDARD-KLASSEN-FIX v2 FINAL (Ee 260724): durchsetzungsstark.
   Grund: (a) --gdti-font haengt an body.gdti-tokens, greift bei
   body.gf-has-frame nicht -> Times. (b) holz-Head-Regel in copa nur
   fuer > body > h1 (direkte Kinder), meine .gd-doc-Head verlor gegen
   readfix-!important. Loesung: auf DIREKTE .gd-doc-Kinder beschraenkt
   (Karten via > ausgeschlossen) + !important. Font mit konkretem Stack.
   ============================================================ */
.gd-doc,
.gd-doc > :is(h1,h2,h3,h4,h5,p,ul,ol,blockquote,table,figure,dl),
.gd-doc > ul > li, .gd-doc > ol > li,
.gd-doc :is(th,td,figcaption,.lead,.sub,.kick){
  font-family: var(--gdti-font, 'Inter Tight','Inter',system-ui,-apple-system,'Segoe UI',sans-serif) !important;
}
/* holz freistehend (direkte .gd-doc-Kinder) IMMER hell — Karten unberuehrt */
html[data-theme="holz"] .gd-doc > :is(h1,h2,h3,h4,p,blockquote),
html[data-theme="holz"] .gd-doc > ul > li,
html[data-theme="holz"] .gd-doc > ol > li,
html[data-theme="holz"] .gd-doc > :is(h1,h2,h3,h4) *{
  color: hsl(38 48% 93%) !important;
}
html[data-theme="holz"] .gd-doc > :is(.kick,.sub){
  color: hsl(38 30% 82%) !important;
}
