/* Der Stil der Inhaltsseiten - gemeinsam fuer Startseite, Lehrkraefte,
   Creator und Institutionen. Lag bis eben inline in index.html; sobald es
   mehr als eine Seite gibt, muss er geteilt werden, sonst laufen sie
   auseinander. Genau aus dem Grund liegt kopf.css schon laenger daneben. */
:root{
  color-scheme:dark;
  /* ==================================================================
     QRAKI FARBSYSTEM — Marcs Briefing vom 10. September 2026.
     Alles hier ist aus diesem Briefing uebernommen, nichts frei gewaehlt.

     DIE NEUTRALACHSE ist eine Familie: Farbton 224 bis 228, Saettigung 15
     bis 18 %. Nur die Schriftfarbe faellt heraus, und zwar mit Absicht:
     "Qraki Paper" #F1F0ED liegt bei Farbton 45, ist also WARM auf kaltem
     Grund. Das ist der Grund, warum die Seite nicht klinisch wirkt - aber es
     muss so bleiben, sonst kippt der Eindruck.

     DAS LILA HAT ZWEI ROLLEN, und das ist keine Erfindung von mir, sondern
     eine Kontrastfrage:
       --marke  #8B36FD  Flaeche. Als kleine Schrift kaeme sie nur auf 3,34
                         und laege unter der Schwelle 4,5.
       --accent #BD92F6  Schrift und Linien. 7,14 - sicher.

     NACHGEMESSEN AM 11. SEPTEMBER 2026 (Marc: "die Farbe Website-Buttons und
     Qraki-Icon passen nicht zu Qrakis Farbe in den Grafiken, das sieht komisch
     aus"). Er hatte recht, und die Ursache war nicht der Farbton: Qrakis
     Koerper ist in allen sechs Flat-Vorlagen #8B36FD - Ton 265,6 und
     Helligkeit 60, also praktisch dasselbe wie das alte #8B5ED7 (262,3 / 60,6).
     Verschieden war allein die SAETTIGUNG: 98 gegen 60. Neben einem voll
     gesaettigten Lila wirkt ein halb gesaettigtes schmutzig - genau der
     "komische" Eindruck. Der Wert ist der haeufigste Koerperton ueber alle
     sechs Vorlagen, nicht geschaetzt.

     Der Tausch KOSTET keinen Kontrast, er bringt welchen: Weiss auf dem Knopf
     steigt von 4,49 auf 5,19 (das satte Lila ist in der Leuchtdichte dunkler).
     --accent wurde so gewaehlt, dass es bei 7,14 bleibt - derselbe Wert wie
     vorher, nur im Farbton der Grafiken.

     WEISSE SCHRIFT AUF DEM KNOPF, nicht dunkle: Auf #8B36FD kommt Weiss auf
     5,19, die dunkelste Neutrale nur auf 3,7 - und die App macht es seit
     jeher so. Wer hier etwas aendert, rechnet die Kontraste nach.
     ================================================================== */
  /* ==================================================================
     QRAKI WORLD, 14. September 2026 — die verbindliche Palette aus dem
     Website-Briefing, zentral an EINER Stelle. Die Namen aus dem Briefing
     stehen zuerst; die alten Namen darunter zeigen nur noch darauf, damit
     die 1900 Zeilen darunter unveraendert weiterlaufen.

     DIE EINE ABWEICHUNG, MIT ABSICHT: Das Briefing nennt fuer Qraki-Lila
     #8B5ED7. Nachgemessen ist Qrakis Koerper in allen neuen Grafiken
     (hero_flat, haken_flat, tiny_illustrations, sticker_set) aber #8836F8
     bis #8B36FD, und die Farbflaeche in qraki_world_02.png ist tatsaechlich
     #8246FC gerendert - nur die Beschriftung sagt #8B5ED7. Ein halb
     gesaettigtes Lila neben der voll gesaettigten Figur wirkte am
     11. September "komisch" (Marc) - genau diesen Fehler nicht wiederholen.
     Wer trotzdem das Briefing-Lila will, aendert nur --qraki-purple.

     Kontraste, nachgerechnet auf #111F29 / #232836 / #2A3142:
       Text primaer   14,5 / 12,7 / 11,2
       Text sekundaer  7,2 /  6,3 /  5,6
       Lila als Schrift (--accent #BD92F6)  6,9 / 6,0 / 5,3
       Weiss auf dem Knopf                  5,19
     Das satte Lila selbst traegt keine kleine Schrift (3,2) - dafuer gibt es
     weiterhin --accent. */
  /* DIE WERTE STEHEN NICHT MEHR HIER (14. September 2026). Sie kommen aus
     gemeinsam/tokens.css, das als tokens.css vor dieser Datei geladen wird -
     auf jeder Seite, auch auf codes.html. Hier wird nur noch uebersetzt:
     Website-Name links, gemeinsamer Name rechts. So koennen Website und App
     nicht mehr auseinanderlaufen, ohne dass es an EINER Stelle auffaellt.
     --orange hat im gemeinsamen Satz keine Entsprechung und bleibt hier; es
     kommt nur in Illustrationsnaehe vor, nicht in der Bedienung. */
  --background:var(--grund); --surface:var(--flaeche); --card:var(--karte);
  --border:var(--linie);
  --text-primary:var(--tinte); --text-secondary:var(--soft);
  --qraki-purple:var(--qraki); --qraki-purple-dark:var(--qraki-tief);
  --blue:var(--blau-signal); --green:var(--ok); --yellow:var(--warn);
  --red:var(--fehler); --orange:#D98243;

  /* Die Kurznamen (--paper, --ink, --marke, --accent, --auf, --still, --line)
     stehen jetzt in tokens.css, damit auch codes.html sie kennt. Hier stand
     ausserdem --hoch:#333B4E und --leise:#9499AE noch einmal als Zahl; beides
     kommt jetzt aus dem gemeinsamen Satz. */
  --sz1:#35373A; --sz2:#5A5B5E; --sz3:#7A7B7E; --sz4:#9EA0A2;
  --sz-akz2:#765999; --sz-glanz:#CBB0EE;
  --disp:ui-rounded,'SF Pro Rounded','Nunito',system-ui,-apple-system,'Segoe UI',sans-serif;
  /* Abstand zwischen Kaesten, die nebeneinander oder untereinander stehen. */
  --luft:22px;
  /* Abstand zwischen zwei Inhaltsbloecken. EIN Wert, an einer Stelle: Vorher
     stand er als Literal nur an .kette, und .zweispur hatte gar keinen - die
     beiden Kaesten klebten dadurch auf sechs Seiten direkt am Absatz darueber
     (Marc, 4. September 2026). Ueberschriften und ihre Vorzeilen bleiben
     bewusst enger: Was zusammengehoert, soll auch naeher stehen. */
  --block:clamp(26px,4vh,40px);
}
*{ box-sizing:border-box; }
html{ scroll-behavior:smooth; }
@media (prefers-reduced-motion:reduce){ html{ scroll-behavior:auto; } }
body{ margin:0; background:var(--paper); color:var(--ink); font-family:var(--disp);
  -webkit-font-smoothing:antialiased; line-height:1.55; }
.bahn{ width:100%; max-width:680px; margin:0 auto; padding:0 22px; }
h1,h2,h3{ letter-spacing:-.03em; text-wrap:balance; margin:0; }
p{ margin:0; }
a{ color:var(--accent); }

/* Luft: die Abschnitte duerfen atmen. Enge wirkt gehetzt, und eine Seite,
   die etwas von Ruhe erzaehlt, darf nicht selbst gedraengt aussehen. */
/* Enger als vorher (104px -> 76px). Luft ist gut, aber siebzehn Bildschirme
   Scrollweg sind keine Ruhe mehr, sondern eine Strecke. */
section{ padding:clamp(40px,7vh,76px) 0; }

/* Der Hero fuellt den Schirm. Wer die Seite oeffnet, soll EIN Bild sehen und
   EINEN Satz - nicht drei Dinge gleichzeitig. `100svh` statt `100vh`: Auf dem
   Handy zaehlt vh die Adressleiste mit, und der Knopf saesse dann unter der
   Kante. `min-height` statt `height`, damit ein sehr kleiner Schirm mitwaechst
   statt abzuschneiden. */
header.oben{ min-height:100svh; display:flex; flex-direction:column;
  justify-content:center; padding:clamp(24px,6vh,56px) 0 clamp(80px,12vh,120px);
  text-align:center; position:relative; }
/* Der Hinweis zum Weiterscrollen. Ein Bildschirm ohne sichtbare Unterkante
   sieht aus, als waere die Seite zu Ende - genau die Falle, die volle Hoehe
   aufmacht. */
.weiter-runter{ position:absolute; left:0; right:0; bottom:clamp(22px,4vh,40px);
  display:flex; flex-direction:column; align-items:center; gap:6px;
  color:var(--soft); font-size:12px; font-weight:700; letter-spacing:.1em;
  text-transform:uppercase; text-decoration:none; }
.weiter-runter svg{ width:20px; height:20px; }
@media (prefers-reduced-motion:no-preference){
  .weiter-runter svg{ animation:wippen 2.4s ease-in-out infinite; }
}
@keyframes wippen{ 0%,100%{ transform:none } 50%{ transform:translateY(5px) } }
.figur{ color:var(--accent); width:clamp(84px,12vw,124px); height:auto;
  aspect-ratio:79.67/85.62; margin:0 auto 22px; display:block; }
/* Die Illustrationen bringen ihren eigenen Grund mit, und der ist derselbe wie
   der der Seite - deshalb steht kein Rahmen darum (Marc). Genau dafuer ist der
   Seitengrund auf die Farbe der Grafiken gezogen worden.
   Die Breite ist gedeckelt, und zwar nicht aus Geschmack: Die Vorlagen sind
   256 bis 334 Pixel breit, mehr Material gibt es nicht. Wer sie groesser zieht,
   bekommt Unschaerfe - auf einem Retina-Schirm schon ab etwa der halben
   Anzeigebreite. */
.bild{ display:block; width:100%; height:auto; margin:0 auto 26px; }
/* Der Hero kommt mit 708x592 aus einer eigenen Vorlage und darf deshalb als
   einziges Bild wirklich gross werden - bis 340 px ist er selbst auf einem
   Retina-Schirm noch scharf. */
/* AUF DEM HANDY DARF DAS BILD NICHT DIE HANDLUNG VERDRAENGEN. Gemessen am
   8. September 2026 bei 375x812: Das Bild nahm 45 % des ersten Bildschirms,
   der Knopf lag darunter ausserhalb. Es bleibt gross genug, um die Figur zu
   zeigen - aber Versprechen und Knopf stehen jetzt zuerst. */
.bild-hero{ max-width:min(460px, 62vw); margin-bottom:clamp(14px,2vh,26px); }
/* Auch am Laptop: Bei 1280x800 lag der Knopf bei 718px, die Faktenzeile bei
   790 und der Dreiklang bei 858 - zwei Drittel der Aussage fielen unter die
   Kante. Ein kleineres Bild hebt alles um gut hundert Pixel. */
@media (min-width:700px){ .bild-hero{ max-width:min(360px, 60vw); } }
/* DER KNOPF BRAUCHT LUFT, NICHT LAENGE (Marc, 9. September 2026: "wirkt nun
   wieder eng"). Erst hiess er "Ausprobieren - ohne Anmeldung"; der Satz
   fuellte den Knopf bis an beide Kanten und musste dafuer auch noch enger
   gepolstert werden - zweimal in die falsche Richtung. Jetzt sagt der Knopf
   die Handlung in zwei Woertern, behaelt seine volle Polsterung und steht
   frei; der Einwand steht eine Zeile darunter ("ohne Konto"), also genau
   dort, wo man ihn im selben Blick liest. */
.hero-knopf{ margin-top:22px; font-size:clamp(16px,2.4vw,18px); white-space:nowrap; }
.hero-knopf + .unterknopf{ margin-top:14px; line-height:1.6; }
.unterknopf + .dreiklang{ margin-top:26px; margin-bottom:0; }
.bild-gross{ max-width:292px; }
.bild-spot{ max-width:232px; }
/* Ein Bild direkt nach der Testkarte braucht Luft. .bild hat oben bewusst
   keinen Rand (es steht sonst immer als Erstes in einem Abschnitt) - hier
   folgt es aber auf eine 430 Pixel hohe Karte und klebte an deren Unterkante. */
/* Nicht ".probe + .bild": Zwischen Karte und Bild liegt die Konfettiflaeche,
   der direkte Nachbar-Selektor trifft also nicht. Gemessen: 10 Pixel Abstand. */
.probe ~ .bild{ margin-top:clamp(36px,6vh,60px); }
@media (prefers-reduced-motion:no-preference){
  .bild{ animation:bildAuf .5s cubic-bezier(.2,.7,.2,1) both; }
}
@keyframes bildAuf{ from{ opacity:0; transform:translateY(10px) } to{ opacity:1; transform:none } }
h1{ font-size:clamp(30px,6.2vw,48px); font-weight:800; line-height:1.08; margin-bottom:18px; }
/* Seit hier die FRAGE steht und nicht mehr die Produkterklaerung, traegt
   diese Zeile den halben Hero (9. September 2026). In der alten Groesse und
   im Grau einer Beschriftung ging sie unter - sie sah aus wie eine Fussnote
   unter der Ueberschrift. Jetzt zweite Stimme statt Fussnote: groesser, in
   Textfarbe, aber leichter gesetzt als die Ueberschrift darueber. */
.unterclaim{ font-size:clamp(19px,3.4vw,26px); font-weight:700; color:var(--ink);
  max-width:20ch; margin:0 auto 26px; text-wrap:balance; letter-spacing:-.02em; }
.dreiklang{ display:flex; flex-wrap:wrap; justify-content:center; gap:6px 24px; margin-bottom:28px; }
.dreiklang span{ font-size:clamp(17px,3vw,23px); font-weight:800; letter-spacing:-.03em; }
.dreiklang span:nth-child(2){ color:var(--accent); }
.knopf{ display:inline-block; background:var(--marke); color:var(--auf); text-decoration:none;
  font-size:16.5px; font-weight:800; padding:16px 34px; border-radius:16px;
  box-shadow:0 3px 0 var(--accent-satt); }
.unterknopf{ font-size:13px; font-weight:600; color:var(--soft); margin-top:12px; }
/* Ein Wort in der Zeile darf lauter sein als der Rest - es ist das, weshalb
   Eltern bleiben. Kein eigener Kasten, kein Ausrufezeichen: nur heller. */
.unterknopf b{ color:var(--ink); font-weight:800; }

/* Die vier Versprechen: Zeichen in Textfarbe, nicht in Lila. Farbe traegt hier
   nichts bei - sie wuerde nur mit den Szenen konkurrieren. */
/* KEINE KACHELN. Diese vier Punkte stehen immer INNERHALB eines Aufklappers -
   eine Kachel darin waere ein Kasten im Kasten. Ein Haarstrich oben genuegt: er
   trennt die vier Punkte voneinander, ohne jeden einzeln einzurahmen. */
.blick{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px 22px;
  margin:26px 0 4px; text-align:left; }
@media (min-width:640px){ .blick{ grid-template-columns:repeat(4,1fr); gap:22px 26px; } }
.blick div{ padding-top:14px; border-top:1px solid var(--line); }
.blick svg{ width:20px; height:20px; color:var(--accent); margin-bottom:10px; display:block; }
.blick b{ display:block; font-size:14.5px; font-weight:800; margin-bottom:4px; }
.blick span{ display:block; font-size:13px; font-weight:600; color:var(--soft); line-height:1.45; }

/* Ab hier spricht die Seite mit Eltern, nicht mit Kindern. Die Kante macht den
   Wechsel sichtbar, damit sich die beiden Stimmen nicht vermischen. */
/* ---- Harte Fakten ---------------------------------------------------------
   Vier Zahlen nebeneinander, gross. Keine Ueberschrift: Zahlen, die eine
   Ueberschrift brauchen, sind keine harten Fakten. */
.fakten{ padding-top:clamp(34px,6vh,64px); padding-bottom:clamp(34px,6vh,64px);
  border-bottom:1px solid var(--line); }
/* Der Vierer-Rahmen ist geblieben, als hier nur noch ZWEI Zahlen standen -
   die beiden sassen dann in Spalte eins und zwei von vier und klebten links
   (gemessen: Mitten bei 305 und 468 statt 391 und 709). Jetzt zaehlt das
   Raster die Kinder mit, statt eine feste Zahl anzunehmen. */
.zahlen{ display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr);
  gap:26px 18px; text-align:center; }
@media (max-width:520px){ .zahlen{ grid-auto-flow:row; grid-template-columns:1fr 1fr; } }
/* ---- „qraki ist anders" ---------------------------------------------------
   Der Fuenf-Sekunden-Satz, und er steht mit Absicht GENAU HIER: direkt hinter
   den Zahlen. Erst der Beleg (0 Daten, 0 Euro), dann das Versprechen in Worten.
   Andersherum waere es eine Behauptung, der die Zahlen hinterherlaufen.

   BEWUSST OHNE HAKEN-ICONS. Die Elternsektion weiter unten hat eine eigene
   "Keine ..."-Liste (Chats, Likes, Serien) und benutzt dort Haken. Dieselbe
   Bildsprache zweimal laesst zwei verschiedene Aussagen wie eine aussehen -
   die eine handelt von Daten, die andere von Aufmerksamkeit. */
.anders{ background:var(--card); border-bottom:1px solid var(--line);
  padding-top:clamp(40px,7vh,72px); padding-bottom:clamp(40px,7vh,72px); }
.anders-liste{ display:grid; grid-template-columns:1fr 1fr; gap:16px 20px;
  margin:var(--block) 0 0; padding:0; list-style:none; }
@media (min-width:700px){ .anders-liste{ grid-template-columns:repeat(4,1fr); } }
.anders-liste li{ font-family:var(--disp); font-size:clamp(16px,3.4vw,19px);
  font-weight:800; color:var(--ink); line-height:1.3; text-wrap:balance;
  padding-left:14px; border-left:2px solid var(--accent); }
/* Der Schlusssatz ist der eigentliche Satz - die vier Zeilen darueber sagen,
   was qraki NICHT tut, dieser sagt, warum das reicht. */
.anders-schluss{ margin:32px 0 0; font-family:var(--disp);
  font-size:clamp(19px,4.2vw,24px); font-weight:800; color:var(--accent-satt);
  line-height:1.3; text-wrap:balance; }

/* ---- Die harte Liste auf /ueber-qraki ------------------------------------
   Links die Praxis, klein und grau. Rechts immer derselbe Satz, fett.
   EINE Betonung je Zeile - der Kontrast macht den Schlag, nicht der Fettdruck.
   Unter 560px stapeln die beiden Haelften; "Nicht bei uns." rueckt dann unter
   den Satz, den es beantwortet, und bleibt trotzdem die letzte Zeile der Zeile. */
.knall{ list-style:none; margin:var(--block) 0 0; padding:0;
  border-top:1px solid var(--line); }
.knall li{ display:grid; gap:5px 26px; grid-template-columns:1fr;
  padding:15px 0; border-bottom:1px solid var(--line); }
.knall .tut{ font-size:15.5px; font-weight:600; color:var(--soft); line-height:1.5; }
.knall .nein{ font-size:16px; font-weight:800; color:var(--ink); }
@media (min-width:560px){
  .knall li{ grid-template-columns:1fr auto; align-items:baseline; }
  .knall .nein{ text-align:right; white-space:nowrap; }
}
.knall-grund{ margin-top:26px; font-size:15.5px; font-weight:600; color:var(--soft);
  max-width:46ch; line-height:1.6; }
/* Der Schlussakkord. Zweite Zeile in Akzentfarbe, damit der Satz, den Marc
   woertlich vorgegeben hat, allein steht und nicht im Absatz verschwindet. */
.darum{ margin-top:var(--block); max-width:var(--mass);
  font-size:clamp(20px,4vw,27px); font-weight:800;
  letter-spacing:-.03em; line-height:1.28; text-wrap:balance; }
.darum span{ display:block; margin-top:7px; color:var(--accent-satt); }

/* ---- Aufklappen: Ueberschrift und Teaser, alles Weitere einen Tipp entfernt
   (Marc). EIN Mechanismus, ueberall derselbe - vier Sonderloesungen waeren vier
   Dinge zum Lernen.
   <details> statt eigenem Zustand: Es funktioniert ohne JavaScript, ist von Haus
   aus mit der Tastatur bedienbar, und Suchmaschinen sehen den Inhalt trotzdem.
   Die FAQ weiter unten nutzt es schon - so bleibt es eine Sprache. */
.mehr{ margin-top:20px; }
.mehr > summary{ display:inline-flex; align-items:center; gap:9px; cursor:pointer;
  list-style:none; font-size:14.5px; font-weight:800; color:var(--accent); padding:9px 0; }
.mehr > summary::-webkit-details-marker{ display:none; }
.mehr > summary::after{ content:""; width:8px; height:8px; flex-shrink:0;
  border-right:2.4px solid currentColor; border-bottom:2.4px solid currentColor;
  transform:rotate(45deg) translateY(-2px); }
.mehr[open] > summary::after{ transform:rotate(-135deg) translateY(-2px); }
.mehr[open] > summary{ color:var(--soft); }
/* EINGERUECKT (Marc). Aufgeklappt gehoert der Inhalt sichtbar unter seine
   Ueberschrift - ohne Einzug steht er buendig mit dem Fliesstext darueber und
   man sieht nicht mehr, dass er zu dem Aufklapper gehoert.
   KEIN STRICH LINKS: Hier stand kurz einer als Klammer. Marc hat gefragt, was
   der graue Balken sei - und genau das ist die Antwort darauf. Ein Zeichen, das
   man erklaeren muss, erklaert nichts. Der Einzug allein sagt dasselbe leiser.
   Auf sehr schmalen Schirmen faellt er kleiner aus - dort ist jeder Millimeter
   Textbreite mehr wert. */
.mehr-inhalt{ padding:6px 0 2px 14px; }
/* Der erste Absatz bringt oft seinen eigenen Aussenabstand mit (.kette hat bis
   zu 40 px). Der ist fuer den Fliesstext gedacht, in dem der Absatz sonst
   steht - im Aufklapper reisst er ein Loch direkt unter die Ueberschrift. */
.mehr-inhalt > :first-child{ margin-top:0; }
@media (min-width:420px){ .mehr-inhalt{ padding-left:20px; } }
/* Im Chat sitzt der Aufklapper zwischen Sprechblasen, nicht unter einem
   Absatz - er braucht Abstand nach oben und darf nicht am Rand kleben. */
.mehr-chat{ margin:6px 0 0 42px; }
@media (prefers-reduced-motion:no-preference){
  .mehr[open] .mehr-inhalt{ animation:mehrAuf .32s cubic-bezier(.2,.7,.2,1) both; }
}
@keyframes mehrAuf{ from{ opacity:0; transform:translateY(-6px) } to{ opacity:1; transform:none } }

.zahlen b{ display:block; font-size:clamp(34px,7vw,52px); font-weight:800;
  letter-spacing:-.04em; line-height:1; color:var(--accent); font-variant-numeric:tabular-nums; }
/* Der Satz, der qrakis Haltung traegt. Er steht allein, ohne Kasten und ohne
   Ueberschrift - eine Aussage ueber Ruhe darf nicht selbst laut auftreten. */
.ruhe{ margin-top:var(--block); font-size:clamp(17px,2.6vw,21px);
  font-weight:600; color:var(--soft); line-height:1.55; max-width:46ch; }
.ruhe span{ display:inline-block; margin-top:14px; color:var(--ink); font-weight:800; }

/* VIER NULLEN. Sie stehen unter den echten Zahlen und in einer eigenen
   Reihe - eine Null neben "6664 Karten" liest sich als Mangel, vier Nullen
   untereinander lesen sich als Entscheidung. Akzentfarbe wie die Zahlen
   darueber, aber mit Linie darueber: Es ist derselbe Abschnitt, nur die
   andere Haelfte der Aussage. */
.nullen{ display:grid; grid-template-columns:1fr 1fr; gap:22px 18px;
  margin-top:clamp(28px,5vh,44px); padding-top:clamp(24px,4vh,34px);
  border-top:1px solid var(--line); text-align:center; }
@media (min-width:640px){ .nullen{ grid-template-columns:repeat(4,1fr); } }
.nullen b{ display:block; font-size:clamp(30px,6vw,44px); font-weight:800;
  letter-spacing:-.04em; line-height:1; color:var(--ink);
  font-variant-numeric:tabular-nums; }
.nullen span{ display:block; margin-top:8px; font-size:13.5px; font-weight:650;
  color:var(--soft); line-height:1.4; text-wrap:balance; }

.zahlen span{ display:block; margin-top:8px; font-size:13.5px; font-weight:600;
  color:var(--soft); line-height:1.35; text-wrap:balance; }

.eltern-start{ border-top:1px solid var(--line); }

/* `hidden` ist nur eine Browser-Voreinstellung und verliert gegen jede
   Klassenregel. Ohne diese Zeile stehen BEIDE Kartenseiten gleichzeitig da -
   dieselbe Spezifitaetsfalle wie neulich bei .punkte. */

/* DIE KARTE AENDERT BEIM DREHEN IHRE GROESSE NICHT (Marc). Vorder- und
   Rueckseite sind verschieden lang, also wuchs die Karte beim Drehen und ruckte
   die Nachbarkarte mit.
   Geloest wird das NICHT ueber eine feste Mindesthoehe - jeder geratene Wert ist
   auf einem schmalen Schirm zu klein und auf einem breiten zu gross. Stattdessen
   liegen beide Seiten uebereinander in DERSELBEN Rasterzelle: Die Karte ist
   damit immer genau so hoch wie ihre laengere Seite, auf jeder Breite, ohne
   dass irgendwo eine Zahl gepflegt werden muesste.
   Die abgewandte Seite wird `visibility:hidden` statt `display:none` - nur so
   belegt sie weiter Platz. Damit Screenreader sie trotzdem nicht vorlesen,
   traegt sie `aria-hidden`; `visibility:hidden` allein nimmt sie zwar aus dem
   Baum, aber der Zustand soll ausdruecklich im Markup stehen.
   `.gestapelt` setzt das Skript - ohne JavaScript bleibt es bei `hidden` auf der
   Rueckseite, und die Karte zeigt einfach nur ihre Vorderseite. */
/* Die Blockregel unten gilt der UEBERSCHRIFT. Im Fliesstext der Rueckseite
   soll ein <b> eine Hervorhebung sein, kein eigener Absatz. */
/* Die Karte dreht sich, statt an eine andere Stelle der Seite zu springen
   (Marc) - ein Sprung reisst den Faden ab, man weiss nicht mehr, wo man war.
   BEWUSST KEINE echte Doppelseite: Dafuer muesste die Hoehe fuer BEIDE Seiten
   im Voraus feststehen, und die ist bei vier verschieden langen Texten und
   jeder Bildschirmbreite nicht zu raten. Stattdessen dreht die Karte auf 90
   Grad, tauscht dort den Inhalt und dreht zurueck - sie darf dabei ihre Hoehe
   aendern, weil in dem Moment ohnehin nichts zu lesen ist. */
@media (prefers-reduced-motion:no-preference){
}

/* ---- Preis ----------------------------------------------------------------
   Der wichtigste Satz der Seite steht allein. Wer wissen will, was es kostet,
   soll nicht in einer Aufklappliste danach suchen. */
/* Der Schluss ist der eine Ort, an dem die Seite nicht erklaert, sondern etwas
   sagt. Deshalb bekommt er Satz statt Absatz: der Leuchtturm gross und allein,
   darueber ein Strich, der ihn vom Vorhergehenden trennt, darunter die
   Unterschrift leise und gesperrt - wie eine Signatur unter einem Brief. */
.schluss .leuchtturm{ position:relative; margin:clamp(22px,4vh,38px) auto clamp(18px,3vh,30px);
  padding-top:clamp(30px,5vh,46px); max-width:22ch;
  font-size:clamp(23px,4.6vw,34px); font-weight:800; letter-spacing:-.03em;
  line-height:1.25; color:var(--accent); text-wrap:balance; }
/* Ein kurzer Strich statt einer Linie ueber die volle Breite: Er trennt, ohne
   den Abschnitt in zwei Haelften zu schneiden. */
.schluss .leuchtturm::before{ content:""; position:absolute; top:0; left:50%;
  transform:translateX(-50%); width:44px; height:2px; border-radius:2px;
  background:var(--marke); opacity:.55; }
.schluss .leuchtturm span{ display:block; margin-top:clamp(16px,2.6vh,22px);
  font-size:13px; font-weight:700; letter-spacing:.05em; line-height:1.5;
  color:var(--soft); }

.preis{ text-align:center; }
.preis .gross{ font-size:clamp(30px,6.5vw,46px); font-weight:800; letter-spacing:-.035em;
  line-height:1.1; text-wrap:balance; margin:0 0 16px; }
.preis .dazu{ font-size:16.5px; font-weight:600; color:var(--soft); max-width:46ch;
  margin:0 auto 26px; }
.preis-paar{ display:grid; grid-template-columns:1fr; gap:var(--luft); text-align:left; }
@media (min-width:560px){ .preis-paar{ grid-template-columns:1fr 1fr; } }
.preis-paar div{ background:var(--card); border-radius:20px; padding:20px 19px;
  box-shadow:0 3px 0 var(--line); }
.preis-paar b{ display:block; font-size:17px; font-weight:800; margin-bottom:7px; }
.preis-paar span{ font-size:14.5px; font-weight:600; color:var(--soft); line-height:1.45; }
/* Warum der Verkauf kein Zugestaendnis ist, sondern der Grund, warum das
   Gratis funktioniert (Marcs Argument). Steht bewusst NACH dem Preis: erst die
   Zahlen, dann wofuer sie da sind. */
.kette{ margin:var(--block) auto 0; max-width:44ch; font-size:clamp(16px,2.4vw,19px);
  font-weight:600; color:var(--soft); line-height:1.55; }
.kette b{ color:var(--ink); font-weight:800; }

.preis-fuss{ font-size:14px; font-weight:600; color:var(--soft); margin-top:22px;
  max-width:52ch; margin-left:auto; margin-right:auto; }
/* Die Ueberleitung zu den Faellen war der Schlusssatz eines Absatzes, der schon
   zwei andere Sachen erklaerte. Eine Ueberleitung ist eine eigene Aufgabe. */
.faelle-vor{ margin:clamp(26px,4vh,40px) auto 18px; max-width:44ch;
  font-size:clamp(16px,2.4vw,19px); font-weight:800; color:var(--ink); }
.balken{ font-size:11px; font-weight:800; letter-spacing:.11em; text-transform:uppercase;
  color:var(--soft); margin-bottom:11px; }
h2{ font-size:clamp(24px,4vw,34px); font-weight:800; margin-bottom:14px; line-height:1.15; }
.vor{ font-size:16.5px; font-weight:600; color:var(--soft); max-width:52ch; margin-bottom:26px; }

/* Der Wortwechsel bekommt eine Einleitung - sonst faellt man mitten hinein
   und weiss nicht, wer da spricht. */
.chat-kopf{ background:var(--still); border-radius:20px 20px 0 0; padding:18px 20px;
  display:flex; align-items:center; gap:12px; }
.chat-kopf svg{ width:30px; height:32px; color:var(--accent); flex-shrink:0; }
.chat-kopf b{ font-size:15.5px; font-weight:800; display:block; }
.chat-kopf span{ font-size:12.5px; font-weight:600; color:var(--soft); }
.chat{ background:var(--card); border-radius:0 0 20px 20px; padding:20px 18px 22px;
  box-shadow:0 3px 0 var(--line); }
/* Das CSS des Chats stand hier noch, obwohl der Chat selbst laengst raus war -
   .zug, .kuerzel, .sprech, .name, .blase, keine davon im Markup. Am Ende lag
   ausserdem der abgerissene Rest eines @keyframes ( "30%{...} }" ), und DER
   war nicht bloss tot: Eine geschweifte Klammer zu viel beendet den Regelsatz
   an der falschen Stelle. Alles danach bis zur naechsten gueltigen Regel fiel
   aus - .zweispur stand deshalb als display:block da, und die beiden Kaesten
   klebten aneinander. Beim Entfernen von Bausteinen also immer auch das CSS
   mitnehmen und danach die Klammern nachzaehlen. */

/* EIN Abstand fuer alle Kartenraster (Marc). Vorher standen hier vier
   verschiedene Werte - 12, 16, 16, 18 - und nebeneinander sah es aus, als
   waeren manche Kaesten aneinandergeklebt. Der Schlagschatten frisst
   ausserdem 3 px vom sichtbaren Abstand, deshalb ist der Wert grosszuegiger
   als er aussieht. Aendern bitte hier, nicht an den einzelnen Rastern. */
.zweispur{ display:grid; gap:var(--luft); grid-template-columns:1fr; margin-top:var(--block); }
@media (min-width:640px){ .zweispur{ grid-template-columns:1fr 1fr; } }
.spur{ background:var(--card); border-radius:20px; padding:22px 21px;
  box-shadow:0 3px 0 var(--line); }
/* Kein farbiger Rand mehr (Marc): Er hiess "gibt es jetzt schon", stand aber
   an fuenf von sechs Stellen auf Paaren, die beide verfuegbar sind - dort war
   er Dekoration und hat abgelenkt. Der Zustand steht jetzt nur noch in der
   Kopfzeile, also im Wort, wo er hingehoert. */
.spur .kopfzeile{ font-size:11px; font-weight:800; letter-spacing:.11em;
  text-transform:uppercase; color:var(--soft); margin-bottom:8px; }
.spur.jetzt .kopfzeile{ color:var(--accent); }
.spur h3{ font-size:19px; font-weight:800; margin:0 0 12px; }
.spur p{ font-size:15px; font-weight:600; color:var(--soft); }
.spur p + p{ margin-top:11px; }
.spur b{ color:var(--ink); font-weight:800; }
/* Zweimal stand dieselbe Zeile mit demselben Inline-Rand da. Zweimal dasselbe
   ist eine Klasse, die noch keinen Namen hat. */
.knopf-zeile{ margin-top:26px; }
.nachsatz{ font-size:16px; font-weight:700; color:var(--ink); margin-top:var(--absatz);
  max-width:56ch; }
/* Zwei Inline-Stile widersprachen sich hier auf derselben Klasse (24px und 0).
   Dahinter steckt aber eine Regel: Nach einem Ausklapper braucht der Nachsatz
   etwas mehr Luft, als erste Zeile IN einem gar keine. Aufgeschrieben gilt sie
   ueberall - inline galt sie nur dort, wo jemand daran gedacht hat. */
details.mehr + .nachsatz{ margin-top:var(--block); }
.mehr-inhalt > .nachsatz:first-child{ margin-top:0; }
.nachsatz span{ color:var(--soft); font-weight:600; }

/* Der einzige Ort, an dem qraki eine Augenklappe traegt: dort, wo der Gedanke
   erklaert wird. Auf dem App-Icon bleibt sie weg - ein festes Zeichen findet
   man wieder, ein wechselndes nicht, und die Klappe kostet ein Auge, an dem
   die ganze Mimik haengt. */
.kaper{ background:var(--card); border-radius:22px; box-shadow:0 3px 0 var(--line);
  padding:26px 24px; }
.kaper-kopf{ display:flex; align-items:center; gap:14px; margin-bottom:18px; }
.kaper-kopf svg{ width:56px; height:61px; color:var(--accent); flex-shrink:0; }
.kaper-kopf h2{ margin:0; }
/* Unter 480px bleibt neben der Figur zu wenig fuer die Zeile - sie brach
   dreimal um. Dann steht die Figur lieber darueber. */
@media (max-width:479px){ .kaper-kopf{ flex-direction:column; align-items:flex-start; gap:12px; } }
.kaper p + p{ margin-top:14px; }
.kaper p{ font-size:16px; font-weight:600; color:var(--soft); max-width:56ch; }
.kaper b{ color:var(--ink); font-weight:800; }
.kaper .punkt{ font-size:17px; font-weight:800; color:var(--ink); margin-top:20px; }


/* qraki sagt einen Satz dazu - er bittet nicht mehr um Hilfe, er erklaert,
   was Create kann. Das Bild bleibt, der Zweck hat sich verschoben. */
.bitte{ display:flex; gap:11px; align-items:flex-start; margin-bottom:20px; }
.bitte svg{ width:34px; height:37px; color:var(--accent); flex-shrink:0; }
.bitte .blase{ max-width:46ch; }

/* Die Probe: Frage lesen, tippen, Antwort. Das ist die App in klein. */
.probe{ background:var(--card); border-radius:24px; box-shadow:0 3px 0 var(--line);
  padding:26px 24px; width:100%; max-width:360px; min-height:430px; margin:0 auto;
  display:flex; flex-direction:column; text-align:left; border:none; font:inherit;
  color:inherit; cursor:pointer; }
.probe:hover{ box-shadow:0 3px 0 var(--accent); }
.probe:focus-visible{ outline:3px solid var(--accent); outline-offset:3px; }
.probe .marke-zeile{ font-size:10.5px; font-weight:800; letter-spacing:.11em;
  text-transform:uppercase; color:var(--soft); margin-bottom:11px; }
.probe .marke-zeile span{ display:none; }
.probe[data-stufe="0"] .marke-zeile span:nth-child(1),
.probe[data-stufe="1"] .marke-zeile span:nth-child(2),
.probe[data-stufe="2"] .marke-zeile span:nth-child(3),
.probe[data-stufe="3"] .marke-zeile span:nth-child(4),
.probe[data-stufe="4"] .marke-zeile span:nth-child(5),
.probe[data-stufe="5"] .marke-zeile span:nth-child(5){ display:inline; }
/* WIE IN DER APP: Die Karte DREHT UM, sie waechst nicht. Vorher stand die
   Antwort unter der Frage, beide gleichzeitig - das ist kein Umdrehen, das ist
   eine Liste, und es verraet die Antwort, waehrend man noch ueberlegt. Jetzt
   nimmt die Antwort den Platz der Frage ein, in derselben Groesse, und die
   Zeile oben sagt, welche Seite man sieht.
   Die Mitte traegt beide und zentriert sie senkrecht - genau wie auf dem
   Handy, wo die Frage nicht oben klebt, sondern in der Karte steht. */
.probe .mitte{ flex:1; min-height:0; display:flex; flex-direction:column;
  justify-content:center; }
.probe .frage,.probe .antwort{ font-size:clamp(23px,4.4vw,30px); font-weight:800;
  line-height:1.2; letter-spacing:-.02em; }
.probe .hinweis{ font-size:13px; font-weight:800; color:var(--accent); margin-top:auto; padding-top:18px; }
.probe .hinweis span{ display:none; }
.probe[data-stufe="0"] .hinweis span:nth-child(1),
.probe[data-stufe="2"] .hinweis span:nth-child(2){ display:inline; }
/* DIE KARTE DREHT SICH WIRKLICH. Vorher wechselte nur der Inhalt - das liest
   sich wie ein Textwechsel, nicht wie eine Karte. Dieselbe Mechanik wie in der
   App: auf halbem Weg (90 Grad) steht die Karte hochkant, dort wird getauscht,
   dann dreht sie zurueck. Der Trick daran ist, dass die Karte in diesem Moment
   ihre Hoehe aendern darf - es ist ohnehin nichts zu lesen. */
.probe{ transform-style:preserve-3d; }
@media (prefers-reduced-motion:no-preference){
  .probe{ transition:transform .19s ease-in, box-shadow .2s; }
  .probe.dreht{ transform:rotateY(90deg); }
}

/* „Mehr?“ mittig unter der Antwort, gleiche Form wie der Knopf in der App. */
.probe .mehr-marke{ display:none; align-self:center; margin-top:18px;
  color:var(--accent); font-size:13px; font-weight:800; letter-spacing:.02em;
  padding:9px 16px; border-radius:999px; box-shadow:0 2px 0 var(--line); }
/* Auf BEIDEN Stufen sichtbar und ohne Animation: „Mehr?“ ist der feste Punkt,
   an dem es weitergeht - es soll nicht bei jedem Schritt neu erscheinen. */
.probe[data-stufe="1"] .mehr-marke,
.probe[data-stufe="2"] .mehr-marke{ display:inline-flex; }

/* qraki meldet sich, sobald die erste Karte umgedreht ist - in derselben Form
   wie die Begruessung auf dem Startbildschirm der App: ein Satz in
   Anfuehrungszeichen, gross, ohne Kaestchen. */
.probe .qraki-sagt{ display:none; margin-top:20px; text-align:center;
  font-size:17px; font-weight:800; line-height:1.25; letter-spacing:-.015em;
  color:var(--accent); text-wrap:balance; }
.probe[data-stufe="1"] .qraki-sagt,
.probe[data-stufe="2"] .qraki-sagt{ display:block; }
/* ... aber nicht die QUIZ-Meldung: Sie traegt beide Klassen (.qraki-sagt fuer
   die Optik, .qraki-quiz fuer die Stufe) und wuerde von der Regel darueber
   mitgenommen. Sie gehoert allein auf Stufe 4. */
.probe[data-stufe="1"] .qraki-quiz,
.probe[data-stufe="2"] .qraki-quiz{ display:none; }
/* Der Balken blinkt nur, solange getippt wird. */
.probe .qraki-sagt.tippt::after{ content:"▌"; margin-left:1px; opacity:.85;
  animation:blinken .6s steps(1,end) infinite; }
@keyframes blinken{ 50%{ opacity:0 } }

/* Konfetti ueber die ganze Seite - Bauart aus der App uebernommen. */
.konfetti{ position:fixed; inset:0; z-index:70; pointer-events:none; overflow:hidden; }
.konfetti i{ position:absolute; top:-8vh; border-radius:1px; opacity:.95;
  animation-name:regnen; animation-timing-function:linear;
  animation-iteration-count:1; animation-fill-mode:forwards; }
.konfetti i.f0{ background:var(--marke); }
.konfetti i.f1{ background:color-mix(in srgb,var(--accent) 55%,var(--paper)); }
.konfetti i.f2{ background:var(--ink); }
.konfetti i.f3{ background:var(--yellow); }
@keyframes regnen{
  0%{ transform:translateY(0) rotate(0) }
  100%{ transform:translateY(118vh) rotate(var(--dreh)) }
}
@media (prefers-reduced-motion:reduce){ .konfetti{ display:none; } }

.probe .antwort{ display:none; }
.probe[data-stufe="1"] .frage,
.probe[data-stufe="2"] .frage{ display:none; }
.probe[data-stufe="1"] .antwort,
.probe[data-stufe="2"] .antwort{ display:block; animation:auf .26s ease both; }
/* Wie in der App: Die dritte Seite scrollt IN der Karte, statt sie in die
   Laenge zu ziehen. Sonst ist die Karte auf der letzten Stufe kein Handy
   mehr - und genau das soll sie zeigen. */
.probe .dritte{ display:none; max-height:250px; overflow-y:auto; overscroll-behavior:contain; }
.probe[data-stufe="2"] .dritte{ display:block; animation:auf .26s ease both; }
.probe .dritte{ margin-top:16px; padding:15px 16px; border-radius:14px;
  background:color-mix(in srgb,var(--accent) 9%,var(--card));
  box-shadow:0 0 0 1.5px color-mix(in srgb,var(--accent) 34%,transparent); }
.probe .dritte-titel{ font-size:11px; font-weight:800; letter-spacing:.11em;
  text-transform:uppercase; color:var(--accent); margin-bottom:6px; }
.probe .dritte p{ font-size:14.5px; font-weight:600; color:var(--soft); }

@keyframes auf{ from{ opacity:0; transform:translateY(6px) } to{ opacity:1; transform:none } }
/* ---- Quizstufe (3 bis 5) --------------------------------------------------
   Nach der dritten Seite kommt eine echte Quizfrage, wie in der App: Frage auf
   der Karte, vier Knoepfe darunter. Die Knoepfe stehen ausserhalb der Karte,
   weil die Karte selbst ein <button> ist - ein Knopf im Knopf ist ungueltig und
   mit der Tastatur nicht bedienbar.

   DREI Stufen, nicht zwei. Stufe 4 zeigt die Antwort mit der Marke "Mehr?",
   die dritte Seite bleibt ZU; erst Stufe 5 klappt sie auf. Vorher stand beides
   auf Stufe 4 - die Aufforderung "Mehr?" neben dem bereits Ausgeklappten
   (Marc). Es ist derselbe Zweischritt wie bei der Schneckenkarte auf Stufe 1
   und 2, und genau so laeuft es auch in der App. */
.probe .frage-quiz,.probe .antwort-quiz,.probe .qraki-quiz,.probe .dritte-quiz{ display:none; }
.probe .frage-quiz,.probe .antwort-quiz{ font-size:clamp(23px,4.4vw,30px); font-weight:800;
  line-height:1.16; letter-spacing:-.01em; text-wrap:balance; }

/* Auf allen Quizstufen verschwindet, was zur Schneckenkarte gehoert. */
.probe[data-stufe="3"] .frage,.probe[data-stufe="4"] .frage,.probe[data-stufe="5"] .frage,
.probe[data-stufe="3"] .antwort,.probe[data-stufe="4"] .antwort,.probe[data-stufe="5"] .antwort,
.probe[data-stufe="3"] .qraki-sagt:not(.qraki-quiz),
.probe[data-stufe="4"] .qraki-sagt:not(.qraki-quiz),
.probe[data-stufe="5"] .qraki-sagt:not(.qraki-quiz){ display:none; }

/* Stufe 3: nur die Frage. Kein "Mehr?", nichts aufgeklappt. */
.probe[data-stufe="3"] .frage-quiz{ display:block; animation:auf .26s ease both; }
.probe[data-stufe="3"] .mehr-marke{ display:none; }

/* Stufe 4 und 5: die Antwort, qrakis Satz und die Marke "Mehr?". */
.probe[data-stufe="4"] .antwort-quiz,
.probe[data-stufe="5"] .antwort-quiz{ display:block; animation:auf .26s ease both; }
.probe[data-stufe="4"] .qraki-quiz,
.probe[data-stufe="5"] .qraki-quiz{ display:block; }
.probe[data-stufe="4"] .mehr-marke,
.probe[data-stufe="5"] .mehr-marke{ display:inline-flex; }

/* Erst Stufe 5 klappt auf - und zeigt dort NUR den Giraffen-Absatz, nicht den
   der Schnecke. Stufe 4 laesst die dritte Seite zu; das erledigt die
   Grundregel .probe .dritte{display:none}, hier wird sie NICHT ueberschrieben. */
.probe[data-stufe="5"] .dritte{ display:block; animation:auf .26s ease both; }
.probe[data-stufe="5"] .dritte p:not(.dritte-quiz){ display:none; }
.probe[data-stufe="5"] .dritte-quiz{ display:block; }
/* Umgekehrt: Auf Stufe 2 darf der Giraffen-Absatz nicht mitkommen. */
.probe[data-stufe="2"] .dritte-quiz{ display:none; }

.probe[data-stufe="3"] .hinweis span:nth-child(3),
.probe[data-stufe="5"] .hinweis span:nth-child(4){ display:inline; }

/* Die Auswahl. Zwei Spalten wie in der App, damit vier Antworten sauber
   aufgehen - eine einzelne halbbreite Zeile saehe aus wie ein Fehler. */
/* Die Auswahl fluchtet mit der Karte darueber. Sie stand vorher ueber die
   volle Spaltenbreite, waehrend die Karte bei 360px endet - am Handy fiel es
   nicht auf, weil dort beide gleich breit sind (Marc, 9. September 2026). */
.quiz-wahl{ display:none; grid-template-columns:1fr 1fr; gap:10px; margin-top:16px;
  width:100%; max-width:360px; margin-left:auto; margin-right:auto; }
.probe[data-stufe="3"] ~ .quiz-wahl,
.probe[data-stufe="4"] ~ .quiz-wahl,
.probe[data-stufe="5"] ~ .quiz-wahl{ display:grid; animation:auf .26s ease both; }
.quiz-knopf{ display:flex; align-items:center; gap:10px; text-align:left;
  background:var(--card); color:var(--ink); border:none; border-radius:14px;
  padding:14px 14px; font-family:var(--disp); font-size:16px; font-weight:800;
  cursor:pointer; box-shadow:0 2px 0 var(--line); min-height:52px; }
.quiz-knopf:hover:not(:disabled){ box-shadow:0 2px 0 var(--accent); }
.quiz-knopf:focus-visible{ outline:3px solid var(--accent); outline-offset:3px; }
.quiz-b{ flex:0 0 24px; height:24px; display:grid; place-items:center; border-radius:7px;
  background:var(--still); color:var(--soft); font-size:12px; font-weight:800; }
/* Nach der Wahl: die richtige Antwort wird gruen markiert, die falsch gewaehlte
   bleibt sichtbar - man soll sehen, was man geraten hat, nicht nur was stimmt. */
.quiz-knopf:disabled{ cursor:default; opacity:.55; }
.quiz-knopf.richtig{ opacity:1; background:color-mix(in srgb,var(--accent) 22%,var(--card));
  box-shadow:0 2px 0 var(--accent); }
.quiz-knopf.richtig .quiz-b{ background:var(--marke); color:var(--auf); }
.quiz-knopf.daneben{ opacity:1; box-shadow:0 2px 0 var(--soft); }
@media (prefers-reduced-motion:reduce){
  .probe .frage-quiz,.probe .antwort-quiz,.quiz-wahl{ animation:none }
}

@media (prefers-reduced-motion:reduce){ .probe .antwort,.probe .dritte{ animation:none } }

/* ---- Die Szenen zum Wischen -----------------------------------------------
   AUF JEDER BREITE, NICHT NUR AM TELEFON (Marc). Vorher war es am Rechner ein
   Raster mit zwei Spalten - die Begruendung war, dort gebe es keinen Finger.
   Sie traegt nicht: Trackpads wischen seitlich, Mausraeder scrollen mit
   Umschalt, und die Punkte darunter sind anklickbar. Vor allem aber SOLL hier
   immer nur ein Bild stehen. Vier kleine Bilder nebeneinander sind vier kleine
   Bilder; eines gross ist eine Szene.

   Der negative Rand hebt die 22 px von .bahn auf, die Spur selbst hat KEINEN
   Innenabstand - sonst waere jede Szene um 44 px schmaler als ihr Platz, und
   vom Nachbarn lugte links und rechts ein Rest herein. Genau der ist gemeint,
   wenn nur eine Szene zu sehen sein soll.
   Der Abstand wandert dafuer nach INNEN: Das Bild laeuft von Kante zu Kante
   (es bringt seinen eigenen Grund mit, ein Anschnitt schadet ihm nicht),
   Ueberschrift und Text stehen eingerueckt wie der restliche Fliesstext. */
.faelle{ display:flex; gap:0;
  overflow-x:auto; scroll-snap-type:x mandatory; overscroll-behavior-x:contain;
  margin:0 -22px; padding:0 0 4px; scrollbar-width:none;
  -webkit-overflow-scrolling:touch; }
.faelle::-webkit-scrollbar{ display:none; }
.fall{ flex:0 0 100%; scroll-snap-align:center; }
.fall h3, .fall p{ padding:0 22px; }
.faelle:focus-visible{ outline:3px solid var(--accent); outline-offset:4px; border-radius:8px; }
.punkte{ display:flex; justify-content:center; gap:10px; margin-top:20px; }
.punkte button{ width:10px; height:10px; padding:0; border:none; border-radius:50%;
  background:var(--line); cursor:pointer; }
.punkte button[aria-current="true"]{ background:var(--marke); width:22px; border-radius:4px; }
.punkte button:focus-visible{ outline:2px solid var(--accent); outline-offset:4px; }
@media (prefers-reduced-motion:no-preference){
  .punkte button{ transition:background .2s, width .2s; }
}
/* Die vier Szenen waren bis eben gezeichnete SVGs. Jetzt sind es Bilder, die
   ihren Grund selbst mitbringen - also kein border-radius mehr: Ein runder
   Ausschnitt wuerde genau die Kante zeichnen, die es nicht geben soll. */
.fall-bild{ width:100%; height:auto; display:block; }
.fall h3{ font-size:17px; font-weight:800; margin:14px 0 4px; }
.fall p{ font-size:14.5px; font-weight:600; color:var(--soft); }

.tab{ width:100%; border-collapse:collapse; font-size:15.5px; }
/* Zwei Fehler steckten hier uebereinander und machten die Kopfzeile unlesbar:
   Die Ueberschriften standen LINKS, ihre Zahlen aber RECHTS - der Kopf stand
   also nicht ueber seiner Spalte. Und ohne waagrechten Abstand stiessen
   "NEUE VOKABELN" und "SITZEN NACH 30 TAGEN" direkt aneinander; zusammen
   ergaben die drei Koepfe auf 346 px genau 345 px, also null Luft.
   Jetzt richten sich Kopf und Zelle gleich aus, und 14 px Abstand trennen die
   Spalten - reicht der Platz nicht, bricht die Ueberschrift um. */
.tab th{ font-size:11px; font-weight:800; letter-spacing:.09em; line-height:1.25;
  text-transform:uppercase; color:var(--soft); padding:0 0 12px;
  vertical-align:bottom; text-align:left; }
.tab th:not(:first-child), .tab td:not(:first-child){ text-align:right; padding-left:14px; }
.tab td{ padding:15px 0; border-top:1px solid var(--line); font-weight:700; }
.tab td:first-child{ font-weight:800; }
.tab td:not(:first-child){ font-variant-numeric:tabular-nums; }
.tab .stark{ color:var(--accent); font-weight:800; }
.fussnote{ font-size:12.5px; font-weight:600; color:var(--soft); margin-top:16px; line-height:1.5; }

/* NUR DIE FAQ IST EIN KASTEN. Vorher stand hier `details{...}` ohne Klasse, und
   damit bekam JEDER Aufklapper der Seite diese Huelle - auch die acht `.mehr`,
   die als schlichte Zeile gedacht sind. Folge: Kaesten in Kaesten mit doppelten
   Raendern, und `overflow:hidden` schnitt die inneren Kacheln unten ab, weil der
   Inhalt keinen unteren Innenabstand hat. Ein nackter Element-Selektor greift
   weiter, als er soll - beim naechsten Aufklapper waere derselbe Fehler zurueck. */
details.frage{ background:var(--card); border-radius:15px; box-shadow:0 2px 0 var(--line);
  margin-bottom:10px; overflow:hidden; }
details.frage > summary{ cursor:pointer; padding:16px 18px; font-size:15.5px; font-weight:800;
  list-style:none; display:flex; justify-content:space-between; gap:12px; align-items:center; }
details.frage > summary::-webkit-details-marker{ display:none; }
details.frage > summary::after{ content:"+"; color:var(--accent); font-size:19px;
  font-weight:800; flex-shrink:0; }
details.frage[open] > summary::after{ content:"\2013"; }
details.frage p{ padding:0 18px 17px; font-size:14.5px; font-weight:600; color:var(--soft); }
details.frage p + p{ padding-top:0; margin-top:-6px; }

.warum-wir{ display:grid; gap:var(--luft); grid-template-columns:1fr; }
@media (min-width:640px){ .warum-wir{ grid-template-columns:1fr 1fr 1fr; } }
.wk{ background:var(--card); border-radius:18px; padding:22px 20px; box-shadow:0 3px 0 var(--line); }
.wk .nr{ font-size:12px; font-weight:800; color:var(--accent); letter-spacing:.06em; margin-bottom:8px; }
.wk h3{ font-size:16.5px; font-weight:800; margin-bottom:6px; }
.wk p{ font-size:14.5px; font-weight:600; color:var(--soft); }

.schluss{ text-align:center; }
/* Der Schluss wird als Ganzes gesetzt, nicht Absatz fuer Absatz: eine Spalte mit
   festen Abstaenden statt Aussenraendern, die sich gegenseitig verschlucken. */
.schluss .bahn{ display:flex; flex-direction:column; align-items:center;
  gap:clamp(9px,1.4vh,13px); }
.schluss h2{ margin-bottom:clamp(6px,1vh,10px); }
/* KEIN harter Umbruch zwischen den beiden Saetzen. Er stand vorher als <br> im
   Text und zwang den ersten Satz in einen schiefen Zweizeiler, weil er auf einem
   Handy ohnehin nicht in eine Zeile passt. Zwei Absaetze, jeder fuer sich
   ausbalanciert - das haelt auf jeder Breite. */
.schluss p{ font-size:clamp(17px,2.6vw,19px); font-weight:600; color:var(--soft);
  max-width:26ch; margin:0; line-height:1.55; text-wrap:balance; }
.schluss .knopf{ margin-top:clamp(4px,1vh,10px); }
.fuss-links{ margin-top:10px; }
.fuss-links a{ margin-right:18px; font-weight:700; }
/* Menue oben rechts. Es bleibt stehen, wie in der App - wer auf einer langen
   Seite etwas sucht, soll nicht erst zurueckscrollen muessen. */
/* Das Menue hing per position:fixed am FENSTERrand - also weit rechts neben
   der Inhaltsspalte, waehrend Logo und Knopf in ihr standen. Jetzt sitzt es in
   der Kopfleiste, und damit auf derselben Fluchtlinie wie alles andere. */
.menue{ position:relative; }
.menue > summary{
  list-style:none; width:44px; height:44px; border-radius:14px; cursor:pointer;
  display:grid; place-items:center; color:var(--ink);
  background:color-mix(in srgb, var(--paper) 82%, transparent);
  border:1px solid var(--line); backdrop-filter:blur(10px);
}
.menue > summary::-webkit-details-marker{ display:none; }
.menue > summary:hover{ color:var(--accent); border-color:var(--accent); }
.menue[open] > summary{ color:var(--accent); }
.menue nav{
  position:absolute; right:0; top:calc(100% + 10px); width:min(280px, calc(100vw - 28px));
  background:var(--card); border:1px solid var(--line); border-radius:16px;
  padding:8px; display:flex; flex-direction:column; gap:2px;
  box-shadow:0 20px 50px rgba(0,0,0,.45);
}
/* Icons wie in der App: Das Menue dort traegt zu jedem Eintrag eines, das
   Menue hier trug keins - dieselbe Sache, zwei Handschriften. Gleiche Bauart
   wie der Burger daneben: 20er Raster, Strich 1.8, runde Enden. */
/* Die Erklaerzeile unter jedem Eintrag ist raus: Bei zehn Eintraegen war das
   Menue eine Textwand, obwohl ein Menue eine LISTE sein soll, die man mit
   einem Blick ueberfliegt. "Create", "qraki Party", "Fuer Eltern" erklaeren
   sich selbst - und was sich nicht selbst erklaert, gehoert umbenannt und
   nicht untertitelt. */
.menue nav a{
  display:flex; align-items:center; gap:11px; padding:10px 13px; border-radius:11px;
  text-decoration:none; color:var(--ink);
}
.menue nav a > svg{ flex:0 0 19px; color:var(--accent); }
@media (hover:hover){ .menue nav a:hover{ background:var(--still, rgba(255,255,255,.06)); } }
.menue nav a b{ font-size:15px; font-weight:800; letter-spacing:-.01em; }
.menue nav a span{ font-size:12.5px; font-weight:650; color:var(--soft); }
@media (prefers-reduced-motion: reduce){ .menue nav{ transition:none; } }

/* Mehr Luft oben, seit der Schluss-CTA ueber die Kante haengt: Mit den
   alten 34 Punkten lag die Illustration auf der Zeile 'Qraki - Lernkarten
   ohne Konto...' und schnitt sie ab. Der Text ist mittig, das Bild rechts -
   sie horizontal auseinanderzuschieben haette nur bei breiten Fenstern
   geholfen, bei 1200 stossen sie wieder zusammen. */
footer{ padding:68px 0 48px; text-align:center; border-top:1px solid var(--line); }
footer p{ font-size:13px; font-weight:600; color:var(--soft); }
.mitte{ text-align:center; }


/* ---- Shop: das Deck-Cover ---------------------------------------------------
   Das Produkt ist ein Stapel Karten - also ist das Cover eine KARTE, nicht ein
   Buchruecken und nicht ein Kachelbild. Zwei Blaetter liegen sichtbar dahinter,
   damit man den Stapel sieht statt einer einzelnen Karte.

   Die Kundenfarbe steckt in EINER Variablen je Cover (--ton). Alles andere -
   Form, Radius, Typografie, Abstaende - gehoert qraki und aendert sich nie.
   Das ist der ganze Trick an "Kundenbezug im qraki-Stil": Der Kunde faerbt,
   er gestaltet nicht. Sonst steht im Regal irgendwann alles nebeneinander und
   nichts sieht mehr nach uns aus.

   Die drei Toene sind nicht frei erfunden: Violett ist die Hausfarbe, Gelb und
   Blau kommen aus der Groessen-Zeichnung in der App (Sonne und Erde). Sie sind
   also schon Teil dieser Welt. */
.regal{ display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr));
  gap:clamp(18px,3vw,28px); margin-top:var(--block); }
.cover{ --ton:var(--accent); position:relative; }

/* DAS COVER IST DER KNOPF (Marc, 5. September 2026: "ich finde den Holen
   Button doof").
   Er war nicht nur unscheinbar, er war unwahr: "Holen" verspricht, dass das
   Deck beim Antippen kommt - es kommt aber eine Seite, die drei Wege in die
   App zeigt. Jetzt traegt die ganze Kachel den Verweis, so wie in jedem Buch-
   und App-Laden: Man tippt an, was man ansieht. Groesste Trefferflaeche, kein
   Wort, das etwas Falsches verspricht, und die Cover bekommen die Buehne.
   Der Link umschliesst Blatt UND Kartenzahl - beides gehoert zum Deck, und
   ein Link, der bei der Kachelkante aufhoert, laesst die Zeile darunter tot
   wirken. */
/* KEIN transform auf dem Link mehr. Es promoviert jede der sechs Kacheln zu
   einer eigenen Zeichenebene - genau die Ebenen, die Safari unter Druck
   wegwirft. Die Rueckmeldung beim Beruehren macht jetzt der Schatten allein;
   das sieht praktisch gleich aus und kostet keine Ebene. */
.cover-link{ display:block; text-decoration:none; color:inherit;
  border-radius:20px; }
.cover-link:hover .cover-blatt{ box-shadow:0 12px 30px rgba(0,0,0,.5); }
.cover-link:active .cover-blatt{ box-shadow:0 3px 10px rgba(0,0,0,.45); }
/* Tastaturbedienung: Der Rahmen liegt um die GANZE Kachel, nicht nur um das
   Bild - sonst sieht man beim Durchtabben nicht, was gerade dran ist. */
.cover-link:focus-visible{ outline:2.5px solid var(--accent); outline-offset:4px; }

.cover-link .cover-fuss{ margin-top:9px; }
/* Die zwei Blaetter dahinter. Kein Zeiger-Ereignis, sie sind reine Andeutung. */
.cover::before,.cover::after{ content:""; position:absolute;
  left:0; right:0; top:0; aspect-ratio:3/4;
  border-radius:18px; background:var(--still); border:1px solid var(--line);
  pointer-events:none; }
.cover::before{ transform:rotate(-2.5deg) translateY(4px); }
.cover::after{ transform:rotate(1.5deg) translateY(2px); }
/* z-index:1 ist NICHT Kosmetik: .cover::after ist das zweite gedrehte Blatt, und
   ein ::after wird NACH den Kindern gemalt - ohne diese Zeile liegt das Blatt
   ueber dem Cover, und vom Farbbogen sieht man nur einen Streifen am Rand.
   Die Messung zeigte den Kreis brav mit 216x216 an der richtigen Stelle; er war
   nur verdeckt. Zahlen allein haetten den Fehler nie gefunden. */
.cover-blatt{ position:relative; z-index:1; aspect-ratio:3/4; border-radius:18px;
  background:var(--card); border:1px solid var(--line);
  box-shadow:0 6px 18px rgba(0,0,0,.35);
  padding:16px 15px; display:flex; flex-direction:column; overflow:hidden; }
/* Der Farbbogen unten - dieselbe Geste wie die Sonne auf der Karte in der App:
   randlos, aus dem Blatt hinauslaufend, nie ein brav zentriertes Bildchen. */
/* Die Illustration liegt als Bild dahinter. Sie bringt ihren eigenen Grund mit
   (dasselbe --card wie die Karte), deshalb kein zweiter Hintergrund und keine
   Transparenz - das erspart Aerger beim Export und beim Rastern.
   Wo noch kein Bild hinterlegt ist, bleibt der Farbbogen als Platzhalter. */
.cover-blatt::after{ content:""; position:absolute; left:-20%; right:-20%;
  bottom:-58%; aspect-ratio:1; border-radius:50%; background:var(--ton); }
.cover-blatt.mit-bild::after{ content:none; }
/* EIN ECHTES <img>, KEIN HINTERGRUNDBILD (Marc, 7. September 2026: "beim
   Scrollen wird die Karte schwarz und bleibt dann auch schwarz").
   Das Blatt traegt overflow:hidden, border-radius und box-shadow; darin lag
   ein absolut positioniertes Div mit background-image. Auf iOS Safari ist das
   eine bekannte Falle: Solche zusammengesetzten Ebenen werden bei
   Speicherdruck verworfen - etwa beim Tab-Wechsel - und nicht neu gezeichnet.
   Uebrig bleibt ein leeres dunkles Rechteck, waehrend alles ausserhalb des
   Blattes stehenbleibt. Genau das Bild.
   Ein <img> laeuft nicht ueber diesen Weg. Nebenbei bringt es loading="lazy"
   und feste Masse mit, also kein Springen beim Laden. */
.cover-bild-flaeche{ position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; object-position:center; display:block; }
.cover-marke{ position:relative; z-index:1; font-size:10px; font-weight:800;
  letter-spacing:.09em; text-transform:uppercase; color:var(--ton); }
/* Der Name behaelt seine eigene Schreibung, auch in einer Versalzeile: Dort
   steht "Qraki ORIGINAL" statt "QRAKI ORIGINAL". Das ist keine Ausnahme von
   der Regel, sondern das Erkennungszeichen - in einer Zeile aus
   Grossbuchstaben faellt genau ein Wort auf, unseres.
   Der Klassenname stammt aus der Zeit, als der Name durchgehend klein
   geschrieben wurde (bis 5. September 2026). Er bleibt, weil er an ueber
   einem Dutzend Stellen im Markup steht - was er TUT, ist unveraendert:
   text-transform aushebeln. */
.klein-marke{ text-transform:none; letter-spacing:.02em; }
.cover-titel{ position:relative; z-index:1; margin-top:8px; font-family:var(--disp);
  font-weight:800; font-size:clamp(15px,4vw,20px); line-height:1.14;
  letter-spacing:-.01em; color:var(--ink); text-wrap:balance; }
/* Die Kartenzahl steht UNTER dem Cover, nicht darauf. Auf dem Blatt lag sie
   bei laengeren Titeln mitten in der Illustration und war unlesbar - und auf
   einem Buchdeckel steht auch keine Seitenzahl (Marc, 4. September). */
.cover-fuss{ margin-top:9px; font-size:11.5px; font-weight:700; color:var(--soft);
  font-variant-numeric:tabular-nums; }
.cover-bild{ position:absolute; right:9px; bottom:7px; width:52px; height:52px;
  z-index:1; opacity:.92; }
.cover-bild svg{ width:100%; height:100%; display:block; }
/* Die Widmung. Klein, unten, in der Farbe des Decks - sie soll dastehen wie
   eine Zueignung vorne im Buch, nicht wie ein Etikett. Wer sie nicht sucht,
   liest darueber hinweg; wer gemeint ist, findet sie sofort. */
.cover-widmung{ position:relative; z-index:1; margin-top:4px; font-size:11px;
  font-weight:700; font-style:italic; color:var(--ton); opacity:.95; }
/* Unverkaeuflich: Die Beispiele duerfen nie wie bestellbare Ware wirken. */
.regal-hinweis{ margin-top:14px; font-size:12.5px; font-weight:600;
  color:var(--soft); }


/* ---- Die Bibliothek auf der Startseite --------------------------------------
   Der groesste Aktivposten stand bisher nur als Zahl da ("2281 Karten"). Ein
   Vater, der wissen will, ob Latein dabei ist, konnte es nirgends nachsehen.
   Diese Liste wird von zaehle_katalog.js ERZEUGT - von Hand gepflegt waere sie
   in drei Wochen falsch, genau wie damals die 1025 Karten. */
.faecher{ display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr));
  gap:10px; margin-top:var(--block); }
.fach{ background:var(--card); border:1px solid var(--line); border-radius:14px;
  padding:13px 15px; }
.fach b{ display:block; font-family:var(--disp); font-size:16px; font-weight:800;
  color:var(--ink); line-height:1.2; }
.fach span{ display:block; margin-top:3px; font-size:12.5px; font-weight:600;
  color:var(--soft); font-variant-numeric:tabular-nums; }


/* Der Holen-Knopf unter einem Cover. Bewusst schmal: Das Cover ist die Ware,
   der Knopf nur der Weg dorthin - er darf es nicht ueberstrahlen. */
.knopf-klein{ display:block; text-align:center; background:var(--card); color:var(--ink);
  border-radius:11px; padding:9px 8px; font-family:var(--disp); font-size:13.5px;
  font-weight:800; text-decoration:none; box-shadow:0 2px 0 var(--line); }
.knopf-klein:hover{ box-shadow:0 2px 0 var(--accent); }

/* ---- Abhol-Seite (/d/<deck>) --------------------------------------------
   Der Uebergang von "ich moechte das Deck" zu "das Deck liegt auf meinem
   Geraet". Drei Wege, weil man nie weiss, wo jemand gerade steht: Knopf
   (gleiches Geraet), QR (anderes Geraet), Zeile zum Abtippen (keine Kamera).
   Sie stehen bewusst untereinander statt als Auswahl nebeneinander - wer den
   ersten nehmen kann, liest die anderen gar nicht erst. */
.abhol{ display:grid; gap:clamp(20px,4vw,34px); grid-template-columns:1fr;
  align-items:center; }
@media (min-width:640px){ .abhol{ grid-template-columns:minmax(0,220px) 1fr; } }

/* Das Cover als HINTERGRUND, nicht als <img>. Der Grund ist der Fehlerfall:
   Fehlt die Bilddatei, zeigt ein <img> das kaputte Symbol des Browsers - ein
   Hintergrundbild zeigt einfach die Deckfarbe darunter. Ohne ein Zeilchen
   Skript, das die Website ohnehin nicht ausfuehren duerfte. */
/* Auf dem Handy gedeckelt: Ungebremst nimmt ein 3:4-Cover ueber die volle
   Breite 441 von 812 Pixeln - mehr als der halbe Schirm, bevor der Name des
   Decks ueberhaupt zu lesen ist. Der Knopf soll ohne Scrollen erreichbar
   bleiben. Auf breiten Schirmen begrenzt schon die Spalte (220px). */
/* Auch hier ein echtes <img> statt eines Hintergrundbildes - derselbe Grund
   wie bei .cover-bild-flaeche. Die Farbe bleibt als Grund darunter: Faellt die
   Bilddatei aus, sieht man die Deckfarbe statt eines kaputten Symbols, denn
   das alt-Attribut traegt hier den Cover-Namen. */
.abhol-cover{ position:relative; overflow:hidden;
  aspect-ratio:3/4; max-width:min(100%,236px); border-radius:18px;
  background-color:var(--ton);
  box-shadow:0 14px 34px rgba(0,0,0,.42); }
.abhol-cover img{ position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; object-position:center; display:block; }

.abhol-marke{ font-size:11.5px; font-weight:800; letter-spacing:.11em;
  text-transform:uppercase; color:var(--soft); margin-bottom:7px; }
.abhol h1{ font-size:clamp(27px,5.2vw,38px); font-weight:800; }
.abhol-umfang{ font-size:14.5px; font-weight:700; color:var(--soft); margin-top:6px;
  font-variant-numeric:tabular-nums; }
.abhol-zeile{ font-size:clamp(15.5px,2.3vw,17.5px); font-weight:500; margin-top:12px;
  max-width:42ch; }
.abhol-preis{ font-size:15px; font-weight:800; color:var(--accent-satt); margin-top:14px; }

/* Was im Buendel drinsteckt - kurz und ohne Aufzaehlungspunkte. Es geht
   nicht darum, die Liste zu lesen, sondern zu sehen, dass es viele sind. */
.buendel-liste{ list-style:none; margin:var(--block) 0 0; padding:0; text-align:left;
  display:grid; gap:2px; }
.buendel-liste li{ display:flex; justify-content:space-between; gap:14px;
  padding:9px 0; border-bottom:1px solid var(--line); font-size:14px;
  font-weight:700; }
.buendel-liste li:last-child{ border-bottom:none; }
.buendel-liste span{ color:var(--soft); font-weight:600; white-space:nowrap; }
.knopf-gross{ display:inline-block; margin-top:14px; background:var(--marke);
  color:var(--auf); text-decoration:none; font-size:16.5px; font-weight:800;
  padding:14px 26px; border-radius:13px; letter-spacing:-.01em; }
@media (hover:hover){ .knopf-gross:hover{ background:var(--qraki-tief); } }
.abhol-klein{ font-size:13px; font-weight:600; color:var(--soft); margin-top:9px; }

.abhol-wege{ display:grid; gap:var(--luft); grid-template-columns:1fr; }
@media (min-width:640px){ .abhol-wege{ grid-template-columns:1fr 1fr; align-items:start; } }
.weg{ background:var(--card); border:1px solid var(--line); border-radius:16px;
  padding:20px; }
.weg h2{ font-size:16.5px; font-weight:800; margin-bottom:7px; }
.weg p{ font-size:14.5px; font-weight:500; color:var(--soft); }

/* Der QR-Code bekommt eine WEISSE Flaeche, auch auf der dunklen Seite: Leser
   erwarten dunkle Module auf hellem Grund, und ein invertierter Code faellt
   je nach Kamera einfach aus. Die Ruhezone bringt der Erzeuger schon mit. */
.weg-qr{ margin-top:14px; background:#FFFFFF; border-radius:12px; padding:10px;
  max-width:210px; }
.weg-qr svg{ display:block; width:100%; height:auto; }

.kurzcode{ margin-top:12px; background:var(--still); border:1px solid var(--line);
  border-radius:10px; padding:12px 14px; font-size:15.5px; font-weight:800;
  color:var(--ink); word-break:break-all; user-select:all; }

.abhol-danach{ display:grid; gap:11px; max-width:52ch; }
.abhol-danach p{ font-size:15px; font-weight:500; color:var(--soft); }
.abhol-danach b{ color:var(--ink); }
.abhol-zurueck{ margin-top:8px; }

/* Der Kopier-Knopf unter dem Code. Markieren ist auf dem Handy die
   fummeligste Geste, die es gibt - und der Code ist das Einzige, was man von
   dieser Seite mitnehmen soll. */
.kopier-zeile{ margin:10px 0 0; }
.kopier-zeile .knopf-klein{ display:inline-block; padding:9px 16px; border:none;
  font-family:inherit; cursor:pointer; }

/* ---- Die 404-Seite ------------------------------------------------------
   Vorher gab es keine: Cloudflare Pages lieferte fuer jede unbekannte Adresse
   die STARTSEITE mit Status 200. Zwei Nachteile - Suchmaschinen legen beliebig
   viele Doppel der Startseite an, und wer sich vertippt hat, bekommt kein
   Signal, sondern glaubt, er sei richtig. Eine eigene 404.html laesst Pages
   mit echtem Status 404 ausliefern. */
.vierhundertvier{ min-height:52vh; display:flex; flex-direction:column;
  justify-content:center; }
.vierhundertvier-weg{ margin-top:var(--block); font-size:14px; font-weight:600;
  color:var(--soft); }

/* Nummerierte Schritte auf der Verlagsseite. Die Nummer ist hier echte
   Information (erst schicken, dann bekommen, dann kleben) - deshalb eine
   geordnete Liste und keine Aufzaehlung. */
.schritte{ counter-reset:s; list-style:none; margin:var(--block) 0 0; padding:0;
  display:grid; gap:14px; }
.schritte li{ counter-increment:s; position:relative; padding-left:44px;
  line-height:1.6; }
.schritte li::before{ content:counter(s); position:absolute; left:0; top:-2px;
  width:30px; height:30px; border-radius:50%; display:grid; place-items:center;
  background:var(--card); color:var(--accent); font-weight:800; font-size:14px; }

/* SCANN MICH. Der QR steht mittig und gross genug, dass eine Handykamera ihn
   aus normalem Sitzabstand vom Bildschirm liest - darunter ist er huebsch,
   aber nutzlos. Der weisse Grund ist Pflicht: Ein QR auf dunklem Grund wird
   von vielen Kameras gar nicht erst erkannt. */
.qr-fertig{ width:min(230px,60vw); margin:26px auto 14px; padding:14px;
  background:#fff; border-radius:18px; }
.qr-fertig svg{ display:block; width:100%; height:auto; }
.probe{ text-align:center; }
.probe p{ margin-left:auto; margin-right:auto; }
.probe-code{ font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:14px;
  font-weight:700; color:var(--soft); letter-spacing:.02em; }

/* DREI SCHILDER. Jedes soll aussehen wie das, was es simuliert: ein kleines
   Schild an einem Gehege, an einer Vitrine, auf einem Buchruecken. Deshalb
   ein heller Traeger auch im Dunkelmodus - ein QR auf dunklem Grund wird von
   vielen Kameras nicht erkannt, und ein Schild ist in der Welt nun mal hell. */
.wildbahn{ text-align:center; }
.wildbahn-vor, .wildbahn-nach{ max-width:34rem; margin-left:auto; margin-right:auto; }
.wildbahn-nach{ margin-top:22px; font-size:14px; color:var(--soft); }
.schilder{ display:grid; gap:18px; margin-top:26px;
  grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); }
/* KEIN REINES WEISS (Briefing, Punkt 11): #FFFFFF auf dunklem Grund
   schlaegt hart ein. "Qraki Paper" ist leicht warm und nimmt die
   Kante raus, ohne dass das Schild weniger nach Papier aussieht. */
.schild{ background:var(--ink); color:var(--paper); border-radius:20px; padding:18px 16px 16px;
  display:flex; flex-direction:column; align-items:center; }
.schild-ort{ font-size:11.5px; font-weight:800; letter-spacing:.09em;
  text-transform:uppercase; color:#6B7480; margin:0; }
.schild .qr-fertig{ width:min(180px,52vw); margin:12px auto 10px; padding:0; }
.schild-was{ font-size:13.5px; line-height:1.5; color:#3A424E; margin:0; }
.schild-was b{ color:var(--paper); font-size:15px; }

/* Der Schluss einer Werbeseite darf nicht aussehen wie ein weiterer Absatz. */
.schluss-creator .schritte{ max-width:var(--mass); margin-left:0; margin-right:0;
  text-align:left; }

/* ============================================================
 * TEXTSEITEN, DIE ATMEN
 * ============================================================
 * Marc am 9. September 2026 ueber die Verlagsseite: "Endlos Text, alles dicht
 * an dicht gesetzt … da schmeissen Interessierte gleich wieder die Seite …
 * ist kaum lesbar." Er hatte recht, und es waren drei Fehler auf einmal -
 * gemessen bei 1150px:
 *
 * 1. KEINE LUFT ZWISCHEN DEN ABSCHNITTEN. Die Regel `section{ padding:… }`
 *    wurde von `.bahn{ padding:0 22px }` ueberschrieben, sobald .bahn DIREKT
 *    auf dem <section> sitzt - und genau so hatte ich die neuen Seiten
 *    gebaut. Auf den alten Seiten steht .bahn als <div> INNEN, deshalb fiel
 *    es nie auf.
 * 2. KEIN ABSTAND ZWISCHEN ABSAETZEN. Global gilt `p{ margin:0 }`; die alten
 *    Seiten holen sich den Abstand ueber .vor und .kette. Meine Absaetze
 *    hatten gar keine Klasse - gemessen: margin-top 0px, alle sechs.
 * 3. 105 ZEICHEN PRO ZEILE. Lesbar sind 45-75. Bei 105 verliert das Auge am
 *    Zeilenende die Spur und faengt die naechste Zeile falsch an.
 */
section.bahn{ padding-top:clamp(40px,7vh,76px); padding-bottom:clamp(40px,7vh,76px); }


/* ============================================================
 * EIN RHYTHMUS FUER ALLE SEITEN
 * ============================================================
 * Marc am 9. September 2026: "das Layout muss ueberall passen, texte brauchen
 * luft, konsistent, ueberall gleich, einrueckungen konstant gleich, zentrierte
 * texte sollten dann auch zentriert sein und nicht auf die optische mitte
 * eingerueckt und dann linksbuendig."
 *
 * Er hatte wieder recht, und es waren drei Sachen gleichzeitig. Gemessen auf
 * der Startseite bei 900px, linksbuendige Absaetze:
 *
 * 1. DREI VERSCHIEDENE EINZUEGE (linke Kante 132 / 157 / 173 px).
 *    Ursache: .kette, .faelle-vor und .preis-fuss trugen "margin: ... auto",
 *    also eine BLOCK-Zentrierung. In einem linksbuendigen Abschnitt schiebt
 *    die den Absatz in die optische Mitte, waehrend der Text darin links
 *    bleibt - genau das, was Marc auf dem Play-Abschnitt fotografiert hat.
 *    Regel jetzt: Block-Zentrierung NUR in Abschnitten, die auch ihren Text
 *    zentrieren (.mitte, .wildbahn, .schluss, .preis, Hero, Fuss). Ueberall
 *    sonst steht jeder Absatz an DERSELBEN Kante.
 *
 * 2. SECHS VERSCHIEDENE SATZBREITEN (555 / 572 / 585 / 613 / 634 / 636 px),
 *    weil 44ch, 46ch, 52ch, 56ch und 34rem nebeneinander lagen - und "ch"
 *    haengt an der Schriftgroesse, also ergaben selbst gleiche ch-Werte
 *    verschiedene Pixel. Zwei Absaetze untereinander brachen dadurch an
 *    verschiedenen Stellen um. Jetzt EIN Wert in rem: --mass. Kaesten,
 *    Bilder und Raster bleiben volle Spaltenbreite - das ist der Unterschied
 *    zwischen Fliesstext und Baustein, nicht Zufall.
 *
 * 3. FUENF VERSCHIEDENE ABSATZABSTAENDE (0 / 14 / 20 / 24 / 36 px), je nach
 *    Klasse. Jetzt: --absatz zwischen zwei Absaetzen, --block vor einem neuen
 *    Baustein oder einer Ueberleitung.
 *
 * Der Hero ist ausgenommen (header.oben, nicht section) - dort tragen die
 * beiden Zeilen ihre eigene, engere Breite, damit die Zeilen unter der
 * Ueberschrift sauber brechen.
 */
:root{
  /* Satzbreite. In rem, NICHT in ch: ch skaliert mit der Schriftgroesse, und
     genau daher kamen die sechs verschiedenen Breiten. 544px sind je nach
     Schriftgroesse 57-66 Zeichen - mitten im lesbaren Bereich. */
  --mass:34rem;
  --absatz:18px;
  --zeile:1.62;
}

/* --- Fliesstext: eine Breite, eine Kante, eine Zeilenhoehe --------------- */
.vor, .kette, .nachsatz, .faelle-vor, .preis-fuss, .ruhe, .knall-grund,
.wildbahn-vor, .wildbahn-nach, .fussnote, .knall, .anders-schluss, .stand,
.frage p, .frage li,
section.bahn > p:not([class]), section.bahn > ul:not([class]), section.bahn > ol:not([class]),
section .bahn > p:not([class]), section .bahn > ul:not([class]), section .bahn > ol:not([class]){
  max-width:var(--mass); margin-left:0; margin-right:0; line-height:var(--zeile); }

/* --- ... ausser dort, wo der Text ohnehin mittig steht ------------------- */
/* Ein linksbuendiger Absatz, der als Block zentriert wird, sieht eingerueckt
   aus. Ein zentrierter Absatz, der NICHT als Block zentriert wird, klebt am
   linken Rand. Beides gehoert zusammen - deshalb steht es in einer Regel. */
:is(header.oben, .mitte, .wildbahn, .schluss, .preis, footer)
  :is(p, ul, ol, .schritte){ margin-left:auto; margin-right:auto; }

/* --- Senkrechter Rhythmus ------------------------------------------------ */
/* Gilt fuer alle drei Bauweisen, die es auf der Seite gibt: .bahn als <div>
   INNEN im <section> (aeltere Seiten), .bahn direkt auf dem <section>
   (neuere Seiten) und .bahn direkt unter <main> (Textseiten wie Datenschutz
   und Impressum). Der Hero (header.oben) faellt durch alle drei nicht mit
   hinein - er ist eine Komposition aus Bild, Zeile, Knopf und Dreiklang und
   setzt seine Abstaende selbst. */
:is(section .bahn, section.bahn, main > .bahn) > :is(h1,h2,h3){ margin-top:var(--block); }
:is(section .bahn, section.bahn, main > .bahn) > .balken + :is(h1,h2,h3){ margin-top:4px; }
:is(section .bahn, section.bahn, main > .bahn) > :is(h1,h2,h3) + p{ margin-top:14px; }
:is(section .bahn, section.bahn, main > .bahn) > p + :is(p,ul,ol){ margin-top:var(--absatz); }
:is(section .bahn, section.bahn, main > .bahn) > :is(ul,ol) + p{ margin-top:var(--absatz); }
:is(section .bahn, section.bahn, main > .bahn) > :is(ul,ol):not([class]){ margin-top:var(--absatz); }
/* Eine Ueberleitung und eine Knopfzeile beginnen einen neuen Gedanken - die
   bekommen den Blockabstand, nicht den Absatzabstand. */
:is(section .bahn, section.bahn, main > .bahn) > p + :is(.faelle-vor,.knopf-zeile){
  margin-top:var(--block); }
/* Das erste Element eines Abschnitts steht oben an - der Abschnitt selbst
   bringt seinen Abstand ueber padding mit. */
:is(section .bahn, section.bahn, main > .bahn) > :first-child{ margin-top:0; }
/* LANGE TEXTDOKUMENTE (Datenschutz, Impressum). Sie liegen jetzt auf
   demselben Stil wie der Rest der Seite - dieselbe Spalte, dieselbe Kante,
   derselbe Rhythmus. Nur die Zwischenueberschrift faellt kleiner aus: ein
   Dutzend Ueberschriften in Landingpage-Groesse macht aus einem Dokument
   eine Abfolge von Plakaten. Hier ist sie eine Marke im Text, keine Ansage. */
.dokument h2{ font-size:clamp(18px,2.6vw,21px); }
.dokument li{ margin-bottom:6px; line-height:var(--zeile); }
/* AUSNAHME: .schluss ist eine Flex-Spalte und setzt seine Abstaende ueber
   "gap". Der allgemeine Absatzabstand wuerde sich dort dazuaddieren - genau
   der Grund, warum dieser Abschnitt ueberhaupt auf gap umgestellt wurde. */
.schluss .bahn > :is(p,h1,h2,h3){ margin-top:0; }

/* ---- Das Manifest -------------------------------------------------------
   Eine Seite, die man liest wie einen Text und nicht wie eine Produktseite.
   Deshalb keine Kaesten, keine Icons, keine Haken - nur Satzbau, Abstand und
   ein einziger hervorgehobener Satz. Die Aufzaehlung traegt einen Strich
   statt eines Punktes: Sie ist eine Reihe von Zusagen, keine Merkmalsliste. */
.manifest-liste{ list-style:none; margin:var(--block) 0 0; padding:0;
  display:grid; gap:20px; max-width:var(--mass); }
.manifest-liste li{ padding-left:16px; border-left:2px solid var(--line);
  font-size:16px; font-weight:600; color:var(--soft); line-height:var(--zeile); }
.manifest-liste b{ display:block; color:var(--ink); font-weight:800;
  font-size:17px; margin-bottom:4px; letter-spacing:-.01em; }
.manifest-nie li{ border-left-color:var(--accent); }
/* Der eine Satz, an dem die ganze Seite haengt. Er steht allein, in
   Ueberschriftengroesse, ohne Kasten - lauter waere er nicht, nur unruhiger. */
.manifest-frage{ margin:26px 0; font-size:clamp(22px,4.6vw,30px); font-weight:800;
  letter-spacing:-.03em; line-height:1.2; color:var(--accent-satt);
  text-wrap:balance; max-width:var(--mass); }
.manifest-ende{ margin-top:14px; font-size:clamp(18px,3.4vw,23px); font-weight:800;
  letter-spacing:-.02em; color:var(--ink); text-wrap:balance; }
.schluss-manifest{ border-top:1px solid var(--line); }

/* ---- "Für dich. Für alle." ---------------------------------------------
   Die Section, die den Grund traegt. Drei kurze Saetze untereinander, jeder
   auf einer eigenen Zeile - als Aufzaehlung mit Punkten waeren es Merkmale,
   untereinander sind es drei Schlaege. Deshalb enger gesetzt als normaler
   Fliesstext und ohne den ueblichen Absatzabstand. */
.fuer-alle{ background:var(--card); border-top:1px solid var(--line);
  border-bottom:1px solid var(--line); }
.fuer-alle > .bahn > .vor{ font-size:clamp(17px,3vw,20px); font-weight:600;
  color:var(--soft); margin-bottom:0; }
.fuer-alle > .bahn > .vor + .vor{ margin-top:10px; }
/* Der Schlusssatz ist die Antwort auf die drei Zeilen davor - er bekommt Luft
   und Gewicht, aber keinen Kasten. */
.deshalb{ margin-top:var(--block); font-size:clamp(21px,4.4vw,29px); font-weight:800;
  letter-spacing:-.03em; line-height:1.25; color:var(--ink); text-wrap:balance;
  max-width:var(--mass); }

/* Marcs Satz zur Finanzierung. Er steht allein, weil er allein alles
   beantwortet: keine Werbung, keine Paywall, keine gekaufte Sichtbarkeit. */
.kaufbar{ margin-top:var(--block); font-size:clamp(19px,3.8vw,25px); font-weight:800;
  letter-spacing:-.02em; line-height:1.3; color:var(--accent-satt);
  text-wrap:balance; max-width:var(--mass); }

/* ==========================================================================
   NEUE STARTSEITE, 10. September 2026
   --------------------------------------------------------------------------
   Alles hier gehoert zum Umbau nach Marcs Plan. Es steht am Ende der Datei
   und nicht verstreut dazwischen, damit man es als Einheit lesen - und im
   Zweifel als Einheit wieder herausnehmen kann.

   ZWEI ARTEN VON BILD, und der Unterschied traegt das ganze Layout:
     .bild   liegt frei auf dem Seitengrund, hat Transparenz, keinen Rahmen.
     .szene  hat einen gemalten Hintergrund und wird deshalb ein Kasten mit
             runden Ecken - freigestellt zu tun, waere gelogen.
   ========================================================================== */

/* Eine breitere Bahn - aber NUR fuer Bild-und-Text nebeneinander. Fliesstext
   bleibt ueberall bei --mass; eine Zeile ueber 34rem liest sich schlecht,
   egal wie breit der Schirm ist. */
.bahn-weit{ width:100%; max-width:1080px; margin:0 auto; padding:0 22px; }

/* ------------------------------------------------------------------- HERO */
/* Auf dem Handy bleibt alles wie bisher: Bild oben, Text zentriert darunter.
   Das war eine bewusste Entscheidung (8. September) und funktioniert. Erst ab
   900 Punkten wird daraus die zweispaltige Fassung mit Text links. */
.heldenzeile{ display:grid; gap:clamp(18px,3vh,30px); align-items:center; }
.helden-bild{ order:-1; }
.helden-illu{ max-width:min(420px,72vw); margin-bottom:0; }
.claim{ font-size:clamp(38px,10vw,60px); font-weight:900; line-height:1.02;
  letter-spacing:-.045em; margin:0; }
.claim-klein{ font-size:clamp(28px,6.6vw,42px); font-weight:900; line-height:1.08;
  letter-spacing:-.035em; margin:0; }
.helden-sub{ margin-top:16px; font-size:clamp(16.5px,2.6vw,19px); font-weight:600;
  color:var(--soft); line-height:1.55; max-width:34ch; text-wrap:balance; }
/* Auf dem Handy stehen die beiden Knoepfe untereinander und GLEICH BREIT.
   Nebeneinander passen sie nicht, und unterschiedlich breit sah der zweite
   wichtiger aus als der erste - allein weil "Entdecke Qraki" mehr Buchstaben
   hat als "App oeffnen". Dieselbe Regel wie in der App: Knoepfe fluchten. */
.knopf-paar{ display:flex; flex-direction:column; gap:12px;
  margin-top:clamp(20px,3vh,28px); }
.knopf-paar > *{ text-align:center; }
@media (min-width:600px){
  .knopf-paar{ flex-direction:row; flex-wrap:wrap; justify-content:center; }
}
/* Der zweite Knopf darf den ersten nicht schlagen. Gleiche Form, gleiche
   Groesse, aber ohne Fuellung - so bleibt "App oeffnen" die Handlung und
   "Entdecke Qraki" das Angebot. */
.knopf-still{ display:inline-block; background:none; color:var(--ink);
  border:1.5px solid var(--line); text-decoration:none; font-size:16.5px;
  font-weight:800; padding:14.5px 28px; border-radius:14px; }
.knopf-still:hover{ border-color:var(--accent); color:var(--accent-satt); }
.mikro{ margin-top:14px; font-size:13.5px; font-weight:650; color:var(--soft); }

@media (min-width:900px){
  .heldenzeile{ grid-template-columns:1fr 1fr; gap:40px; text-align:left; }
  .helden-bild{ order:0; }
  .helden-illu{ max-width:100%; }
  .helden-text{ max-width:34rem; }
  .knopf-paar{ justify-content:flex-start; }
  /* Die allgemeine Zentrier-Regel gilt fuer header.oben - hier muss sie weg,
     sonst steht der Untertitel mittig in seiner eigenen Spalte, waehrend die
     Ueberschrift links steht. Der Selektor braucht .helden-text mit drin:
     Ohne ihn ist er schwaecher als die allgemeine Regel und verliert. */
  header.oben{ text-align:left; }
  header.oben .helden-text :is(p, ul, ol){ margin-left:0; margin-right:0; }
}
/* Der Hero fuellt nicht mehr den ganzen Schirm: Mit zwei Spalten und zwei
   Knoepfen steht dort jetzt genug, um sich zu lohnen - volle Hoehe machte
   daraus nur Leere unten. */
header.oben{ min-height:auto; padding:clamp(30px,7vh,72px) 0 clamp(34px,6vh,64px); }

/* ------------------------------------------------------------------ BILDER */
.bild-breit{ max-width:min(560px,100%); margin-top:var(--block); }
.szene{ display:block; width:100%; height:auto; border-radius:20px;
  margin:var(--block) 0; }
:is(section .bahn, section.bahn) > :is(h1,h2,h3) + :is(.bild,.szene){ margin-top:22px; }

/* ------------------------------------------------- DREI BEREICHE / MERKMALE */
/* Drei nebeneinander, sobald Platz ist - nicht "so viele wie passen".
   Mit auto-fit und 210px Mindestbreite standen in der 680er-Bahn zwei oben
   und eines allein darunter: Das liest sich wie zwei wichtige und ein
   nachgereichtes. Drei gleichwertige Dinge stehen in einer Reihe. */
.dreier{ display:grid; gap:14px; margin-top:var(--block);
  grid-template-columns:1fr; }
@media (min-width:600px){ .dreier{ grid-template-columns:repeat(3,1fr); } }
.dreier-teil{ background:var(--card); border-radius:20px; padding:20px 19px;
  box-shadow:0 3px 0 var(--line); }
.dreier-teil h3{ font-size:18px; font-weight:800; margin:0 0 9px; }
.dreier-teil p{ font-size:15px; font-weight:600; color:var(--soft); }
.dreier-schmal .dreier-teil{ padding:17px 18px; }
/* Sticker aus dem eigenen Bogen, nicht gezeichnete Fremd-Icons. Eine feste
   Hoehe statt einer Breite: Die Sticker sind verschieden breit, sollen aber
   nebeneinander gleich gross wirken. */
.sticker{ display:block; width:auto; height:44px; margin:0 0 13px; }
.dreier-teil .sticker{ height:40px; }

/* ------------------------------------------------------- DREI SCHRITTE 01-03 */
/* Nummeriert, weil es wirklich eine Reihenfolge ist: erst finden, dann raten,
   dann behalten. Eine Nummer, die keine Folge meint, waere Dekoration. */
.stufen{ counter-reset:st; list-style:none; margin:var(--block) 0 0; padding:0;
  display:grid; gap:12px; }
.stufen li{ counter-increment:st; display:flex; align-items:center; gap:16px;
  background:var(--card); border-radius:18px; padding:15px 18px; }
.stufen li::before{ content:"0" counter(st); font-size:13px; font-weight:900;
  color:var(--accent); font-variant-numeric:tabular-nums; flex:none; }
.stufen .sticker{ height:46px; margin:0; flex:none; }
.stufen b{ display:block; font-size:17px; font-weight:800; }
.stufen span{ display:block; margin-top:3px; font-size:14.5px; font-weight:600;
  color:var(--soft); }

/* --------------------------------------------------------- HERVORGEHOBENE SAETZE */
/* Groesser als Fliesstext, aber bewusst kleiner als die Ueberschrift des
   Abschnitts - sonst kaempfen zwei Zeilen um dieselbe Aufmerksamkeit. */
.hoch{ margin-top:var(--block); font-size:clamp(20px,4.4vw,27px); font-weight:900;
  letter-spacing:-.03em; line-height:1.2; color:var(--accent-satt);
  text-wrap:balance; }
.reihe{ margin-top:18px; font-size:clamp(16.5px,2.6vw,19px); font-weight:700;
  color:var(--ink); line-height:1.7; }

/* ------------------------------------------------------------ ZIELGRUPPEN */
.marken{ display:flex; flex-wrap:wrap; gap:10px; margin-top:var(--block); }
.marke-tag{ display:inline-block; background:var(--card); border:1px solid var(--line);
  border-radius:999px; padding:9px 18px; font-size:13px; font-weight:800;
  letter-spacing:.06em; text-transform:uppercase; color:var(--ink);
  text-decoration:none; }
.marke-tag:hover{ border-color:var(--accent); color:var(--accent-satt); }

/* ------------------------------------------------------------------- BETA */
#beta .sticker{ height:38px; margin-bottom:18px; }

/* -------------------------------------------------------------- SCHLUSS */
/* Nicht .schluss: Der bestehende Schluss ist eine zentrierte Flex-Spalte mit
   26ch Textbreite. Der neue ist die Hero-Zeile ein zweites Mal - Anfang und
   Ende der Seite sehen damit gleich aus, und das ist Absicht. */
.schluss-neu{ background:var(--card); border-top:1px solid var(--line); }
/* Auch das Schlussbild ist eine Szene mit gemaltem Hintergrund - ohne runde
   Ecken steht ein hartes Rechteck auf dem Kartengrund. */
.heldenzeile-schluss .helden-illu{ max-width:min(300px,58vw); border-radius:20px; }
@media (min-width:900px){
  .heldenzeile-schluss .helden-illu{ max-width:340px; margin-left:auto; }
}

/* ==========================================================================
   ZWEITER PASS, 10. September 2026 - nach Marcs Durchsicht der Screenshots
   --------------------------------------------------------------------------
   Sein Befund, woertlich: "Text / 700 Pixel nichts / Text". Der Grund war
   nicht der Abstand zwischen den Abschnitten, sondern die Spaltenbreite:
   Auf einem 1440er Schirm stand alles in einer 636 Punkte schmalen Saeule,
   Bild UNTER Text - die rechte Haelfte blieb leer, und jede Illustration
   schob den naechsten Satz um ihre volle Hoehe nach unten.
   ========================================================================== */

/* EINE Bahn fuer die ganze Startseite, damit alle Abschnitte dieselbe linke
   Kante haben. Nur hier - die uebrigen Seiten sind reine Textseiten und
   bleiben bei 680. Fliesstext bleibt trotzdem bei --mass: breiter wird eine
   Zeile nicht lesbarer, nur laenger. */
main#oben .bahn{ max-width:1080px; }
main#oben .bahn > :is(h1,h2,h3){ max-width:22ch; }
main#oben .mitte .bahn > :is(h1,h2,h3){ max-width:none; }
main#oben .probe{ max-width:520px; margin-left:auto; margin-right:auto; }
main#oben .stufen{ max-width:640px; }

/* Bild und Text als EINE Einheit, nebeneinander. Unter 900 Punkten
   untereinander - dort gibt es keine zweite Spalte, und das Bild oben ist
   auf dem Handy genau richtig. */
.duo{ display:grid; gap:clamp(18px,3vw,42px); align-items:center; }
.duo-text{ max-width:34rem; }
.duo-text > :is(h1,h2,h3) + p{ margin-top:14px; }
.duo-text > p + p{ margin-top:var(--absatz); }
.duo-bild{ order:-1; }
.duo-bild img{ width:100%; max-width:none; margin:0; }
/* 820 statt 900: Ein iPad hochkant hat 834 Punkte und stand damit knapp auf
   der falschen Seite - dort lief die Seite genauso lang wie auf dem Handy,
   obwohl die Breite fuer zwei Spalten reicht. */
@media (min-width:820px){
  .duo{ grid-template-columns:1fr 1fr; }
  .duo-bild{ order:0; }
}

/* Enger. Vorher 70 Punkte oben und unten, also 140 zwischen zwei Abschnitten -
   in Marcs Band, aber zusammen mit der leeren rechten Haelfte wirkte es wie
   das Doppelte. Mit zwei Spalten traegt weniger. */
/* NUR OBEN UND UNTEN, NICHT DIE KURZFORM (Marc, 16.09.2026: "on tap auf Deck
   wird das Deck heftig an den linken Bildschirmrand ausgerichtet").
   `main#oben section{ padding: X 0 }` traegt eine ID und schlaegt damit
   `.bahn{ padding:0 22px }`. Auf der Startseite faellt das nicht auf, weil
   .bahn dort ein <div> INNERHALB der Section ist und seine Polsterung
   behaelt. Auf den Abhol-Seiten (/d/<deck>) sitzt .bahn AUF der Section -
   dort wurde sie geloescht, und Cover, Titel und Text klebten am linken
   Rand, das Cover teils ausserhalb des Schirms.
   Mit den Langformen bleibt die Waagerechte da, wo sie hingehoert: bei
   .bahn. Sections ohne .bahn haben ohnehin keine, also aendert sich dort
   nichts. */
main#oben section{ padding-top:clamp(34px,5vh,56px); padding-bottom:clamp(34px,5vh,56px); }

/* Das Schlussbild hat einen gemalten, sehr dunklen Hintergrund. Auf dem
   helleren Kartengrund sah man seine Kante als Rechteck (Marc). Auf dem
   Seitengrund verschwindet sie. */
.schluss-neu{ border-top:1px solid var(--line); }
.heldenzeile-schluss .helden-illu{ border-radius:0; }

/* Was nach einem Kasten-Block kommt, braucht Abstand zu ihm.
   Die bestehende Abstandsregel kennt nur "Absatz nach Absatz" und "Absatz nach
   Liste" - nach einem Raster aus <div> griff sie nicht, und der naechste Satz
   klebte unter den Karten (sichtbar bei "Play together"). */
main#oben .bahn > :is(.dreier, .stufen, .nullen, .blick, .schilder, .faecher,
  .zweispur, .marken, .duo, .anders-liste) + :is(p, h2, h3, ul, ol, div, ol.stufen){
  margin-top:var(--block);
}
/* Zwei Kasten-Raster hintereinander stehen enger - sie gehoeren zusammen. */
main#oben .bahn > :is(.nullen, .dreier) + .anders-liste{ margin-top:var(--luft); }

/* Karte und Antwortknoepfe teilen sich EINE Breite. Vorher stand sie zweimal
   im Stil: die Karte bei 520, die Knoepfe bei 360 - die Knoepfe standen damit
   sichtbar schmaler unter der Karte (Marc). In der App fluchten sie, hier
   jetzt auch. */
main#oben{ --probe-breit:520px; }
main#oben .probe,
main#oben .quiz-wahl{ max-width:var(--probe-breit); margin-left:auto; margin-right:auto; }

/* Die Kopfleiste liegt AUSSERHALB von main und hat deshalb die Verbreiterung
   der Bahn nicht mitbekommen: Logo und Knopf standen auf 680 eingerueckt,
   der Inhalt darunter auf 1080. Zwei verschiedene Kanten auf derselben Seite. */
.kopf .bahn{ max-width:1080px; }

/* ==========================================================================
   DRITTER PASS, 10. September 2026 — RHYTHMUS
   --------------------------------------------------------------------------
   Marcs Befund: "Das Problem ist nicht der Inhalt, das Problem ist der
   Rhythmus." Jeder Abschnitt war gleich gebaut, und jeder Textblock steckte
   in einer Karte. Drei Regeln liegen diesem Block zugrunde:

     1. Eine Karte ist ein INHALT, kein Layout. Quiz, Bibliothek, QR-Schilder
        und zwei echte Wege bekommen Rahmen. Ein Absatz nicht.
     2. Illustrationen schweben frei und sind verschieden gross. Immer
        dieselbe Groesse ist ein Raster, keine Komposition.
     3. Kein Abschnitt sieht aus wie der davor — aber auch nicht stur
        abwechselnd links/rechts. Das waere nur das naechste Muster.
   ========================================================================== */

/* ------------------------------------------------------- FREIE ILLUSTRATION */
/* Kein Rahmen, kein Hintergrund, keine runden Ecken. Alle Assets sind
   freigestellt - ein Kasten drumherum wuerde das wieder zunichtemachen. */
.frei{ display:block; width:100%; height:auto; margin:0; border-radius:0;
  background:none; }
.frei.mittel{ max-width:min(460px,100%); }
.frei.gross{ max-width:min(620px,100%); }
.frei.riesig{ max-width:100%; }
.frei.breit-mitte{ max-width:min(760px,88vw); margin:clamp(20px,3vh,34px) auto; }

/* ------------------------------------------------------------- ZWEI SPALTEN */
/* Drei Gewichtungen statt einer. Die Spaltenbreite macht den Unterschied
   zwischen "Bild neben Text" und "Bild MIT Text daneben". */
@media (min-width:820px){
  /* Mehr Luft zwischen Bild und Text (Marc: "haengt etwas nah zusammen").
     Der allgemeine Abstand reicht hier nicht, weil die Illustration bis an
     ihre Kante gezeichnet ist und der Text sofort daneben beginnt. */
  .duo-bild-links{ grid-template-columns:1.1fr .9fr; gap:clamp(34px,5vw,72px); }
  .duo-bild-links .duo-bild{ order:0; }
  .duo-bild-links .duo-text{ order:1; }
  .duo-schwer{ grid-template-columns:.82fr 1.18fr; }
  .duo-kipp{ grid-template-columns:1.3fr .7fr; }
  .duo-kipp .duo-bild{ order:0; }
  .duo-kipp .duo-text{ order:1; }
}

/* ------------------------------------------------------------ FUEHRUNGSTEXT */
/* Der eine Satz nach der Ueberschrift. Groesser als Fliesstext, damit er den
   Abschnitt traegt - und kurz genug, dass er das auch kann. */
.fuehrung{ margin-top:16px; font-size:clamp(17px,2.7vw,20px); font-weight:600;
  color:var(--soft); line-height:1.55; max-width:40ch; }
main#oben .bahn > .fuehrung + p,
.duo-text > .fuehrung + p{ margin-top:var(--absatz); }
h2.gross{ font-size:clamp(30px,7vw,52px); line-height:1.04; letter-spacing:-.04em; }

/* ------------------------------------------- DREI SPALTEN, ABER OHNE KAESTEN */
/* Vorher drei Produktkarten mit Rand, Schatten und Polster. Es sind drei
   Saetze - die brauchen ein Icon, ein Wort und eine Zeile, sonst nichts. */
.drei-leicht{ display:grid; gap:clamp(22px,3vw,34px); margin-top:var(--block);
  grid-template-columns:1fr; }
@media (min-width:640px){ .drei-leicht{ grid-template-columns:repeat(3,1fr); } }
.drei-leicht h3{ font-size:19px; font-weight:800; margin:12px 0 7px; }
.drei-leicht p{ font-size:15.5px; font-weight:600; color:var(--soft); max-width:34ch; }
.drei-leicht .sticker{ height:48px; margin:0; }

/* ------------------------------------------------------------------ BUEHNEN */
/* Zwei Abschnitte bekommen mehr Luft als alle anderen: die Probierkarte, weil
   man dort selbst dran ist, und das Gedaechtnismodell, weil dort ein Satz
   allein stehen soll. */
main#oben section.buehne{ padding-top:clamp(56px,9vh,104px); padding-bottom:clamp(56px,9vh,104px); text-align:center; }
section.buehne .bahn > :is(p,h2){ margin-left:auto; margin-right:auto; }
section.buehne .fuehrung{ max-width:46ch; }
main#oben section.mitte-buehne{ padding-top:clamp(48px,8vh,88px); padding-bottom:clamp(48px,8vh,88px); text-align:center; }
section.mitte-buehne .bahn > :is(p,h2){ margin-left:auto; margin-right:auto; }
section.mitte-buehne .fuehrung{ max-width:52ch; }
.hoch-mitte{ margin-left:auto; margin-right:auto; text-align:center; }

/* ------------------------------------------------- SCHILDER, LEICHT VERSETZT */
/* Drei QR-Schilder in einer schnurgeraden Linie sehen aus wie eine Tabelle.
   Ein leichter Versatz macht daraus drei Einladungen. Nur auf breiten
   Schirmen - auf dem Handy stehen sie ohnehin untereinander. */
/* DER VERSATZ IST WIEDER RAUS (Marc, 10. September 2026: "hier passt auch was
   nicht").
   Die Idee war, die drei Schilder aus der starren Reihe zu holen. In der
   Ausfuehrung kam aber zweierlei zusammen: der Versatz UND drei verschieden
   hohe Karten - die Bildunterschriften sind unterschiedlich lang, und die
   QR-Codes haben je nach Datenmenge verschieden feine Raster. Das liest sich
   nicht als Komposition, sondern als verrutscht.
   Jetzt stehen sie gleich hoch nebeneinander. Der Abschnitt hat seinen
   eigenen Charakter ohnehin: Es sind die einzigen WEISSEN Flaechen der ganzen
   Seite. Das reicht als Unterschied. */
.schilder{ align-items:stretch; }
.schild{ height:100%; }
/* Der QR-Code bekommt eine feste Hoehe, damit die Bildunterschriften
   untereinander auf einer Linie beginnen - unabhaengig davon, wie fein das
   Raster des einzelnen Codes ist. */
.schild .qr-fertig{ flex:none; }
.schild .schild-was{ margin-top:auto; }

/* --------------------------------------------------------- ZWEI ECHTE WEGE */
/* Hier ist eine Karte richtig: Es gibt zwei Tueren und man muss sich fuer eine
   entscheiden. Deshalb sind es auch ANKLICKBARE Karten, keine Kaesten mit
   einem Link darin. */
.zweiweg{ display:grid; gap:14px; margin-top:var(--block); grid-template-columns:1fr; }
@media (min-width:700px){ .zweiweg{ grid-template-columns:1fr 1fr; } }
.weg-karte{ display:block; background:var(--card); border-radius:20px;
  padding:22px 21px; text-decoration:none; color:var(--ink);
  box-shadow:0 3px 0 var(--line); }
.weg-karte:hover{ box-shadow:0 3px 0 var(--accent); }
.weg-karte h3{ font-size:19px; font-weight:800; margin:0 0 9px; }
.weg-karte p{ font-size:15px; font-weight:600; color:var(--soft); }
.marken-zeile{ margin-top:18px; font-size:15px; font-weight:600; color:var(--soft); }

/* ------------------------------------------------------------ FAKTENSTREIFEN */
/* Die vier Nullen standen als grosser Kasten mit Trennlinie da und wirkten
   verloren. Als Zeile sind sie das, was sie sind: vier Zahlen. */
.fakten-streifen{ display:grid; grid-template-columns:repeat(2,1fr);
  gap:20px 18px; margin-top:var(--block); }
@media (min-width:700px){ .fakten-streifen{ grid-template-columns:repeat(4,1fr); } }
.fakten-streifen b{ display:block; font-size:clamp(26px,5vw,36px); font-weight:900;
  letter-spacing:-.04em; line-height:1; font-variant-numeric:tabular-nums; }
.fakten-streifen span{ display:block; margin-top:7px; font-size:13.5px;
  font-weight:650; color:var(--soft); line-height:1.35; }

/* ------------------------------------------------------- ASYMMETRISCHE DREI */
/* Eines gross, zwei klein. Drei gleich grosse Felder waeren wieder ein Raster -
   und die erste Gruppe ist die, um die es geht. */
.schief{ display:grid; gap:clamp(20px,3vw,32px); margin-top:var(--block);
  grid-template-columns:1fr; }
@media (min-width:820px){
  /* stretch statt start: Nur wenn die Spalten gleich hoch werden, kann der
     Knopf mit margin-top:auto nach unten rutschen und mit dem Nachbarn auf
     einer Linie stehen. */
  .schief{ grid-template-columns:1.35fr 1fr 1fr; align-items:stretch; }
}
.schief h3{ font-size:19px; font-weight:800; margin:0 0 8px; }
.schief p{ font-size:15.5px; font-weight:600; color:var(--soft); max-width:34ch; }
.schief-gross h3{ font-size:clamp(22px,3.4vw,28px); letter-spacing:-.02em; }
.schief-gross p{ font-size:clamp(17px,2.4vw,19px); color:var(--ink); }

/* ------------------------------------------------------ NUR TYPOGRAFIE */
/* Der einzige Abschnitt ohne Bild und ohne Rahmen. Er faellt genau deshalb
   auf: weil sonst ueberall etwas zu sehen ist. */
main#oben section.typo{ padding-top:clamp(60px,10vh,112px); padding-bottom:clamp(60px,10vh,112px);
  border-top:1px solid var(--line); border-bottom:1px solid var(--line); }
section.typo p{ font-size:clamp(17px,2.8vw,21px); font-weight:600;
  color:var(--soft); max-width:34ch; }
section.typo .bahn > h2 + p{ margin-top:clamp(20px,3vh,30px); }
section.typo .bahn > p + p{ margin-top:9px; }
.typo-schluss{ margin-top:clamp(24px,4vh,38px) !important;
  font-size:clamp(22px,4.6vw,30px) !important; font-weight:900 !important;
  letter-spacing:-.03em; color:var(--accent-satt) !important; }

/* ----------------------------------------------------------------- SCHMAL */
/* Beta ist eine Randnotiz, kein Kapitel. Also bekommt sie auch die Hoehe
   einer Randnotiz. */
main#oben section.schmal{ padding-top:clamp(26px,4vh,40px); padding-bottom:clamp(26px,4vh,40px); }
section.schmal h3{ font-size:clamp(20px,3.6vw,25px); font-weight:900;
  letter-spacing:-.02em; margin:0 0 8px; }
section.schmal p{ font-size:15.5px; font-weight:600; color:var(--soft); max-width:52ch; }
section.schmal .sticker{ height:34px; margin-bottom:14px; }

/* ============================== ENTWEDER KARTE ODER EIGENER BLOCK ==========
   Marcs Regel vom 10. September 2026: "entweder Grafik als Karte oder Grafik
   frei, dann hat die Sektion einen leicht helleren Hintergrund — wie momentan
   TV Quiz. Nur das Hero-Bild darf da rausfallen."

   Der Grund dahinter: Eine freigestellte Illustration braucht eine Flaeche,
   auf der sie steht. Ohne die schwebt sie im Nichts und sieht aus, als waere
   sie vergessen worden. Ein Rahmen um ein freigestelltes Bild waere die
   andere Antwort - die passt nur bei den zwei Assets, die ohnehin einen
   gemalten Hintergrund haben (siehe .szene-rund).

   Der Hero ist die Ausnahme, weil er selbst schon der erste Block ist. */
/* FLACHER TON, KEIN VERLAUF (10. September, nachgemessen).
   Der Verlauf ging von 7 auf 2 Prozent und begann in jedem Abschnitt neu.
   Solange die Bloecke einzeln standen, fiel das nicht auf. Seit die
   Bibliothek dazugekommen ist, stossen drei davon aneinander - und an jeder
   Grenze sprang die Farbe sichtbar zurueck (#1B1C26 auf #201E2E). Ein flacher
   Ton hat dieses Problem nicht: Benachbarte Bloecke werden zu einer Flaeche,
   einzelne heben sich genauso ab wie vorher. */
section.frei-block{ background:color-mix(in srgb,var(--marke) 7%,var(--paper)); }
/* Play together ist der lauteste der vier und darf etwas mehr Farbe haben. */
section.frei-block.laut{ background:color-mix(in srgb,var(--marke) 12%,var(--paper)); }

/* Zwei der neun Illustrationen sind Szenen mit GEMALTEM Hintergrund
   (qraki_create, qraki_haken_v2) - die uebrigen sieben sind freigestellt.
   Freistehend wirken sie deshalb nicht frei, sondern wie ein hartes Rechteck
   auf der Seite. Sie bekommen runde Ecken; das ist keine Box um ein
   freigestelltes Bild, sondern die ehrliche Form eines Bildes, das einen
   eigenen Rand hat. */
.frei.szene-rund{ border-radius:20px; }

/* QR-CODES AM HANDY KOMPAKTER (Marc: "nicht unnoetig riesig, aber gute
   Scanbarkeit"). 132 Punkte reichen fuer jede Handykamera bei Armlaenge -
   die Codes tragen wenig Daten und haben grosse Module. Was hier gewonnen
   wird, ist vertikale Hoehe: drei Schilder untereinander waren fast zwei
   Bildschirme lang. */
@media (max-width:640px){
  .schild{ padding:14px 14px 13px; }
  .schild .qr-fertig{ width:132px; margin:9px auto 8px; }
  .schild-ort{ font-size:11px; }
  .schilder{ gap:12px; }
}

/* ==========================================================================
   VIERTER PASS, 10. September 2026 — Luft, Hero, gerahmte Bilder
   ========================================================================== */

/* "Der Teil schaut schlimm aus" (Marc) — und der Grund war ein Regelbruch:
   In "Kein Trick" stand ein GERAHMTES Bild auf einem HELLEN Abschnitt. Beides
   zusammen ergibt Karte auf Karte; das Bild verliert seine Kante und der
   Abschnitt wirkt matschig. Die Regel lautet entweder/oder:
     gerahmtes Bild  -> normaler Seitengrund
     freies Bild     -> heller Block
   .anders faerbte den Abschnitt ein, seit es ihn gibt. Hier muss das weg. */
/* Die Ausnahme ist erledigt: Seit dem 10. September ist der Tresor
   freigestellt statt gerahmt, damit gilt wieder die normale Regel - freies
   Bild, heller Block. Was hier bleibt, ist nur das Abschalten der alten
   .anders-Faerbung; den Block setzt jetzt .frei-block. */
main#oben section.anders{ background:none; border-bottom:none; }
main#oben section.anders.frei-block{ background:color-mix(in srgb,var(--marke) 7%,var(--paper)); }

/* MEHR LUFT ZWISCHEN DEN ABSCHNITTEN (Marc: "damit die Seite etwas atmen
   kann"). Vorher 50 Punkte oben und unten, also 100 zwischen zwei Kapiteln.
   Jetzt bis 78 - das sind bis zu 156 dazwischen. Die Seite wird dadurch
   wieder etwas laenger; das ist hier der Punkt, nicht der Preis. */
main#oben section{ padding-top:clamp(46px,7.5vh,78px); padding-bottom:clamp(46px,7.5vh,78px); }
main#oben section.schmal{ padding-top:clamp(34px,5vh,52px); padding-bottom:clamp(34px,5vh,52px); }

/* DER HERO DARF AM DESKTOP GROSS SEIN. Er hatte dieselbe Spaltenbreite wie
   der Text - dabei ist er das erste und einzige Bild, das jemand garantiert
   sieht. Jetzt bekommt er die groessere Haelfte. */
@media (min-width:900px){
  /* Der Hero vom 10. September ist 2:1 statt 3:2 - bei gleicher Breite also
     deutlich flacher. Damit er nicht verloren wirkt, bekommt er mehr Spalte. */
  .heldenzeile{ grid-template-columns:.82fr 1.18fr; gap:clamp(30px,3.5vw,52px); }
  header.oben .helden-illu{ max-width:min(640px,100%); }
}
@media (min-width:1200px){
  header.oben .helden-illu{ max-width:min(720px,100%); }
}

/* Die Schilder sind ein eigener Gedanke innerhalb der Bibliothek ("und der
   Rest haengt draussen"). Zwischen dem Faecher-Abschluss und dieser Zeile
   stand nur der normale Absatzabstand - die beiden klebten aneinander,
   obwohl dazwischen das Thema wechselt. */
.draussen{ margin-top:clamp(44px,6vh,72px); }


/* DIE SCHILDER: EINE KARTE, TEXT DANEBEN (Marc, 10. September 2026).
   Drei nebeneinander waren zu viel, zwei nebeneinander auch - vor allem, weil
   die Einzelkarten-Codes sehr feine Raster haben und nebeneinander wie
   Rauschen wirken. Jetzt steht EINE Karte da, die zweite lugt hervor. Das
   Hervorlugen ist Absicht: Es sagt "da ist noch was", ohne dass man die Punkte
   darunter gelesen haben muss.
   Der Erklaertext steht daneben statt darunter - er gehoert zur Karte, nicht
   zum Abschnitt. */
.schild-zeile{ display:grid; gap:clamp(18px,3vw,40px); margin-top:26px;
  grid-template-columns:1fr; align-items:center;
  --schild-breit:min(320px, 100%); }
@media (min-width:820px){
  /* Die Spalte bekommt die KARTENBREITE, nicht "auto". Mit auto misst sich die
     Spalte am Maximalinhalt - und der ist bei einer Wischspur die Summe ALLER
     Karten, auch der ausgeblendeten. Der Text stand dadurch 750 Punkte weit
     rechts statt neben der Karte. */
  .schild-zeile{ grid-template-columns:var(--schild-breit) minmax(0,1fr);
    align-items:start; }
  .schild-text{ padding-top:8px; }
}
.schild-spur{ min-width:0; }
.schild-text .vor{ margin:0; max-width:36ch; }

/* Die Spur zeigt genau EINE Kartenbreite. Alles Weitere liegt rechts
   ausserhalb und wird gewischt oder ueber die Punkte geholt.
   .faelle bringt Scroll-Snap und die versteckte Bildlaufleiste schon mit. */
/* DAS SICHTFELD IST GENAU EINE KARTE BREIT (Marc, 10. September 2026:
   "die QR-Codes sind immer noch beide sichtbar ... das Sichtfeld muss
   kleiner"). Vorher lugte die zweite Karte hervor - gedacht als Hinweis,
   gelesen als zweite Karte. Jetzt steht eine da, die andere holt man ueber
   die Punkte oder durch Wischen. */
.schilder.faelle{ display:flex; grid-template-columns:none; gap:20px;
  margin:0; padding:2px 0 6px; scroll-padding-left:0;
  width:100%; max-width:100%; }
/* flex-basis 100% statt der Variablen: Mit der Variablen blieb die Karte ein
   paar Punkte schmaler als die Spur, und genau diese paar Punkte zeigten einen
   Splitter der zweiten Karte. Eine Karte fuellt das Sichtfeld jetzt exakt. */
.schilder.faelle .schild{ flex:0 0 100%; scroll-snap-align:start; height:auto; }
@media (min-width:820px){ .schilder.faelle{ --schild-breit:min(340px, 92%); } }
.schilder.faelle .qr-fertig{ width:min(220px,58vw); }
@media (max-width:640px){ .schilder.faelle .qr-fertig{ width:min(190px,52vw); } }

/* Die Punkte gehoeren an dieselbe Kante wie alles andere im Abschnitt -
   mittig standen sie allein und sahen aus, als gehoerten sie nirgendwohin. */
.schilder.faelle + .punkte{ justify-content:flex-start; margin-top:14px;
  padding-left:0; }


/* Die Knoepfe der drei Zielgruppen stehen auf einer Linie. Vorher hingen sie
   an der Textlaenge: Der laengste Absatz schob seinen Knopf nach unten, die
   kurzen standen weit darueber. */
.schief > div{ display:flex; flex-direction:column; }
.schief .knopf-zeile{ margin-top:auto; padding-top:18px; }

/* ============================================================== HERO-BUEHNE
   Marc, 10. September: "hero sitzt auf dem helleren block, also was ist qraki
   wuerde heller werden ... der textblock braucht aber luft nach unten, der
   darf nicht buendig aufsitzen ... unten ca. so viel luft wie gerade oben"

   Der hellere Block ist also der ABSCHNITT DARUNTER, nicht der Hero selbst.
   Der Hero steht auf dem Grundton, "Was ist Qraki" bekommt den hellen Ton -
   und das Buch haengt von oben darauf herunter. Umgekehrt (Hero hell) sah es
   aus, als schwebe der Block hinter der Figur statt unter ihr.

   Das Bild ist dafuer wie gemacht. Der Alphakanal der Vorlage staffelt sich
   am unteren Rand genau so:

       bis 94,8 %   eine durchgehende Flaeche (Wolken + Buch)
           95,3 %   drei Teile: Deckelende, Ruecken, Deckelende
           97,8 %   nur noch der Buchruecken, 88 px breit

   (Gemessen an hero_flat_trim.png, 1499x814. Die Flat-Fassung vom
   11. September ist 1,84:1 statt 2:1 - deshalb sind es jetzt 2,66 % der
   Breite statt 2,85 %: 4,9 % der HOEHE mal 814/1499.)

   Die Kante liegt bei 95,1 % der Bildhoehe: darunter haengen exakt linkes
   Deckelende, Ruecken und rechtes Deckelende. Nichts muss neu gezeichnet
   oder beschnitten werden - der Farbwechsel uebernimmt den Anschnitt. */
#was-ist-qraki{ background:color-mix(in srgb,var(--marke) 7%,var(--paper)); }

header.oben .helden-bild{ align-self:end; }
header.oben .helden-illu{ display:block; position:relative; z-index:1;
  width:100%; max-width:100%; }

/* Einspaltig teilt sich das Bild die Breite mit niemandem - 72 % waren eine
   Vorsichtsgrenze aus der Zeit, als es noch gerahmt war. Es gibt dort auch
   keine Kante zum Aufsitzen: das Bild steht ueber dem Text (order:-1). */
@media (max-width:899px){
  header.oben .helden-bild{ max-width:min(460px,86vw); margin-inline:auto; }
}

@media (min-width:900px){
  /* Der Text sitzt NICHT buendig auf der Kante - er behaelt unten dieselbe
     Luft, die er oben hat (derselbe clamp-Wert wie beim padding-top). Nur das
     BILD greift durch diese Luft hindurch nach unten: sein negativer Abstand
     ist die Luft PLUS der Ueberhang. */
  header.oben{ --luft:clamp(30px,7vh,72px); padding-bottom:var(--luft); }

  /* WARUM DER UEBERHANG IN PROZENT STEHT: Prozentwerte bei margin beziehen
     sich auf die BREITE des Elternelements, nie auf die Hoehe. Das Bild ist
     1,84:1, also sind 4,9 % seiner Hoehe genau 2,66 % seiner Breite. So bleibt
     die Kante bei jeder Fenstergroesse an derselben Stelle IM BILD; eine
     feste Pixelzahl saesse bei schmalen Fenstern mitten im Buch. Damit die
     Rechnung stimmt, muss das Bild so breit sein wie sein Kasten - deshalb
     sitzen die Breitengrenzen auf .helden-bild statt auf dem Bild. */
  header.oben .helden-illu{ margin-bottom:calc(-2.66% - var(--luft));
    /* Das Bild ragt ueber die Textspalte. Ohne das waere der Knopf
       "Entdecke Qraki" unter der durchsichtigen Bildecke nicht mehr
       anklickbar - ein Fehler, den niemand sieht und jeder merkt. */
    pointer-events:none; }
}

/* Der Hero steht auf einer Buehne - dann darf die Figur darauf auch Platz
   haben. Die Bahn ist bei 1080 gedeckelt, waehrend auf einem 1440er Schirm
   je 180 Punkte Aussenrand brachliegen. Das Bild waechst nach RECHTS in
   diesen Rand und nach LINKS ueber die Textspalte, bis es leicht in den
   Knopf "Entdecke Qraki" hineinragt. Die linke TEXTkante bleibt dabei exakt
   da, wo die Kante aller anderen Abschnitte liegt - sie ist das, woran das
   Auge sich beim Scrollen festhaelt.

   Beide Zuwaechse haengen an der Fensterbreite und sind bei 1124 Punkten
   null. Sonst schoebe das Bild bei mittleren Fenstern einen waagerechten
   Rollbalken heraus oder legte sich auf die Ueberschrift. */
@media (min-width:1124px){
  header.oben .helden-bild{ max-width:none;
    --rechts:min(120px, (100vw - 1124px) / 2);
    /* 160 waren es bis zum 10. September. Die Flat-Vorlage vom 11. ist auf
       ihr Motiv beschnitten - sie hat keinen durchsichtigen Rand mehr, den
       man ueber den Text schieben koennte. Bei 160 lag der gelbe Stern auf
       dem Wort "Qraki" im Knopf. Bei 100 beruehrt er dessen Kante, und genau
       das war gemeint. */
    --links:min(100px, (100vw - 1124px) / 2);
    width:calc(100% + var(--rechts) + var(--links));
    margin-left:calc(-1 * var(--links)); }
}

/* ================================================ DIE MITTE NEU UNTERTEILT
   Marc, 10. September 2026: "du vergisst, der Teil gehoert in einen dunklen
   Block ... den riesengrossen hellen Block wissen / bibliothek / qr codes
   koennen wir auch unterteilen, und den Bereichen mehr Luft geben".

   Vorher lief EIN heller Ton ueber 3227 Punkte - Wissen, Bibliothek, Schilder
   und "Du vergisst" verschmolzen zu einem einzigen Block, in dem vier
   Gedanken standen. Jetzt wechseln sich helle und dunkle Abschnitte ab, damit
   jeder Gedanke seine eigene Kante bekommt:

       Wissen ist ueberall   hell
       Die Bibliothek        dunkel
       Die Schilder          hell
       Du vergisst           dunkel

   Das biegt die Regel "freigestellte Grafik -> hellerer Grund" bei zwei
   Abschnitten. Marc hat sie fuer "Du vergisst" selbst aufgehoben; der
   Bibliothek geht es genauso, sonst haetten Wissen und Bibliothek weiter
   keine sichtbare Grenze. Die Grafiken tragen beides - sie sind hell und
   bunt, auf dem Grundton stehen sie sogar kontrastreicher. */
#wissen-ueberall, #bibliothek, #schilder, #wiederholen{
  padding-top:clamp(52px,9vh,96px); padding-bottom:clamp(52px,9vh,96px);
}

/* Die Schilder waren die zweite Bahn IN der Bibliothek und hatten deshalb nur
   Absatzabstand nach oben. Als eigener Abschnitt bringen sie ihren eigenen
   mit - der doppelte Abstand muss weg. */
#schilder > .bahn{ margin-top:0; }
#schilder .hoch{ margin-top:0; }

/* Der Fuehrungssatz klebte an der Karte: 15 Punkte zwischen "Vielleicht
   gleich ein bisschen mehr." und der Kartenkante. Die Karte ist hier das
   Ereignis, sie braucht Anlauf. */
.probe{ margin-top:clamp(26px,4.5vh,46px); }

/* --------------------------------- DER SCHLUSS-CTA STEHT AUF DER FUSSZEILE
   Marc, 10. September 2026, zwei Varianten: "cto sollte oben rausragen ...
   das Bild kann also viel groesser" - und dann "oder cta ragt unten raus,
   allerdings mittig ueber der Fusszeile, das ginge vll. auch".

   Gebaut ist die zweite. Die erste scheitert an der Vorlage, nicht am Layout:
   Damit das Bild oben UND unten aus dem Abschnitt ragt, muss es hoeher sein
   als der Abschnitt. Bei einem Textblock von 357 Punkten und Luft von 69 oben
   wie unten braeuchte es dafuer ueber 570 Punkte Hoehe, also gut 940 Punkte
   Breite. Die Vorlage hat 648 - bei 760 Punkten Anzeige ist die Schrift in der
   Sprechblase auf einem scharfen Schirm schon sichtbar weich (nachgemessen,
   nicht geschaetzt: 648 Quellpunkte auf 1520 Geraetepunkte). 440 ist die
   Grenze, bei der sie sauber bleibt.

   Nach UNTEN funktioniert es dagegen bei jeder Groesse, weil das Bild dort
   nicht hoeher sein muss als der Abschnitt - es haengt nur ueber die Kante.
   Wie im Hero: Der Text behaelt seine Luft, nur das Bild greift hindurch. */
@media (min-width:900px){
  #schluss{ --luft:clamp(52px,9vh,96px); --cta:440px; --ragt:53px;
    padding-top:var(--luft); padding-bottom:var(--luft); }
  #schluss .helden-bild{ justify-self:end; align-self:end; max-width:none;
    width:min(var(--cta), 100%); }
  /* -11 % der Bildbreite sind bei 648x395 rund 18 % der Bildhoehe: So viel
     steht unten ueber der Kante. Prozent statt Pixel, damit der Anteil bei
     jeder Fenstergroesse derselbe bleibt. */
  /* Ueber der Fusszeile, aber nicht auf ihr: 53 Punkte Ueberhang lassen ueber
     dem Satz "Qraki - Lernkarten ohne Konto..." noch 18 Punkte Luft. Mehr,
     und die Illustration schnitte ihn wieder an. */
  #schluss .helden-illu{ display:block; position:relative; z-index:1;
    width:100%; max-width:100%;
    margin-bottom:calc(-9% - var(--luft)); pointer-events:none; }
}

/* MITTIG UEBER DER FUSSZEILE (Marc, 10. September: "CTO sitzt nicht mittig
   ueber der Fusszeile"). Dafuer muss das Bild aus der Rasterspalte heraus: In
   seiner Spalte laesst es sich nur an deren Rand ausrichten, nie auf die Mitte
   des ABSCHNITTS. Absolut gesetzt bestimmt es ausserdem die Abschnittshoehe
   nicht mehr mit - die richtet sich nach dem Text, das Bild haengt unten drueber.

   Erst ab 1100: Bei 900 Punkten Fensterbreite ist der Abschnitt zu schmal
   dafuer - das mittige Bild stiess dort in die Zeile "Qraki ist offen. Fang
   irgendwo an." Darunter bleibt es deshalb in seiner Spalte rechts. */
@media (min-width:1100px){
  #schluss{ position:relative; }
  #schluss .helden-bild{ position:absolute; left:50%; bottom:calc(-1 * var(--ragt));
    transform:translateX(-50%); width:var(--cta); margin:0; }
  #schluss .helden-illu{ margin-bottom:0; }
}
@media (max-width:899px){
  #schluss .helden-bild{ max-width:min(360px,72vw); margin-inline:auto; }
  #schluss .helden-illu{ width:100%; max-width:100%; }
}

/* ------------------------------------------------ "MEHR?" BLEIBT, WO ES IST
   Marc, 10. September 2026: "beim Umdrehen der Schneckenkarte wandert der
   Mehr-Button mit dem Text, das ist komisch."

   Zwei Ursachen, eine davon war nicht die, die ich zuerst vermutet hatte.

   1. Auf Stufe 2 stand "Mehr?" ZWEIMAL untereinander: einmal als Marke,
      direkt darunter als Titel der aufgeklappten Box. Und weil die Box
      .mitte zusammenschiebt, sprang die Marke dabei um 157 Punkte nach oben -
      das war die Wanderung. Die Marke ist eine Aufforderung; sobald die Box
      offen ist, hat sie ihre Aufgabe erledigt.

   2. Damit bleibt sie nur noch auf Stufe 1 und 4 sichtbar - und die beiden
      sind gleich gebaut (Antwort, Qrakis Satz, Marke). Sie steht dort also
      von selbst an derselben Stelle, ohne dass man sie festnageln muss.

   Ein erster Versuch hat sie mit position:absolute an den unteren Rand von
   .mitte geheftet. Das stand zwar still, riss sie aber weit vom Text weg -
   sie hing allein am Kartenboden, waehrend der Text in der Mitte stand. Der
   Fluss ist hier richtig: Die Marke gehoert unter den Satz, auf den sie sich
   bezieht. */
.probe[data-stufe="2"] .mehr-marke,
.probe[data-stufe="5"] .mehr-marke{ display:none; }

/* ==========================================================================
   FUENFTER PASS, 14. September 2026 — QRAKI WORLD
   --------------------------------------------------------------------------
   Grundlage ist das Website-Briefing vom 14. September ("mehr Welt, nicht
   mehr UI") und qraki_world_02.png als Bildreferenz. Die Palette steht oben
   in :root; hier steht alles, was das Bild der Seite aendert:
     1. Flaechen: Bloecke stehen auf --surface statt auf einem Lila-Hauch.
        Dazu drei sehr leise Lichtflaechen (Hero, Wissen, Schluss) - Tiefe,
        kein Verlauf.
     2. Ein Knopfsystem: primaer (Lila), sekundaer (Flaeche mit Kante),
        leer (nur Schrift). Gleiche Hoehe, gleicher Radius, gleiche Dauer.
     3. Vier Welten, ein Tisch mit Decks, zwei Telefone, drei Posen -
        die neuen Abschnitte.
     4. Faecher als Zeile statt als Kachelraster.
   ========================================================================== */

/* ---------------------------------------------------------------- FLAECHEN */
/* Der Block ist jetzt --surface, nicht mehr "7 % Lila". Der Unterschied zum
   Grund ist klein und bleibt es: Der Block soll die Illustration tragen,
   nicht mit ihr konkurrieren. */
section.frei-block,
section.frei-block.laut,
main#oben section.anders.frei-block,
#was-ist-qraki{ background:var(--surface); }
/* Play together war "der lauteste" und bekam mehr Lila. Laut wird er jetzt
   durch das Bild, nicht durch die Flaeche - dieselbe Flaeche wie alle. */

/* Drei Lichtflaechen. Radial, sehr weich, hoechstens 14 % Lila bzw. 10 %
   Blau an der hellsten Stelle, und immer HINTER dem Inhalt. Sie sitzen dort,
   wo die Figur steht, damit das Licht von ihr auszugehen scheint. */
header.oben, #wissen-ueberall, #app, #decks{ position:relative; isolation:isolate; overflow:hidden; }
/* Der Schluss bleibt OHNE overflow:hidden - sein Bild haengt mit Absicht
   ueber die Kante in den Fuss (Marc, 10. September). Das Licht liegt trotzdem
   innerhalb, weil es an inset:0 haengt. */
#schluss{ position:relative; isolation:isolate; }
header.oben::before, #wissen-ueberall::before, #schluss::before, #app::before, #decks::before{
  content:""; position:absolute; inset:0; z-index:-1; pointer-events:none; }
header.oben::before{
  background:radial-gradient(60% 70% at 72% 62%, color-mix(in srgb,var(--marke) 9%,transparent), transparent 68%); }
#wissen-ueberall::before{
  background:radial-gradient(50% 65% at 28% 55%, color-mix(in srgb,var(--blue) 8%,transparent), transparent 68%); }
/* Die Decks stehen auf dem Grundton, nicht auf der Flaeche - sonst
   verschmoelzen sie mit "Wissen ist ueberall" dahinter zu einem Block. Ihr
   eigenes Licht ist blau, weil die Cover selbst schon viel Lila tragen. */
#decks::before{
  background:radial-gradient(45% 70% at 68% 45%, color-mix(in srgb,var(--blue) 7%,transparent), transparent 68%); }
#app::before{
  background:radial-gradient(45% 60% at 74% 50%, color-mix(in srgb,var(--marke) 8%,transparent), transparent 66%); }
#schluss::before{
  background:radial-gradient(40% 60% at 62% 75%, color-mix(in srgb,var(--marke) 8%,transparent), transparent 66%); }
/* Play together darf bunt sein - durch das Bild. Die Flaeche bekommt nur
   einen Hauch mehr Lila im Licht, keine helle Farbe. */
#qraki-party{ position:relative; isolation:isolate; overflow:hidden; }
#qraki-party::before{ content:""; position:absolute; inset:0; z-index:-1; pointer-events:none;
  background:radial-gradient(50% 70% at 30% 50%, color-mix(in srgb,var(--marke) 8%,transparent), transparent 66%); }
@media (max-width:899px){
  header.oben::before{ background:radial-gradient(70% 45% at 50% 22%, color-mix(in srgb,var(--marke) 9%,transparent), transparent 68%); }
}
/* Die Kante zwischen Hero und "Was ist Qraki" ist jetzt eine Flaechenkante,
   keine Farbkante - die Linie vor dem Schluss ist damit ueberfluessig. */
.schluss-neu{ border-top:none; }
main#oben section.typo{ border-top:1px solid var(--border); border-bottom:1px solid var(--border); }

/* -------------------------------------------------------------- KNOPFSYSTEM */
/* Drei Knoepfe, EIN Mass: 46 Punkte hoch, Radius 14, 160 ms. Vorher hatte
   jeder Knopf seine eigene Polsterung, und "Fuer Lehrkraefte" stand 2 Punkte
   niedriger als "App oeffnen" daneben. */
.knopf, .knopf-still, .knopf-leer, .mini{
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  min-height:46px; padding:0 20px; border-radius:14px;
  font-family:var(--disp); font-size:15.5px; font-weight:800; letter-spacing:-.01em;
  text-decoration:none; cursor:pointer; border:1px solid transparent;
  transition:background-color .16s ease, border-color .16s ease, color .16s ease,
    transform .16s ease, box-shadow .16s ease; }
.knopf{ background:var(--marke); color:var(--auf); }
.knopf-still{ background:var(--card); color:var(--ink); border-color:var(--border); }
.knopf-leer{ background:none; color:var(--accent); padding:0 10px; }
.knopf-zeile > .knopf-leer, .knopf-paar > .knopf-leer{ padding-left:0; }   /* buendig mit der Textkante, auch umgebrochen */
.knopf-leer::after{ content:"→" / ""; font-weight:700; }
.mini{ min-height:40px; padding:0 17px; font-size:14px; }
:is(.knopf,.knopf-still,.knopf-leer,.mini):focus-visible{ outline:2.5px solid var(--accent); outline-offset:3px; }
.knopf-paar, .knopf-zeile{ display:flex; flex-wrap:wrap; gap:10px 16px; align-items:center; }
@media (prefers-reduced-motion:reduce){
  .knopf, .knopf-still, .knopf-leer, .mini{ transition:none; transform:none !important; }
}

/* ----------------------------------------------------------- KOPFLEISTE */
.kopf-nav{ display:none; gap:2px; margin-right:6px; }
.kopf-nav a{ padding:9px 12px; border-radius:11px; font-size:14.5px; font-weight:800;
  color:var(--soft); text-decoration:none; transition:color .16s ease, background-color .16s ease; }
@media (hover:hover){ .kopf-nav a:hover{ color:var(--ink); background:color-mix(in srgb,var(--marke) 12%,transparent); } }
.kopf-nav a:focus-visible{ outline:2.5px solid var(--accent); outline-offset:2px; }
@media (min-width:900px){ .kopf-nav{ display:flex; } }
.kopf{ background:color-mix(in srgb,var(--background) 88%,transparent); border-bottom-color:var(--border); }

/* ---------------------------------------------------------- VIER WELTEN */
/* RUNDE FENSTER IN DIESELBE WELT (Marc, 16.09.2026, dasselbe Prinzip wie auf
   Home in der App - aber nicht stumpf skaliert: hier darf es grosszuegiger
   sein, und die Diagonale ueber zwoelf Spalten bleibt).

   Der Kreis ist eine ruhige Flaeche, kein Kasten: kein Rand, kein Schatten,
   kein Verlauf. Die Illustration sitzt darin und tritt bewusst darueber
   hinaus - beim Fernrohr und bei der Rakete am sichtbarsten, weil ihre
   Zeichnung dort hinauslaeuft.

   --optisch trug bisher geschaetzte Werte (.92 / 1 / .96 / 1.06). Jetzt
   gemessene: Qrakis Hoehe in jeder Datei, bezogen auf die dargestellte
   Kantenlaenge - die Figur ist in allen vier dieselbe und damit der Massstab,
   an dem das Auge "gleich gross" festmacht.
     Entdecken 61.1 %  ->  x0.910      Spielen 51.2 %  ->  x1.085
     Lernen    59.1 %  ->  x0.941      Wachsen 50.9 %  ->  x1.091 */
.welten{ display:grid; gap:clamp(30px,4.4vw,48px) clamp(16px,3vw,36px);
  margin-top:var(--block); grid-template-columns:1fr 1fr; }
.welt{ display:flex; flex-direction:column; align-items:flex-start; --optisch:1; }
/* KEINE KREISE (Marc, 16.09.2026). Der Rahmen bleibt als quadratische
   Buehne: Er haelt die vier Motive gleich gross und auf derselben
   Grundlinie - ohne ihn haengen sie an ihren zufaelligen Dateimassen.
   Nur die Flaeche ist weg. */
.welt-rahmen{ position:relative; display:block;
  width:min(86%, 210px); aspect-ratio:1; margin-bottom:18px; }
@media (min-width:820px){
  /* Vier Spalten statt zwei: dieselbe Buehne waere hier zu gross und der
     Text zu breit fuer eine ruhige Reihe. */
  .welt-rahmen{ width:min(100%, 172px); }
  .welt p{ max-width:26ch; }
}
/* Absolut, nicht im Fluss: Das Bild ist absichtlich groesser als sein Kreis.
   Als normales Kind haette es den Kreis mitwachsen lassen, und weil die vier
   Bilder verschieden hoch sind, staenden die vier Titel versetzt. */
/* 108 statt 126 Prozent: Die Motive duerfen kleiner sein, sie brauchen Luft
   (Marc). Ohne Kreis gibt es auch nichts mehr, worueber sie hinausragen
   muessten - die Groesse traegt jetzt allein der Ausgleich darunter. */
.welt-bild{ position:absolute; left:50%; top:50%;
  transform:translate(-50%,-50%) scale(var(--optisch));
  width:108%; height:108%; max-width:none; max-height:none;
  object-fit:contain; }
.welt:nth-child(1){ --optisch:.910; }   /* Fernrohr */
.welt:nth-child(2){ --optisch:.941; }   /* Schatzkiste */
.welt:nth-child(3){ --optisch:1.085; }  /* Quizkarten */
.welt:nth-child(4){ --optisch:1.091; }  /* Rakete */
.welt h3{ font-size:clamp(19px,2.4vw,23px); font-weight:800; margin:0 0 6px; letter-spacing:-.02em; }
.welt p{ font-size:15px; font-weight:600; color:var(--soft); max-width:30ch; line-height:1.5; margin:0; }
@media (max-width:639px){
  .welt h3{ font-size:18px; }
  .welt p{ font-size:14px; }
}
/* EINE REIHE (Marc, 16.09.2026: "die vier Welten auf der Website bitte in
   eine Linie - dann passts, oder 2x2, Hauptsache ordentlich").
   Vorher standen sie diagonal versetzt ueber zwoelf Spalten - das war als
   Komposition gedacht, las sich aber unordentlich, weil kein Titel und keine
   Grundlinie mit einer anderen fluchtete. Jetzt vier gleiche Spalten, eine
   Grundlinie, gleiche Abstaende. Unter 820px bleibt es bei 2x2. */
@media (min-width:820px){
  .welten{ grid-template-columns:repeat(4,1fr); gap:0 clamp(20px,2.6vw,40px);
    align-items:start; }
  .welt-bild{ transition:transform .2s ease; }
  .welt:hover .welt-bild{
    transform:translate(-50%,-50%) scale(var(--optisch)) translateY(-4px); }
}
@media (prefers-reduced-motion:reduce){ .welt-bild{ transition:none; } }

/* ---------------------------------------------------------- DER DECK-TISCH */
/* DREI COVER, EIN DREIECK (Final-Brief: "nur 3-5 wirklich starke Decks, nicht
   alle gleich wichtig"). Das mittlere steht hoeher und vorn, die beiden
   aeusseren leicht gedreht dahinter. Die Cover-Bausteine kommen aus dem Shop
   und bleiben dort unveraendert. Am Handy eine wischbare Reihe. */
.duo-decks > *{ min-width:0; }
.tisch{ display:flex; gap:12px; overflow-x:auto; padding:10px 4px 14px; min-width:0;
  scroll-snap-type:x mandatory; scrollbar-width:none; }
.tisch::-webkit-scrollbar{ display:none; }
.tisch .cover{ flex:0 0 150px; scroll-snap-align:start; }
.tisch .cover-fuss{ display:none; }
@media (min-width:820px){
  .duo-decks{ grid-template-columns:.8fr 1.2fr; align-items:center; }
  .tisch{ display:grid; grid-template-columns:repeat(3,1fr); gap:0 6px; overflow:visible;
    padding:34px 10px 18px; align-items:end; }
  .tisch .cover{ flex:none; width:100%; transition:transform .2s ease; }
  .tisch .cover:nth-child(1){ transform:rotate(-7deg) translate(14px,12px); }
  .tisch .cover:nth-child(2){ transform:translateY(-30px) scale(1.06); z-index:2; }
  .tisch .cover:nth-child(3){ transform:rotate(7deg) translate(-14px,12px); }
  .tisch .cover:hover{ transform:translateY(-8px); z-index:3; }
  .tisch .cover:nth-child(2):hover{ transform:translateY(-38px) scale(1.06); }
}
@media (prefers-reduced-motion:reduce){ .tisch .cover, .welt-bild{ transition:none; } }

/* ------------------------------------------------------ FRAGE UND ZAHLEN */
@media (min-width:820px){ .duo-frage{ grid-template-columns:.9fr 1.1fr; align-items:center; } }
.duo-frage .frei{ max-width:min(560px,100%); }
/* Die Zahlen sind echt (aus dem Katalog gezaehlt) und duerfen deshalb bleiben -
   aber leiser: kleiner, unter einer Zeile, nicht als Denkmal. */
.zahlen-ruhig{ margin-top:clamp(28px,4vh,44px); }
.zahlen-ruhig .zahlen{ margin-top:10px; justify-content:flex-start; gap:clamp(28px,6vw,72px); }
.zahlen-ruhig .zahlen b{ font-size:clamp(26px,4vw,34px); color:var(--ink); }
.zahlen-ruhig .zahlen span{ font-size:13px; }
.zahlen-ruhig .zahlen > div{ flex:0 0 auto; text-align:left; }

/* ------------------------------------------------------- FAECHER ALS ZEILE */
/* Dreizehn Kaesten waren ein Kachelraster - genau das UI-Gefuehl, das die
   Seite nicht haben soll. Als Zeile aus Marken bleibt jede Zahl lesbar und
   der Abschnitt wird 200 Punkte kuerzer. */
.faecher{ display:flex; flex-wrap:wrap; gap:8px 10px; margin-top:var(--block); }
.fach{ display:inline-flex; align-items:baseline; gap:7px; padding:8px 13px;
  border-radius:999px; background:color-mix(in srgb,var(--card) 70%,var(--background));
  border:1px solid var(--border); }
.fach b{ font-size:14.5px; font-weight:800; }
.fach span{ font-size:12.5px; font-weight:650; color:var(--soft); white-space:nowrap; }

/* ---------------------------------------------------------------- QR, KLEIN */
/* Ein Werkzeug, kein Hauptmoment (Final-Brief). Weniger Luft, kleinere Karte,
   kleinere Zeile. */
#schilder{ padding-top:clamp(34px,5vh,52px) !important; padding-bottom:clamp(34px,5vh,52px) !important; }
.hoch-klein{ font-size:clamp(18px,2.6vw,22px) !important; }
@media (min-width:820px){ .schild-zeile{ --schild-breit:min(270px,100%); } .schilder.faelle{ --schild-breit:min(270px,92%); } }
.schilder.faelle .qr-fertig{ width:min(170px,50vw); }
.schild-zeile{ margin-top:18px; }

/* ------------------------------------------------------------ DIE TELEFONE */
/* Zwei echte Screens, versetzt. Kein gezeichneter Rahmen: Der Screen traegt
   seine Rundung, der Schatten den Rest. */
.telefone{ position:relative; width:min(340px,86%); margin:0 auto; aspect-ratio:390/844; }
.duo-bild .telefon{ position:absolute; top:0; left:0; width:64%; max-width:64%; height:auto; border-radius:26px;
  box-shadow:0 18px 40px rgba(0,0,0,.45), 0 0 0 1px var(--border); }
.duo-bild .telefon-hinten{ left:auto; right:0; top:0; transform:rotate(5deg); opacity:.9; }
.duo-bild .telefon:not(.telefon-hinten){ top:9%; transform:rotate(-3deg); z-index:1; }
@media (min-width:820px){ .duo-app{ grid-template-columns:1.1fr .9fr; align-items:center; } }
.haken-liste{ list-style:none; padding:0; margin:18px 0 0; display:grid; gap:9px; }
.haken-liste li{ font-size:16px; font-weight:650; color:var(--ink); padding-left:28px; position:relative; }
.haken-liste li::before{ content:""; position:absolute; left:0; top:.3em; width:16px; height:16px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='10' fill='%2357C8A5'/%3E%3Cpath d='M5.5 10.5l3 3 6-6' stroke='%230C1B25' stroke-width='2.4' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat; }
main#oben .bahn-weit .duo-text > .haken-liste + .knopf-zeile,
main#oben .duo-text > .haken-liste + .knopf-zeile{ margin-top:22px; }

/* ------------------------------------------------------------ FUER WEN */
.wen{ display:grid; gap:clamp(22px,3vw,36px); margin-top:var(--block); grid-template-columns:1fr; }
@media (min-width:700px){ .wen{ grid-template-columns:repeat(3,1fr); } }
.wen-eins{ display:flex; flex-direction:column; align-items:flex-start; }
.wen-eins .pose{ width:104px; height:auto; margin:0 0 12px; }
.wen-eins h3{ font-size:20px; font-weight:800; margin:0 0 6px; max-width:16ch; }
.wen-eins p{ font-size:16px; font-weight:600; color:var(--soft); max-width:28ch; margin:0; }
.wen-eins .knopf-zeile{ margin-top:auto; padding-top:14px; }
.wen-eins .knopf-leer{ padding-left:0; }

/* ---------------------------------------------------------------- SCHLUSS */
.schluss-ruf{ margin-top:clamp(18px,3vh,28px); font-family:var(--disp); font-weight:800;
  font-size:clamp(19px,2.6vw,23px); color:var(--accent); letter-spacing:-.01em; }
#schluss .knopf-paar{ margin-top:16px; }
#schluss .helden-sub{ max-width:36ch; }
.fuss-beta{ margin-top:6px; font-size:13px; color:var(--leise); }

/* ------------------------------------------------------------ TYPOGRAFIE */
/* Weniger Groessen. H2 ueberall dieselbe Stufe; "gross" bleibt nur dem
   Gedaechtnis-Satz und dem Manifest. Fuehrungssaetze eine Stufe. */
main#oben h2{ font-size:clamp(28px,4.6vw,40px); line-height:1.08; letter-spacing:-.03em; }
main#oben h2.gross{ font-size:clamp(32px,6.2vw,50px); }
main#oben h2.claim-klein{ font-size:clamp(30px,5vw,44px); }
.fuehrung{ font-size:clamp(17px,2.4vw,19px); }
.mikro a{ color:var(--accent); text-decoration:none; }
.mikro a:hover{ text-decoration:underline; }

/* -------------------------------------------------------- SANFTE EINBLENDUNG */
/* Genau eine Bewegung fuer die ganze Seite: Bilder in den Abschnitten kommen
   beim Scrollen 12 Punkte von unten. Ohne JavaScript und ohne Beobachter -
   nur, wo der Browser Scroll-Timelines kennt; sonst steht alles einfach da. */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion:no-preference){
    main#oben section .frei, .telefone, .wen-eins .pose{
      animation:auftauchen linear both; animation-timeline:view(); animation-range:entry 0% entry 38%; }
  }
}
@keyframes auftauchen{ from{ opacity:.35; transform:translateY(12px); } to{ opacity:1; transform:none; } }

/* ================================ KNOEPFE: RUHIG, FLACH, HOVER NUR WO ES IHN GIBT
   Marc, 14. September 2026: "Qraki darf bunt und verspielt sein. Das Interface
   selbst muss trotzdem ruhig bleiben." Und davor, am 11.: "flat faend ich
   schoener ... nur Hover-Effekt, etwas dunkler, fertig".

   DER FEHLER, DER DAS AUSGELOEST HAT: Auf dem Telefon gibt es kein Zeigen.
   Ein :hover bleibt dort nach dem Antippen HAENGEN, bis man woanders hintippt.
   Der Geisterknopf bekam dabei seine Hover-Flaeche und behielt sie - aus einer
   ruhigen Textaktion wurde ein dunkler, gefuellter Kasten, der neben dem
   Primary wie ein zweiter Hauptknopf aussah. Genau das zeigte Marcs
   Bildschirmfoto vom 14. September; nachgestellt und bestaetigt.
   Deshalb steht JEDER Hover ab hier in (hover:hover) - er gilt nur auf
   Geraeten mit Zeiger. Touch bekommt gar keinen.

   WAS HIER SONST AUFRAEUMT: Es standen drei Saetze Knopfregeln uebereinander.
   Einer machte den Primary beim Zeigen HELLER und hob ihn an, ein spaeterer
   machte ihn dunkler - welcher gewann, entschied allein die Reihenfolge im
   Stylesheet. Die aelteren sind jetzt geloescht, nicht ueberschrieben.

   DIE DREI TYPEN, klar getrennt:
     .knopf        Hauptaktion. Volle Markenfarbe, weisse Schrift, flach.
     .knopf-still  Zweite Aktion mit Gewicht. Flaeche in --card, ruhiger Rand.
     .knopf-leer   Geisterknopf. Nur Schrift in Lila, keine Flaeche im Ruhezustand.
   ========================================================================= */
.knopf, .knopf-still, .knopf-leer, .quiz-knopf, .mini, .probe .mehr-marke{
  box-shadow:none;
  transition:background-color var(--dauer) ease, border-color var(--dauer) ease,
             color var(--dauer) ease;
}
@media (prefers-reduced-motion:reduce){
  .knopf, .knopf-still, .knopf-leer, .quiz-knopf, .mini, .probe .mehr-marke{ transition:none; }
}
/* "Mehr?" ist eine Marke, kein Knopf - sie bekommt nur die Kante ab. */
.probe .mehr-marke{ background:color-mix(in srgb, var(--marke) 14%, transparent); }

@media (hover:hover){
  /* Beim Zeigen etwas dunkler - und sonst nichts. Kein Anheben, kein
     Aufleuchten. --qraki-tief traegt weisse Schrift mit 7,10 statt 5,19, die
     Beschriftung wird also besser lesbar, nicht schlechter. */
  .knopf:hover, .mini:hover{ background:var(--qraki-tief); }
  .knopf-still:hover{ background:var(--hoch); border-color:var(--line); }
  /* DER GEISTERKNOPF BEKOMMT GAR KEINE FLAECHE (14. September 2026).
     Er hatte eine, und genau daran ist er zweimal aufgefallen: Auf dem
     Telefon blieb sie nach dem Antippen haengen, und auch mit Zeiger las
     sich der gefuellte Kasten neben dem Primary wie ein zweiter Hauptknopf.
     Referenzbild 02 zeigt es. Eine Aktion, die leichter sein soll als die
     Hauptaktion, darf beim Zeigen nicht schwerer werden als diese im
     Ruhezustand. Uebrig bleibt, was ein Textlink immer schon konnte: Die
     Schrift wird heller und bekommt eine Linie. */
  .knopf-leer:hover{ color:var(--ink); text-decoration:underline;
    text-underline-offset:4px; text-decoration-thickness:2px;
    text-decoration-color:var(--marke); }
  .quiz-knopf:hover:not(:disabled){
    background:color-mix(in srgb, var(--marke) 16%, var(--card)); }
}

/* Die grosse Zahl steht in --ink, nicht in --accent (Marc, 11. September:
   "passt hier die Farbe der Kartenzahl zu unserem System? Sieht komisch aus,
   weil unten sind sie grau"). Es ist zweimal dieselbe Sache - eine grosse
   Zahl mit kleiner Beschriftung darunter - und sie stand in zwei Farben. */
.zahlen b{ color:var(--ink); }
