/* ==========================================================================
   consent-manager.css — CD-B6 (17.09.2026)
   Entminifiziert (49 Regeln / 135 Deklarationen; whitespace-normalisiert
   byte-identisch zum Minified-Originale bewiesen) und in @layer overrides
   konsolidiert — dieselbe Ebene wie mobile.css, gegen dessen body-Padding-
   !important der F4-Push-Down antreten muss (css-cascade-5: gleiche Layer
   entscheiden per Ladeordnung, und dieses Sheet wird via JS-<link> NACH allen
   Site-Sheets geladen — die Wirksamkeitsreihenfolge bleibt erhalten).
   Die R6-Token-Teile am Dateiende bleiben bewusst UNLAYERED: unlayered
   Autoren-CSS gewinnt gegen jeden Layer; eine Verschiebung in overrides
   wäre eine Schwächung ohne Not.
   M27 (30.09.2026): NUR noch die beiden !important-Vertraege (Dock-Verdraengung,
   F4-Push-Down) liegen in @layer overrides — alles Visuelle wurde unlayered,
   weil der unlayered S11-Reset (`*{padding:0;margin:0}` in default.css) jede
   layered Regel kassierte: gerechnete Banner-Padding war 0px, Text und
   Buttons klebten am Displayrand (Live-Messung 30.09., 390px, Touch-Emulation).
   R6/R9c hatten dasselbe Muster schon zweimal als Einzelfall gefixt; jetzt
   bleibt nur der Vertraege-Teil gelayert, alles Visuelle gewinnt per
   Klassen-/ID-Spezifitaet gegen den Universum-Reset.
   ========================================================================== */
@layer overrides {
body.ts-consent-banner-active #mobileBottomDock{transform:translateY(100%)!important;
  pointer-events:none!important}
/* CCC (21.09.): Der Artikel-Aktionsstreifen sitzt ueber dem Dock und muss
   mit ihm verschwinden, solange der Consent-Banner die Bottom-Zone belegt
   (translate deckt den Artikelseiten-Streifen ab, opacity den Legacy-Rest). */
body.ts-consent-banner-active #mobile-thumb-dock{transform:translate(-50%,calc(100% + 24px))!important;
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important}
}
/* M27 (30.09.2026): Layer hier geschlossen — alles Folgende ist unlayered
   (Begruendung siehe Dateikopf). */
/* WAR-ROOM 2.1 (28.09.): Das Lagebild-Dock (#socWarRoomDock, z 1040) teilte
   die Ebene mit dem Consent-Banner — dieser wird per body.appendChild NACH
   dem Footer-Dock eingehängt und gewinnt bei gleichem z-index. Sein Header
   (Minimieren/Ausklappen) war dadurch in der Bottom-Zone klicktot, im
   minimierten Zustand erst recht (ganze Karte hinter dem Banner). Gleicher
   Ausweich-Vertrag wie #mobileBottomDock/#mobile-thumb-dock: das Dock weicht,
   solange der Banner die Bottom-Zone belegt. */
body.ts-consent-banner-active #socWarRoomDock{transform:translateY(calc(100% + 24px))!important;
  visibility:hidden!important;
  pointer-events:none!important}
#ts-consent-badge,#ts-consent-banner,#ts-consent-modal-backdrop,#ts-consent-modal{position:fixed}
#ts-consent-banner,#ts-consent-modal{background:var(--theme-surface);
  color:var(--theme-text);
  font-family:inherit}
#ts-consent-badge,.ts-consent-cat-card,.ts-consent-gate{background:var(--theme-surface-card)}
#ts-consent-badge,#ts-consent-banner,#ts-consent-modal,#ts-consent-gate,.ts-consent-btn-secondary{border:1px solid var(--theme-border)}
#ts-consent-badge{bottom:20px;
  left:20px;
  z-index:1040;
  width:44px;
  height:44px;
  border-radius:50%;
  color:var(--theme-accent);
  cursor:pointer;
  padding:0;
  outline:none;
  box-shadow:0 4px 12px #0005}
#ts-consent-badge:hover,.ts-consent-btn-secondary:hover,.ts-consent-btn-load-once:hover{border-color:var(--theme-accent)}
#ts-consent-badge:focus-visible,#ts-consent-modal-close:focus-visible,.ts-consent-btn:focus-visible,.ts-consent-switch input:focus-visible+.ts-consent-slider{outline:3px solid var(--theme-accent);
  outline-offset:2px}
#ts-consent-badge svg{width:22px;
  fill:currentColor}
@media(max-width:991.98px){#ts-consent-badge{bottom:calc(76px + env(safe-area-inset-bottom,0));
  left:16px;
  width:48px;
  height:48px}
  /* CCC-4 (21.09.): Auf Artikelseiten sitzt der Artikel-Aktionsstreifen
     (#mobile-thumb-dock) in derselben Zone — auf 360px-Screens überlappte
     der Badge den Streifen real (E2E: overlap=true) und blockierte damit den
     DSGVO-Zugang (Art. 7 Abs. 3) hinter dem Streifen. Gleicher Lift wie die
     Toast-Familien (mobile.css): Dock + 8px + Safe-Area + 58px. */
  body.ts-article-page #ts-consent-badge{bottom:calc(var(--ts-dock-height, 64px) + 8px
    + var(--ts-dock-safe, env(safe-area-inset-bottom, 0px)) + 58px)}}
#ts-consent-banner{bottom:0;
  left:0;
  right:0;
  z-index:1040;
  padding:1rem 1.5rem calc(1rem + env(safe-area-inset-bottom,0));
  box-shadow:0 -4px 20px #0006}
.ts-consent-banner-inner{max-width:1200px;
  margin:0 auto;
  display:flex;
  flex-direction:column;
  gap:1rem}
@media(min-width:992px){.ts-consent-banner-inner{flex-direction:row;
  align-items:center;
  justify-content:space-between}}
.ts-consent-banner-title,#ts-consent-modal-title,.ts-consent-cat-title,.ts-consent-fallback-title{font-weight:700;
  color:var(--theme-text-heading);
  margin:0 0 .25rem}
.ts-consent-banner-title{font-size:1.125rem}
.ts-consent-banner-text,.ts-consent-modal-desc,.ts-consent-cat-desc,.ts-consent-fallback-text{color:var(--theme-text-muted);
  font-size:.875rem;
  line-height:1.45;
  margin:0}
.ts-consent-banner-text a{color:var(--theme-accent)}
/* LH1-W2 (A10, color-contrast): Light-Theme-Akzent #0284c7 lag mit ~4,3:1
   unter AA (Link-Text 4,5 / Button 4,5). Sky-800/sky-700 mit Weißtext
   bestehen auf der hellen Bannerfläche; Dark-Theme (Cyan) bleibt unverändert. */
[data-bs-theme="light"] .ts-consent-banner-text a, body.light .ts-consent-banner-text a{color:#075985}
[data-bs-theme="light"] .ts-consent-btn-primary, body.light .ts-consent-btn-primary{background:#0369a1;border-color:#0369a1;color:#fff}
[data-bs-theme="light"] .ts-consent-btn-allow-always, body.light .ts-consent-btn-allow-always{background:#0369a1;border-color:#0369a1;color:#fff}
.ts-consent-banner-actions,.ts-consent-modal-footer,.ts-consent-fallback-actions{display:flex;
  flex-wrap:wrap;
  gap:.5rem;
  align-items:center}
.ts-consent-btn,#ts-consent-badge,.ts-consent-modal-header,.ts-consent-cat-card,.ts-consent-gate{display:flex}
.ts-consent-btn{align-items:center;
  justify-content:center;
  min-height:44px;
  min-width:44px;
  padding:.5rem 1rem;
  border-radius:6px;
  font:600 .875rem inherit;
  cursor:pointer;
  text-decoration:none;
  box-sizing:border-box}
.ts-consent-btn-primary,.ts-consent-btn-allow-always{background:var(--theme-accent);
  color:#090d16;
  border:1px solid var(--theme-accent)}
.ts-consent-btn-secondary{background:transparent;
  color:var(--theme-text)}
.ts-consent-btn-link{background:transparent;
  color:var(--theme-text-muted);
  border:none;
  text-decoration:underline;
  padding:.5rem}
#ts-consent-modal-backdrop{inset:0;
  z-index:1050;
  background:#000b;
  backdrop-filter:blur(4px)}
#ts-consent-modal{top:50%;
  left:50%;
  transform:translate(-50%,-50%);
  z-index:1060;
  width:min(600px,94vw);
  max-height:90vh;
  border-radius:10px;
  box-shadow:0 12px 36px #0008;
  flex-direction:column}
.ts-consent-modal-header{align-items:center;
  justify-content:space-between;
  padding:1rem;
  border-bottom:1px solid var(--theme-border-subtle,#fff1)}
.ts-consent-modal-title{font-size:1.15rem}
.ts-consent-modal-close{background:transparent;
  border:none;
  color:var(--theme-text-muted);
  font-size:1.5rem;
  width:44px;
  height:44px;
  display:flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  border-radius:6px}
.ts-consent-modal-body{padding:1rem;
  overflow-y:auto;
  flex:1;
  display:flex;
  flex-direction:column;
  gap:.75rem}
.ts-consent-cat-card{border-radius:8px;
  padding:.75rem 1rem;
  align-items:flex-start;
  justify-content:space-between;
  gap:1rem}
.ts-consent-cat-title{font-size:.92rem;
  display:flex;
  align-items:center;
  gap:.4rem}
.ts-consent-cat-badge{font-size:.68rem;
  padding:.1rem .35rem;
  border-radius:4px;
  background:var(--theme-surface-elevated);
  color:var(--theme-text-muted)}
.ts-consent-switch{position:relative;
  display:inline-block;
  width:48px;
  height:26px;
  flex-shrink:0}
.ts-consent-switch input{opacity:0;
  width:0;
  height:0;
  position:absolute}
.ts-consent-slider{position:absolute;
  cursor:pointer;
  inset:0;
  background:var(--theme-surface-elevated);
  border:1px solid var(--theme-border);
  border-radius:26px;
  transition:.2s}
.ts-consent-slider::before{position:absolute;
  content:"";
  height:18px;
  width:18px;
  left:3px;
  bottom:3px;
  background:#fff;
  border-radius:50%;
  transition:.2s}
.ts-consent-switch input:checked+.ts-consent-slider{background:var(--theme-accent);
  border-color:var(--theme-accent)}
.ts-consent-switch input:checked+.ts-consent-slider::before{transform:translateX(22px);
  background:#090d16}
.ts-consent-switch input:disabled+.ts-consent-slider{opacity:.6;
  cursor:not-allowed}
.ts-consent-modal-footer{padding:1rem;
  border-top:1px solid var(--theme-border-subtle,#fff1);
  justify-content:flex-end}
.ts-consent-gate{position:relative;
  width:100%;
  min-height:200px;
  border-radius:8px;
  overflow:hidden;
  align-items:center;
  justify-content:center}
.ts-consent-fallback-card{padding:1.5rem 1rem;
  text-align:center;
  max-width:440px;
  margin:0 auto}
.ts-consent-fallback-icon{font-size:2rem;
  color:var(--theme-accent);
  margin-bottom:.5rem}
.ts-consent-fallback-title{font-size:1.05rem}
.ts-consent-btn-load-once{background:transparent;
  color:var(--theme-accent);
  border:1px solid var(--theme-accent)}
.ts-consent-gate iframe{width:100%;
  aspect-ratio:16/9;
  border:none;
  display:block}
.ts-consent-hidden{display:none!important}

/* F4 (15.09.): Push-Down statt Verdeckung — Body-Padding in exakter Bannerhoehe
   (JS setzt --ts-consent-banner-h; Fallback 160px). Muss im @layer overrides
   bleiben: mobile.css setzt body{padding-bottom:…!important} im selben Layer,
   layered !important schlaegt unlayered (css-cascade-5-Inversion). */
@layer overrides {
body.ts-consent-banner-active{padding-bottom:var(--ts-consent-banner-h,160px)!important}
}
/* R6 (15.09.): Token-Nachweisanzeige (Art.-7-Nachweis, arch §3.4.1) + Footer:
   Speichern links, Ablehnen/Akzeptieren in gleicher Prominenz (EDPB-Paritaet).
   Bewusst unlayered (siehe Dateikopf). */
.ts-consent-token{margin-top:.25rem;padding-top:.6rem;border-top:1px dashed var(--theme-border-subtle,#fff1);font-size:.78rem}
.ts-consent-token summary{cursor:pointer;color:var(--theme-text-muted)}
.ts-consent-token code{display:block;word-break:break-all;margin:.35rem 0;font-size:.72rem;color:var(--theme-text)}
.ts-consent-modal-footer #ts-m-save{margin-right:auto}
/* R9c (19.09.): Akzent-Button-Ink gegen die Layer-Inversion — das generische
   UNLAYERED `input,button,textarea,select{color:inherit}` kassierte die
   @layer-overrides-Regel color:#090d16 (css-cascade-5: unlayered schlägt
   layered unabhaengig von Spezifitaet); der Button erbte slate-50 vom
   ID-Regel-Banner (#ts-consent-banner{color:var(--theme-text)}) → 2.3:1 auf
   cyan-500 (Walk v5, dark /de/4/). Bewusst UNLAYERED wie der R6-Teil:
   Klassen-Spezifitaet (0,1,0) > Element-Selektor (0,0,1) auf derselben
   Ebene; --theme-accent-ink hält beide Schemas AA (dark cyan-950 auf
   cyan-500 6.3:1, light weiss auf #0284c7 4.6:1). */
.ts-consent-btn-primary,.ts-consent-btn-allow-always{color:var(--theme-accent-ink,#083344)}

/* ==========================================================================
   CX (30.09.2026): Floating-Badge (#ts-consent-badge) dauerhaft ausgeblendet —
   Nutzerwunsch „Consent-Symbol soll nicht immer sichtbar sein". Der
   DSGVO-Zugang (Art. 7 Abs. 3: Widerruf so einfach wie die Erteilung) bleibt
   voll erhalten, nur nicht mehr schwebend über dem Inhalt:
     - Mobil: Offcanvas-Menü → „Cookie-Einstellungen" (#open_preferences_center)
     - Desktop (≥992px): Navbar-Icon (.ts-open-preferences, utilities.tpl)
     - Alle Flächen: Footer-Links „Cookie-Einstellungen" + Alt+O (shortcuts.js)
   Das DOM-Element bleibt bewusst existent (renderBadge()/Zustands-Maschine
   unangetastet, ConsentWidgetAssetTest-Vertrag), nur die Sichtbarkeit entfällt.
   Bewusst UNLAYERED und am DATEIENDE: muss gegen die display:flex-Gruppe
   weiter oben (identische ID-Spezifität) per Ladeordnung gewinnen.
   ========================================================================== */
#ts-consent-badge{display:none}
