@import url("fonts/fonts.css");

/* ==========================================================================
   POLITIKPULS — Design-System
   Leitidee: Die Karte ist ein Stimmzettel (kuehles Papier, privat).
   Nach der Stimmabgabe wechselt das Licht: sie wird zur Sendegrafik
   (tiefes Nachtblau, Balken wachsen aus der Grundlinie).
   Ein grosser Move — alles andere bleibt diszipliniert ruhig.
   ========================================================================== */

:root{
  /* --- Schale: kuehles Wahlzettel-Papier, bewusst kein Cream --- */
  --paper:      #E9EBEF;
  --paper-2:    #DFE3EA;
  --card:       #FBFBFC;
  --card-edge:  #DBDFE8;
  --ink:        #12151E;
  /* Beide Grautoene sind auf --paper gegen 4.5:1 geprueft (WCAG AA),
     denn saemtliche Nebentexte stehen in Groessen unter 18,66px. */
  --ink-2:      #454C5E;
  --ink-3:      #5C6376;
  --rule:       #D3D8E1;

  /* --- Sende-Zustand --- */
  --studio:      #0E1524;
  --studio-2:    #182134;
  --studio-ink:  #EDF0F6;
  --studio-ink-2:#94A0B8;
  --studio-rule: #27314A;

  /* --- Bundesfarben als Fundament (Vorgabe des Nutzers) --- */
  --schwarz:   #2B2723;
  --rot:       #C4271C;
  --gold:      #E8A33D;
  --amber:     var(--gold);   /* UI-Akzent = Gold */
  --amber-ink: #8A5D12;

  /* --- Markenblau aus dem Logo --- */
  --brand:     #1C3A6E;

  /* --- Hero: tiefes Blau wie der Ipsos-Verlauf --- */
  --hero:      #17223F;
  --hero-2:    #101A2E;

  /* --- Antwortfarben: Schwarz, Rot, Gold — danach zwei ruhige Ergaenzungen --- */
  --o1:var(--schwarz);
  --o2:var(--rot);
  --o3:var(--gold);
  --o4:#5E7E9B;
  --o5:#6E8B67;

  /* --- Parteifarben sind Daten, nicht Marke --- */
  --p-spd:#E3000F;  --p-cdu:#151518;   --p-csu:#0080C8;  --p-gruene:#46962B;
  --p-fdp:#FFCC00;  --p-afd:#009EE0;   --p-linke:#BE3075; --p-bsw:#C0177C;
  --p-none:#767D8E;

  /* --- Schrift --- */
  --f-ui:    'Schibsted Grotesk', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --f-quote: 'Fraunces', Georgia, 'Times New Roman', serif;

  /* --- Raster --- */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px;
  --s6:32px; --s7:48px; --s8:64px; --s9:96px;

  /* Kantig wie eine Sendegrafik. Tiefe entsteht ueber Flaechen und
     Haarlinien, nicht ueber Rundungen und Weichzeichner. */
  --r-card:2px; --r-btn:0; --r-chip:0;
  --wrap:1140px;

  --sh-1:none;
  --sh-2:none;
  --sh-studio:none;

  --ease:  cubic-bezier(.22,1,.36,1);
  --ease-2:cubic-bezier(.4,0,.2,1);
}

/* ==========================================================================
   Basis
   ========================================================================== */

*,*::before,*::after{box-sizing:border-box}

html{-webkit-text-size-adjust:100%}

body{
  margin:0;
  font-family:var(--f-ui);
  font-size:16px;
  line-height:1.65;
  color:var(--ink);
  /* Silbergrauer Verlauf wie in der Kartenvorlage: Licht von oben links. */
  background:linear-gradient(140deg, #F1F3F6 0%, #E9EBEF 48%, #DFE3E9 100%) fixed;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

/* Feine Papierkoernung — Tiefe ohne Dekoration. */
body::before{
  content:"";
  position:fixed;
  inset:0;
  z-index:0;
  pointer-events:none;
  opacity:.030;
  mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
}

img{max-width:100%;display:block}
button{font:inherit;color:inherit}

:focus-visible{
  outline:2px solid var(--amber);
  outline-offset:3px;
  border-radius:4px;
}

.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

.skip-link{
  position:absolute;left:var(--s4);top:-100px;z-index:50;
  padding:10px var(--s4);
  background:var(--ink);color:#fff;text-decoration:none;font-weight:600;
}
.skip-link:focus{top:var(--s3)}

.wrap{
  width:100%;max-width:var(--wrap);
  margin-inline:auto;
  padding-inline:var(--s5);
  position:relative;z-index:1;
}

/* ==========================================================================
   Kopfzeile
   ========================================================================== */

/* Weisser Instituts-Header wie bei Ipsos: Logo links, Versalien-Navigation
   mit Haarlinien-Trennern. */
.site-head{
  position:sticky;top:0;z-index:20;
  background:#fff;
  border-bottom:1px solid var(--rule);
}

.site-head__inner{
  display:flex;align-items:center;gap:var(--s4);
  height:62px;
}

/* Die Wortmarke: POLITIK / UMFRAGEN, zweizeilig als Block gesetzt,
   beide Zeilen gleich breit — dem gelieferten Logo nachgebaut. */
.brand{
  display:block;
  text-decoration:none;color:var(--brand);
  margin-right:auto;
  line-height:1;
}

.brand__l1,.brand__l2{
  display:block;text-transform:uppercase;font-weight:800;
}
.brand__l1{font-size:17px;letter-spacing:.055em}
.brand__l2{font-size:13.1px;letter-spacing:.135em;margin-top:2px}

.site-nav{display:flex;align-items:center}

/* Mindestens 24px hohe Zielflaeche (WCAG 2.2, 2.5.8). */
.site-nav a{
  display:inline-flex;align-items:center;min-height:34px;
  padding:0 var(--s4);
  border-left:1px solid var(--rule);
  color:var(--ink-2);text-decoration:none;
  font-size:.72rem;font-weight:700;
  letter-spacing:.09em;text-transform:uppercase;
  transition:color .2s var(--ease-2);
}
.site-nav a:first-child{border-left:0}
.site-nav a:hover{color:var(--ink)}
.site-nav a[aria-current="page"]{color:var(--ink);font-style:italic}

/* ==========================================================================
   Hero — grosses Bild mit Schrift darin, wie bei Ipsos.
   Statt eines fremden Fotos: tiefes Blau mit gezeichneter
   Reichstagskuppel-Silhouette. Null externe Requests, null Bildrechte.
   ========================================================================== */

/* Reichstagsfoto mit dunkelblauem Verlauf von links — die Schrift steht
   im satten Blau, das Gebaeude bleibt rechts sichtbar (wie bei Ipsos). */
.hero{
  position:relative;z-index:2;
  background:
    linear-gradient(100deg,
      rgba(14,23,44,.96) 0%, rgba(16,27,52,.88) 38%,
      rgba(18,29,56,.55) 66%, rgba(14,23,44,.35) 100%),
    url("hero.jpg") center 30% / cover no-repeat,
    var(--hero-2);
  color:#fff;
  overflow:hidden;
}

.hero__inner{
  position:relative;z-index:1;
  padding:clamp(64px, 10vw, 120px) 0 clamp(56px, 9vw, 104px);
}

.hero__kicker{
  font-size:.72rem;font-weight:700;
  letter-spacing:.18em;text-transform:uppercase;
  color:#AFBBD6;
  margin:0 0 var(--s3);
}

.hero__title{
  font-size:clamp(2.2rem, 1.4rem + 4vw, 3.6rem);
  font-weight:800;line-height:1.04;letter-spacing:-.035em;
  margin:0 0 var(--s4);
  max-width:13ch;
  text-wrap:balance;
}

.hero__sub{
  font-size:1rem;line-height:1.6;
  color:#D6DDEB;
  margin:0;max-width:44ch;
}

/* Auf schmalen Bildschirmen liegt der Text ueber dem ganzen Bild —
   dort deckt der Verlauf gleichmaessig ab. */
@media (max-width:700px){
  .hero{
    background:
      linear-gradient(rgba(14,23,44,.90), rgba(14,23,44,.86)),
      url("hero.jpg") center 30% / cover no-repeat,
      var(--hero-2);
  }
}

/* Schwarz-Rot-Gold als Abschlusslinie des Heros. */
.flagline{
  position:relative;z-index:2;
  height:9px;
  background:linear-gradient(
    to bottom,
    var(--schwarz) 0 33.4%,
    var(--rot) 33.4% 66.7%,
    var(--gold) 66.7% 100%);
}

/* ==========================================================================
   Wappenleiste — laeuft endlos nach links: Bund, NRW, Hagen im Wechsel.
   Stilisierte eigene Embleme, bewusst KEINE Amtswappen (§ 124 OWiG).
   ========================================================================== */

.ticker{
  position:relative;z-index:2;
  background:#fff;
  border-bottom:1px solid var(--rule);
  overflow:hidden;
}

.ticker__track{
  display:flex;width:max-content;
  animation:ticker 38s linear infinite;
}
.ticker:hover .ticker__track,
.ticker:focus-within .ticker__track{animation-play-state:paused}

@keyframes ticker{
  from{transform:translateX(0)}
  to  {transform:translateX(-50%)}
}

.ticker__group{
  display:flex;align-items:center;
  padding:10px 0;
}

.ticker__item{
  display:flex;align-items:center;gap:10px;
  padding:0 var(--s5);
  white-space:nowrap;
}

.ticker__item svg{width:24px;height:28px;flex:none}

.ticker__label{
  font-size:.7rem;font-weight:700;
  letter-spacing:.13em;text-transform:uppercase;
  color:var(--ink-2);
}

.ticker__sep{
  width:5px;height:5px;flex:none;
  background:var(--gold);
}

/* ==========================================================================
   Deutschland-Silhouette hinter dem Inhalt — wie in der Farbvorlage.
   ========================================================================== */

/* Die Deutschlandkarte (Original-Bilddatei, unveraendert) liegt mittig
   und fest hinter dem Inhalt. Eine weiche radiale Maske blendet die
   rechteckigen Bildraender in den Seitenhintergrund aus — an Kontur,
   Farben und Schatten der Karte selbst aendert sie nichts. */
.map-bg{
  position:fixed;z-index:0;
  left:50%;top:52%;
  transform:translate(-50%, -50%);
  width:min(88vw, 620px);height:auto;
  -webkit-mask-image:radial-gradient(ellipse 58% 56% at 50% 50%, #000 58%, transparent 92%);
  mask-image:radial-gradient(ellipse 58% 56% at 50% 50%, #000 58%, transparent 92%);
  pointer-events:none;
  user-select:none;
}

main{position:relative;overflow-x:clip}

/* ==========================================================================
   Einleitung
   ========================================================================== */

.intro{padding:var(--s7) 0 var(--s6)}

.intro__boxes{display:grid;gap:var(--s3)}
@media (min-width:980px){
  .intro__boxes{grid-template-columns:1fr 1fr;align-items:start}
  .intro__boxes .disclaimer{margin-top:var(--s4)}
}

.eyebrow{
  font-size:.7rem;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink-3);
  margin:0 0 var(--s3);
}

.intro__title{
  font-size:clamp(1.9rem,1.35rem + 2.5vw,2.9rem);
  font-weight:800;line-height:1.08;letter-spacing:-.035em;
  margin:0 0 var(--s5);
  text-wrap:balance;
}
/* Der orangene Strich unter der Headline — direkt aus der Vorlage. */
.intro__title::after{
  content:"";display:block;
  width:52px;height:4px;background:var(--amber);
  margin-top:var(--s4);
}

.intro__lead{
  font-size:1.02rem;color:var(--ink-2);
  margin:0;max-width:46ch;
}

/* Ehrlichkeitshinweis — leise, aber nicht versteckt. */
.disclaimer{
  display:flex;gap:10px;
  margin-top:var(--s5);padding:var(--s3) var(--s4);
  border-left:3px solid var(--amber);
  background:rgba(233,161,59,.09);
  font-size:.83rem;line-height:1.55;color:var(--ink-2);
}
.disclaimer strong{color:var(--ink);font-weight:700}

/* ==========================================================================
   Einwilligung nach Art. 9 DSGVO — muss vor der ersten Stimme erteilt werden
   ========================================================================== */

.consent{
  background:#fff;
  border:1px solid var(--card-edge);
  border-left:4px solid var(--rot);
  border-radius:var(--r-card);
  padding:var(--s5);
  margin-bottom:var(--s5);
}

.consent__titel{
  font-size:1.02rem;font-weight:700;letter-spacing:-.015em;
  margin:0 0 var(--s3);
}

.consent__text{
  font-size:.86rem;line-height:1.6;color:var(--ink-2);
  margin:0 0 var(--s4);max-width:78ch;
}

.consent__label{
  display:flex;align-items:flex-start;gap:10px;
  font-size:.92rem;font-weight:600;
  cursor:pointer;margin-bottom:var(--s4);
}

.consent__box{
  width:20px;height:20px;flex:none;margin:1px 0 0;
  accent-color:var(--rot);cursor:pointer;
}

.btn-consent{
  appearance:none;
  padding:11px 20px;
  border:1px solid var(--ink);
  background:var(--ink);color:#fff;
  font-size:.9rem;font-weight:700;
  cursor:pointer;
  transition:background-color .15s var(--ease-2), border-color .15s var(--ease-2);
}
.btn-consent:hover:not([disabled]){background:#000;border-color:#000}
.btn-consent:active:not([disabled]){transform:translateY(1px)}
.btn-consent[disabled]{
  background:var(--paper-2);border-color:var(--rule);
  color:var(--ink-3);cursor:not-allowed;
}

.consent__fuss{
  font-size:.78rem;color:var(--ink-3);margin:var(--s3) 0 0;
}
.consent__fuss a{color:var(--ink-2);text-underline-offset:3px}

/* Erteilter Zustand: schmale Zeile mit Widerrufsmoeglichkeit. */
.consent--erteilt{
  display:flex;align-items:center;gap:var(--s4);flex-wrap:wrap;
  border-left-color:#3E7C4F;
  padding:var(--s3) var(--s4);
}
.consent__ok{
  font-size:.83rem;color:var(--ink-2);margin:0;margin-right:auto;
}
.consent__ok b{color:var(--ink)}

.btn-widerruf{
  appearance:none;
  padding:7px 13px;
  border:1px solid var(--rule);
  background:var(--paper);
  font-size:.8rem;font-weight:600;color:var(--ink-2);
  cursor:pointer;
  transition:border-color .15s var(--ease-2), color .15s var(--ease-2);
}
.btn-widerruf:hover:not([disabled]){border-color:var(--rot);color:var(--rot)}
.btn-widerruf[disabled]{opacity:.6;cursor:progress}

/* Hinweis in der Karte, solange nicht eingewilligt wurde. */
.opt-lock{
  font-size:.82rem;color:var(--ink-3);font-style:italic;
  margin:var(--s2) 0 0;
}
.opt[disabled]{opacity:.5}
.opt[disabled]:hover{background:var(--paper);border-color:var(--rule)}

/* ==========================================================================
   Betroffenheitsfrage — frageabhaengig, direkt ueber den Antworten
   ========================================================================== */

.affected{
  display:flex;align-items:center;gap:var(--s3);flex-wrap:wrap;
  padding:var(--s3) var(--s4);margin-bottom:var(--s4);
  background:var(--paper);
  border-left:3px solid var(--gold);
}
.affected__frage{
  font-size:.85rem;font-weight:600;color:var(--ink);
}
.affected__hint{
  font-size:.74rem;color:var(--ink-3);font-style:italic;
}

/* ==========================================================================
   Profilleiste — freiwillige Angaben fuer die Auswertung
   ========================================================================== */

.profile{
  background:var(--card);
  border:1px solid var(--card-edge);
  border-radius:var(--r-card);
  padding:var(--s5);
  margin-bottom:var(--s6);
}

.profile__controls{
  display:flex;flex-direction:column;gap:var(--s4);
}

/* Auf breiten Bildschirmen wird die Profilleiste ein flacher Streifen:
   Erklaerung links, beide Auswahlgruppen rechts daneben. */
@media (min-width:900px){
  .profile{display:flex;align-items:center;gap:var(--s7)}
  .profile__info{flex:0 0 300px}
  .profile__note{margin-bottom:0}
  .profile__controls{flex:1;flex-direction:row;flex-wrap:wrap;gap:var(--s4) var(--s7)}
  .profile__controls .profile__row + .profile__row{margin-top:0}
}

.profile__head{
  display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--s3);margin-bottom:var(--s2);
}

.profile__title{
  font-size:.95rem;font-weight:700;letter-spacing:-.01em;margin:0;
}

.profile__note{
  font-size:.78rem;color:var(--ink-3);margin:0 0 var(--s4);
}

.profile__row + .profile__row{margin-top:var(--s4)}

.profile__label{
  display:block;
  font-size:.7rem;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-3);
  margin-bottom:var(--s2);
}

/* Segmentierte Auswahl */
.seg{display:flex;flex-wrap:wrap;gap:6px}

.seg__btn{
  appearance:none;
  padding:7px 13px;
  border:1px solid var(--rule);
  background:var(--paper);
  font-size:.83rem;font-weight:600;color:var(--ink-2);
  cursor:pointer;
  transition:background .15s var(--ease-2), border-color .15s var(--ease-2),
             color .15s var(--ease-2);
}
.seg__btn:hover{
  background:#fff;border-color:var(--ink);color:var(--ink);
}
.seg__btn:active{transform:translateY(1px)}
.seg__btn[aria-pressed="true"]{
  background:var(--ink);border-color:var(--ink);color:#fff;
}

/* ==========================================================================
   Umfragekarte — Zustand "Stimmzettel"
   ========================================================================== */

/* Auf grossen Bildschirmen fuellen zwei Kartenspalten die Breite,
   darunter bleibt es eine Spalte. */
.feed{
  display:grid;grid-template-columns:1fr;
  align-items:start;
  gap:var(--s6);
  padding-bottom:var(--s9);
}
@media (min-width:980px){
  .feed{grid-template-columns:1fr 1fr;gap:var(--s5)}
}

.card{
  --party:var(--p-none);
  position:relative;
  background:var(--card);
  border:1px solid var(--card-edge);
  border-left:4px solid var(--party);
  border-radius:var(--r-card);
  padding:var(--s6) var(--s5) var(--s5);
  transition:background-color .65s var(--ease-2),
             border-color .65s var(--ease-2);
}

/* Kennzeichnung der Beispielfragen im Demo-Modus. */
.demo-badge{
  display:block;
  margin:0 0 var(--s4);padding:7px 11px;
  background:rgba(196,39,28,.10);
  border-left:3px solid var(--rot);
  font-size:.76rem;line-height:1.45;color:var(--ink-2);
}
.demo-badge b{
  color:var(--rot);font-weight:800;
  text-transform:uppercase;letter-spacing:.08em;
}

.card__head{
  display:flex;align-items:center;gap:var(--s3);
  margin-bottom:var(--s5);
}

/* Portraet: kuehle Duotone-Behandlung, damit der Feed ruhig bleibt. */
.portrait{
  position:relative;flex:none;
  width:56px;height:56px;border-radius:var(--r-card);
  overflow:hidden;background:var(--paper-2);
  box-shadow:inset 0 0 0 1px rgba(16,20,32,.12);
}
.portrait img{
  width:100%;height:100%;object-fit:cover;object-position:center 22%;
  filter:grayscale(.62) contrast(1.06);
  transition:filter .65s var(--ease-2);
}
.portrait::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg, rgba(90,110,150,.16), rgba(14,21,36,.22));
  mix-blend-mode:multiply;
  pointer-events:none;
}

/* Platzhalter-Silhouette, falls kein Foto hinterlegt ist. */
.portrait--empty{
  background:
    radial-gradient(58% 44% at 50% 118%, var(--party) 0%, transparent 72%),
    var(--paper-2);
}
.portrait--empty::before{
  content:"";position:absolute;inset:0;
  background:no-repeat center/58% url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23767D8E'%3E%3Cpath d='M12 12.6a4.3 4.3 0 1 0 0-8.6 4.3 4.3 0 0 0 0 8.6Zm0 1.9c-4 0-7.2 2.2-7.2 4.9V21h14.4v-1.6c0-2.7-3.2-4.9-7.2-4.9Z'/%3E%3C/svg%3E");
  opacity:.5;
}

.speaker{min-width:0}

.speaker__name{
  font-size:.95rem;font-weight:700;letter-spacing:-.015em;
  margin:0;line-height:1.3;
  transition:color .65s var(--ease-2);
}

.speaker__role{
  font-size:.79rem;color:var(--ink-3);margin:0;line-height:1.4;
  transition:color .65s var(--ease-2);
}

.party-chip{
  display:inline-flex;align-items:center;
  margin-left:auto;flex:none;align-self:flex-start;
  height:28px;padding:0 10px;gap:7px;
  border-left:3px solid var(--party);
  background:var(--paper-2);
  font-size:.7rem;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink);
  transition:background-color .65s var(--ease-2), color .65s var(--ease-2);
}
.party-chip img{height:15px;width:auto;max-width:64px;object-fit:contain}

/* Das Zitat — die einzige Stelle mit Serifenschrift. */
.quote{
  font-family:var(--f-quote);
  font-style:italic;
  font-weight:500;
  font-size:clamp(1.32rem,1.06rem + 1.25vw,1.78rem);
  line-height:1.32;
  letter-spacing:-.012em;
  color:var(--ink);
  margin:0 0 var(--s5);
  text-wrap:pretty;
  transition:color .65s var(--ease-2);
}

.quote__src{
  display:block;
  font-family:var(--f-ui);font-style:normal;
  font-size:.75rem;font-weight:500;letter-spacing:.01em;
  color:var(--ink-3);margin-top:var(--s3);
  transition:color .65s var(--ease-2);
}

.question{
  position:relative;
  font-size:clamp(1.16rem,1.03rem + .6vw,1.4rem);
  font-weight:700;line-height:1.28;letter-spacing:-.022em;
  margin:0 0 var(--s5);padding-top:var(--s5);
  text-wrap:balance;
  transition:color .65s var(--ease-2);
}
.question::before{
  content:"";position:absolute;top:0;left:0;
  width:44px;height:2px;border-radius:1px;
  background:var(--amber);
}

/* ==========================================================================
   Antwortoptionen — als Stimmzettel-Zeilen mit Ankreuzkasten
   ========================================================================== */

.options{
  display:flex;flex-direction:column;gap:var(--s2);
  margin:0 0 var(--s5);padding:0;list-style:none;
}

.opt{
  display:flex;align-items:center;gap:var(--s3);
  width:100%;
  padding:12px 14px;
  border:1px solid var(--rule);
  background:var(--paper);
  text-align:left;
  cursor:pointer;
  transition:background-color .15s var(--ease-2), border-color .15s var(--ease-2);
}
.opt:hover{
  background:#fff;
  border-color:var(--ink);
}
.opt:active{transform:translateY(1px)}
.opt[disabled]{cursor:default}

/* Der Ankreuzkasten des Stimmzettels. */
.opt__box{
  flex:none;
  width:26px;height:26px;
  border:2px solid var(--ink);
  background:#fff;
  display:grid;place-items:center;
}

.opt__label{
  font-size:.97rem;font-weight:600;letter-spacing:-.01em;
  line-height:1.35;
}

/* Das handgezogene Kreuz. */
.x{width:19px;height:19px;overflow:visible;color:var(--ink)}
.x path{
  fill:none;stroke:currentColor;stroke-width:3.1;
  stroke-linecap:round;
  stroke-dasharray:1;stroke-dashoffset:1;
}
.opt[aria-pressed="true"] .x path{
  animation:draw-x .34s var(--ease-2) forwards;
}
.opt[aria-pressed="true"] .x path:nth-child(2){animation-delay:.13s}
@keyframes draw-x{to{stroke-dashoffset:0}}

/* Die eigene Stimme, kompakt im Ergebniszustand. */
.your-vote{
  display:flex;align-items:center;gap:10px;
  margin:0 0 var(--s5);padding:11px 14px;
  border:1px solid var(--rule);
  border-left:3px solid var(--gold);
  background:#fff;
  font-size:.88rem;font-weight:600;
  color:var(--ink);
}
.your-vote .x{color:var(--amber-ink);width:17px;height:17px}
.your-vote .x path{stroke-dashoffset:0}
.your-vote__key{
  font-size:.7rem;font-weight:700;letter-spacing:.13em;
  text-transform:uppercase;color:var(--ink-3);
}

/* Ein Satz in Kleinschrift — bewusst keine Punkt-Separatoren. */
.card__meta{
  font-size:.78rem;line-height:1.5;color:var(--ink-3);
  margin:0;
}
.card__meta b{
  font-weight:700;color:var(--ink-2);font-variant-numeric:tabular-nums;
}

/* Quellzeile unter der Grafik, rechtsbuendig wie in der Vorlage. */
.chart__src{
  font-size:.74rem;line-height:1.55;color:var(--ink-3);
  margin:0;
}
.chart__src b{font-weight:700;color:var(--ink-2);font-variant-numeric:tabular-nums}
.chart__src a{color:var(--ink-2);text-underline-offset:3px}

/* Der Nicht-repraesentativ-Hinweis steht bewusst im normalen Schriftgrad
   und nicht ausgegraut — der Presserat verlangt eine erkennbare Kennzeichnung. */
.chart__src--warn{
  margin-top:var(--s2);padding:9px 12px;
  background:rgba(232,163,61,.14);
  border-left:3px solid var(--gold);
  color:var(--ink-2);
}
.chart__src--warn b{color:var(--ink)}

/* ==========================================================================
   Zustand "Auswertung" — die Karte wird zur hellen Ergebnisgrafik,
   wie die Farbvorlage: graues Feld, Balken in Schwarz, Rot, Gold.
   ========================================================================== */

.card[data-state="result"]{
  background:#F0F1F4;
}
.card[data-state="result"] .quote{
  font-size:clamp(1.14rem,.98rem + .78vw,1.42rem);
}

/* ==========================================================================
   Ergebnisgrafik
   ========================================================================== */

.chart{
  opacity:0;
  transform:translateY(10px);
  transition:opacity .5s var(--ease-2), transform .5s var(--ease);
}
.chart.is-in{opacity:1;transform:none}
.chart[hidden]{display:none}

.chart__top{
  display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--s3);margin-bottom:var(--s2);
}

.chart__label{
  font-size:.7rem;font-weight:700;letter-spacing:.15em;
  text-transform:uppercase;color:var(--ink-3);margin:0;
}

.chart__unit{
  font-size:.7rem;font-weight:500;color:var(--ink-3);margin:0;
}

/* --- Senkrechte Balken: der grosse Auftritt --- */
/* Die Balkengruppe bleibt kompakt und laeuft nicht ueber die ganze
   Kartenbreite auseinander — wie in der Vorlage. Balkenbreite zu
   Zwischenraum steht bei rund 1,4 zu 1. */
.bars{
  --track-h:158px;
  --num-space:46px;   /* Luft, damit die Zahl auch bei 100 % Platz hat */
  --bar-w:72px;
  --col-w:112px;
  --gap:var(--s3);
  position:relative;
  padding-top:var(--num-space);
  display:flex;align-items:flex-start;gap:var(--gap);
  /* --cols setzt app.js aus der Zahl der Antworten. Dadurch ist die
     Gruppenbreite exakt bestimmt statt vom Textumbruch abhaengig. */
  width:calc(var(--cols, 3) * var(--col-w) + (var(--cols, 3) - 1) * var(--gap));
  max-width:100%;
  /* Die Balkengruppe steht mittig in der Karte. */
  margin-inline:auto;
}

/* Grundlinie — sitzt exakt am Fuss der Balken und zeichnet sich mit auf. */
.bars::after{
  content:"";position:absolute;left:0;right:0;
  top:calc(var(--num-space) + var(--track-h));
  height:2px;background:#C3C8D2;
  transform:scaleX(0);transform-origin:left center;
  transition:transform .55s var(--ease);
}
.chart.is-in .bars::after{transform:scaleX(1)}

.bar{
  flex:1 1 0;min-width:0;
  display:flex;flex-direction:column;align-items:center;
}

.bar__track{
  position:relative;
  width:100%;height:var(--track-h);
}

/* Schmale Balken mit Luft dazwischen — wie in der Vorlage. Die Spalte
   bleibt breit, damit die Beschriftung darunter Platz hat. */
.bar__fill{
  --bw:min(100%, var(--bar-w));
  position:absolute;bottom:0;left:50%;
  width:var(--bw);
  margin-left:calc(var(--bw) * -.5);
  height:calc(var(--pct) * 1%);
  min-height:3px;
  background:var(--c);
  transform:scaleY(0);
  transform-origin:bottom center;
  transition:transform .82s var(--ease);
  transition-delay:calc(var(--i) * 90ms);
}
.chart.is-in .bar__fill{transform:scaleY(1)}

.bar__num{
  position:absolute;left:0;right:0;
  bottom:calc(var(--pct) * 1% + 9px);
  text-align:center;
  font-size:clamp(1.45rem,1.1rem + 1.7vw,2.1rem);
  font-weight:800;line-height:1;letter-spacing:-.035em;
  font-variant-numeric:tabular-nums;
  color:var(--ink);
  opacity:0;
  transform:translateY(7px);
  transition:opacity .38s var(--ease-2), transform .38s var(--ease);
  transition-delay:calc(var(--i) * 90ms + 400ms);
}
.chart.is-in .bar__num{opacity:1;transform:none}

.bar__label{
  margin-top:calc(var(--s3) + 2px);
  font-size:.74rem;font-weight:600;line-height:1.25;
  text-align:center;color:var(--ink-2);
  hyphens:auto;
}
.bar[data-mine="1"] .bar__label{color:var(--ink)}
.bar[data-mine="1"] .bar__label::after{
  content:"";display:block;width:14px;height:2px;
  background:var(--amber);border-radius:1px;margin:5px auto 0;
}

/* --- Aufschluesselung: waagerechte 100-Prozent-Balken --- */
.breakdown{margin-top:var(--s6)}
.bd-group{margin-top:var(--s5)}
.bd-group .chart__label{margin-bottom:var(--s3)}

.legend{
  display:flex;flex-wrap:wrap;gap:var(--s3) var(--s4);
  margin:0 0 var(--s4);padding:0;list-style:none;
}
.legend li{
  display:flex;align-items:center;gap:7px;
  font-size:.75rem;font-weight:600;color:var(--ink-2);
}
.legend i{
  width:11px;height:11px;
  background:var(--c);flex:none;
}

.split{display:flex;flex-direction:column;gap:var(--s4)}

.split__row{
  display:grid;
  grid-template-columns:132px 1fr;
  align-items:center;gap:var(--s3);
}

.split__name{
  display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;
  font-size:.78rem;font-weight:600;color:var(--ink-2);
  line-height:1.25;
}

/* Parteifarbe ausschliesslich als Zeilenmarker. */
.split__mark{
  width:4px;height:13px;flex:none;
  background:var(--c);
  align-self:center;
}

/* Fallzahl gehoert bei Kreuzauswertungen an jede Zeile, nicht in die Fussnote. */
.split__n{
  font-size:.7rem;font-weight:500;color:var(--ink-3);
  font-variant-numeric:tabular-nums;
}

/* Referenzzeile "Alle Befragten" — optisch vom Gruppenblock abgesetzt. */
.split__row--ref{
  padding-bottom:var(--s3);
  border-bottom:1px solid var(--rule);
  margin-bottom:var(--s2);
}
.split__row--ref .split__name{color:var(--ink);font-weight:700}

/* 50 bis 99 Stimmen: sichtbar als eingeschraenkt gekennzeichnet. */
.split__row--schwach .split__bar{opacity:.72}
.split__warn{
  position:absolute;right:4px;top:50%;transform:translateY(-50%);
  font-size:.8rem;font-weight:800;color:var(--ink-3);
  pointer-events:none;
}

/* Unter 50 Stimmen: absolute Zahlen statt Prozent. */
.split__abs{
  display:flex;flex-direction:column;gap:1px;
  font-size:.78rem;color:var(--ink-2);
  font-variant-numeric:tabular-nums;
}
.split__abs em{
  font-size:.72rem;color:var(--ink-3);font-style:italic;
}

.split__bar{
  position:relative;
  display:flex;height:30px;
  overflow:hidden;
  background:#E0E3E9;
}

.split__seg{
  flex-basis:calc(var(--pct) * 1%);
  min-width:0;
  background:var(--c);
  display:grid;place-items:center;
  transform:scaleX(0);transform-origin:left center;
  transition:transform .6s var(--ease);
  transition-delay:calc(var(--i) * 70ms + 260ms);
}
.chart.is-in .split__seg{transform:scaleX(1)}

.split__seg span{
  font-size:.73rem;font-weight:800;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;
  /* Beschriftungsfarbe kommt je Segment aus app.js (hell auf Schwarz/Rot,
     dunkel auf Gold), sonst waere sie auf dunklen Balken unlesbar. */
  color:var(--lc, #fff);
  opacity:0;
  transition:opacity .3s var(--ease-2);
  transition-delay:calc(var(--i) * 70ms + 620ms);
}
.chart.is-in .split__seg span{opacity:1}

.split__thin{
  font-size:.76rem;font-style:italic;
  color:var(--ink-3);
}

.chart__foot{
  margin-top:var(--s5);padding-top:var(--s4);
  border-top:1px solid var(--rule);
}

.btn-ghost{
  appearance:none;
  padding:9px 15px;
  border:1px solid var(--rule);
  background:transparent;
  color:var(--ink-2);
  font-size:.8rem;font-weight:600;
  cursor:pointer;
  transition:color .15s var(--ease-2), border-color .15s var(--ease-2),
             background-color .15s var(--ease-2);
}
.btn-ghost:hover{
  color:var(--ink);border-color:var(--ink);
  background:#fff;
}
.btn-ghost:active{transform:translateY(1px)}

/* ==========================================================================
   Statuszustaende
   ========================================================================== */

.state{
  padding:var(--s7) var(--s5);
  text-align:center;color:var(--ink-2);
  border:1px dashed var(--rule);
  border-radius:var(--r-card);
  background:rgba(255,255,255,.5);
}
.state h2{font-size:1.05rem;font-weight:700;margin:0 0 var(--s2);color:var(--ink)}
.state p{margin:0;font-size:.9rem}

.skeleton{
  height:230px;border-radius:var(--r-card);
  background:linear-gradient(100deg,var(--paper-2) 30%,#F2F4F7 50%,var(--paper-2) 70%);
  background-size:220% 100%;
  animation:shimmer 1.5s var(--ease-2) infinite;
}
@keyframes shimmer{to{background-position:-120% 0}}

/* ==========================================================================
   Fusszeile
   ========================================================================== */

.site-foot{
  position:relative;z-index:1;
  border-top:1px solid var(--rule);
  padding:var(--s6) 0 var(--s7);
  font-size:.82rem;color:var(--ink-3);
}
.site-foot nav{
  display:flex;flex-wrap:wrap;gap:var(--s4);margin-bottom:var(--s3);
}
.site-foot a{
  display:inline-flex;align-items:center;min-height:34px;
  color:var(--ink-2);text-decoration:none;font-weight:600;
  transition:color .2s var(--ease-2);
}
.site-foot a:hover{color:var(--ink);text-decoration:underline}
.site-foot p{margin:0 0 var(--s2);max-width:58ch;line-height:1.6}

/* ==========================================================================
   Textseiten (Impressum, Datenschutz)
   ========================================================================== */

.doc{padding:var(--s8) 0 var(--s9);max-width:70ch}
.doc h1{
  font-size:clamp(1.7rem,1.3rem + 1.8vw,2.4rem);
  font-weight:800;letter-spacing:-.03em;line-height:1.12;
  margin:0 0 var(--s5);
}
.doc h2{
  font-size:1.06rem;font-weight:700;letter-spacing:-.015em;
  margin:var(--s7) 0 var(--s3);
}
.doc p,.doc li{color:var(--ink-2);font-size:.94rem}
.doc p{margin:0 0 var(--s4)}
.doc ul{margin:0 0 var(--s4);padding-left:1.2em}
.doc li{margin-bottom:6px}
.doc a{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.doc strong{color:var(--ink)}

/* ==========================================================================
   Responsiv
   ========================================================================== */

@media (max-width:560px){
  .wrap{padding-inline:var(--s4)}
  /* Header kompakt: Link auf die aktuelle Seite und Impressum (steht im
     Footer) ausblenden, Trennlinien weglassen. */
  .site-nav a{padding:0 var(--s3);font-size:.66rem;border-left:0}
  .site-nav a[aria-current="page"]{display:none}
  .site-nav a[href="impressum.html"]{display:none}
  .ticker__item{padding:0 var(--s4)}
  .card{padding:var(--s5) var(--s4) var(--s4)}
  .bars{--track-h:128px;--num-space:38px;--bar-w:56px;--col-w:92px;--gap:var(--s2)}
  .split__row{grid-template-columns:1fr;gap:5px}
  .split__row--ref{padding-bottom:var(--s3)}
  .consent{padding:var(--s4)}
  .affected{flex-direction:column;align-items:flex-start;gap:var(--s2)}
  .intro{padding:var(--s7) 0 var(--s5)}
  .profile{padding:var(--s4)}
  .site-nav{gap:var(--s4)}
  .party-chip{height:25px;padding:0 8px;font-size:.66rem}
}

@media (max-width:380px){
  .bar__label{font-size:.68rem}
  .split__row{grid-template-columns:1fr;gap:6px}
}

/* ==========================================================================
   Bewegung reduzieren
   ========================================================================== */

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    transition-delay:0ms !important;
    scroll-behavior:auto !important;
  }
  .chart{opacity:1;transform:none}
  .bar__fill{transform:scaleY(1)}
  .bar__num{opacity:1;transform:none}
  .bars::after{transform:scaleX(1)}
  .split__seg{transform:scaleX(1)}
  .ticker__track{animation:none}
  .split__seg span{opacity:1}
  .x path{stroke-dashoffset:0}
}
