/* OM Studios — Retro Future
   Ein Stylesheet für alle Seiten. Schriften liegen lokal (siehe /assets/fonts). */

@font-face{font-family:"Syne";src:url("fonts/syne-800.woff2?v=latein") format("woff2");
  font-weight:800;font-style:normal;font-display:swap}
@font-face{font-family:"Syne";src:url("fonts/syne-600.woff2?v=latein") format("woff2");
  font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Outfit";src:url("fonts/outfit-300.woff2?v=latein") format("woff2");
  font-weight:300;font-style:normal;font-display:swap}
@font-face{font-family:"Outfit";src:url("fonts/outfit-400.woff2?v=latein") format("woff2");
  font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Outfit";src:url("fonts/outfit-600.woff2?v=latein") format("woff2");
  font-weight:600;font-style:normal;font-display:swap}
/* Die Markenschrift der Schwestermarke. Nur für die Wortmarke im
   Kopf, nicht für Fließtext. Selbst gehostet wie die anderen fünf —
   die Datenschutzerklärung sagt zu, dass nichts an fremde Server
   geht, und das Ausrollskript prüft das. */
@font-face{font-family:"Oxanium";src:url("fonts/oxanium-800.woff2?v=latein") format("woff2");
  font-weight:800;font-style:normal;font-display:swap}

:root{
  --night:#05060A;
  --night-2:#0D1119;
  --night-3:#141A26;
  --line:#1E2534;
  --line-2:#2C3446;
  --text:#EDF1F7;
  --text-2:#9AA4BA;
  /* Aufgehellt am 3. September. #66708A erreichte gegen die drei
     Hintergründe nur 4,10 / 3,82 / 3,53 zu 1 und lag damit unter den
     4,5, die die Norm für Fließtext verlangt - auf 78 Stellen. Dies
     ist der kleinste Wert, der auf allen dreien besteht: 4,54. */
  --text-3:#7682A0;
  --cy:#3FD9EB;          /* Marke OM Studios */
  --cy-dim:#0C2E36;
  --amber:#F5A524;       /* alles für Creator */
  --amber-dim:#33260C;
  --em:#00FFB2;          /* Schwestermarke TriggerTok, exakt --tt-signal */
  /* Hier stand #2EE6A8 - ein weicheres, entsättigtes Mint. Wer die
     Schwestermarke von einer Seite zur anderen verfolgt, sah sie die
     Farbe wechseln. */
  --em-dim:#0A3128;
  --lime:#B4E01F;        /* Schwestermarke OM Records */
  --hit:#FF3D71;         /* sparsam: Leben, Season-Ende */
  --px:4px;              /* das Raster */
  --syne:"Syne",system-ui,-apple-system,"Segoe UI",sans-serif;
  --outfit:"Outfit",system-ui,-apple-system,"Segoe UI",sans-serif;
  --oxanium:"Oxanium",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
}

*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}

/* ---------- Die Bildlaufleiste gehört zur Seite ---------- */
/* Auf nachtschwarzem Grund liefert das Betriebssystem eine hellgraue Leiste -
   der hellste Streifen der ganzen Seite, und ausgerechnet am Rand. color-scheme
   sagt dem Browser, dass hier alles dunkel ist; davon profitieren auch
   Auswahlfelder und jede andere Leiste, die der Browser selbst zeichnet.
   Danach die Farben ausdrücklich: erst der neue Standard, dann WebKit für
   alles, was ihn noch nicht kennt. Der Rand am Griff ist kein Rand, sondern
   Hintergrundfarbe - so entsteht Luft um den Griff, ohne dass die Spur
   sichtbar wird. Eckig, wie alles andere auf dieser Seite. */
:root{color-scheme:dark}
/* Dünn und in Amber. Der Griff ist 8px schmal statt 12px, dafür trägt er
   die Markenfarbe - sichtbar, aber nicht laut, weil er nur 2px Luft zum Rand
   lässt und eckig bleibt wie alles andere.
   Firefox kennt nur `thin` und kein :hover für die Leiste, bekommt also den
   Ruhezustand; WebKit hellt beim Überfahren auf. */
html{scrollbar-width:thin;scrollbar-color:var(--amber) transparent}
::-webkit-scrollbar{width:12px;height:12px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--amber);border:2px solid var(--night);
  background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:#FFC155;border-color:var(--night);
  background-clip:padding-box}
::-webkit-scrollbar-thumb:active{background:var(--cy)}
::-webkit-scrollbar-corner{background:transparent}
html,body{scroll-behavior:smooth}
/* Fällt der Scroll-Test in seite.js durch, setzt er diese Klasse und die
   Seite springt hart. Lieber ohne Animation als ohne Funktion. */
html.harte-sprünge,html.harte-sprünge body{scroll-behavior:auto}
/* Der Messkasten dieses Tests. Er steht hier und nicht im JavaScript, damit
   die Seite ohne 'unsafe-inline' in der Content-Security-Policy auskommt -
   ein style-Attribut aus dem Skript wäre sonst blockiert, der Kasten bliebe
   unformatiert und würde die Seite beim Laden kurz aufreißen. */
.scroll-probe{position:fixed;top:0;left:-9999px;width:100px;height:100px;
  overflow:auto;pointer-events:none;visibility:hidden}
.scroll-probe>div{height:600px}
@media (prefers-reduced-motion:reduce){
  html,body{scroll-behavior:auto}
  /* ⚠️ animation-delay gehört dazu. Der Blitz im Kopf zündet über elf
     Zellen mit Verzögerungen bis 0,3 s - ohne diese Zeile erscheinen sie
     auch bei abgeschalteter Bewegung nacheinander statt sofort. Die Dauer
     auf null zu setzen reicht also nicht; die Verzögerung ist selbst die
     Bewegung. Am 5.9. beim Nachprüfen gefunden. */
  *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;
    animation-delay:0s !important;transition-duration:.001ms !important;transition-delay:0s !important}
}

body{
  background:var(--night);color:var(--text);
  font-family:var(--outfit);font-size:17px;line-height:1.65;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;position:relative;
}

/* Sprites laufen hinter allem */
/* Die Anzeigegröße des Hintergrund-Canvas steht hier, nicht im Skript:
   Die Content-Security-Policy lässt kein style-Attribut aus dem
   JavaScript zu. width/height müssen ausdrücklich stehen - ein
   ersetztes Element mit width:auto nimmt sonst seine Pufferauflösung
   als Anzeigegröße, und auf Bildschirmen mit doppelter Punktdichte
   wäre der Canvas doppelt so breit wie das Fenster. */
#bg{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;
  /* Der Hintergrund ist nicht einfach schwarz, sondern gebaut. Zuunterst das
     Raster: dieselbe Konstruktionsregel, aus der Zeichen, Symbole und Figuren
     gebaut sind - 44px, also elf Einheiten des 4px-Rasters. Darüber ein
     Abdunkeln zu den Rändern, das den Blick in der Mitte hält. Die Figuren
     zeichnet sprites.js oben drauf; die Leinwand selbst ist durchsichtig. */
  background-image:
    radial-gradient(128% 96% at 50% 38%, transparent 46%, rgba(0,0,0,.62)),
    repeating-linear-gradient(to right, rgba(63,217,235,.05) 0 1px, transparent 1px 44px),
    repeating-linear-gradient(to bottom, rgba(63,217,235,.05) 0 1px, transparent 1px 44px)}
/* .top ist ausgenommen, weil diese Regel wegen :not(#bg) eine höhere
   Spezifität hat als jede .top-Regel - position:sticky wäre sonst
   überschrieben. (Bis zum 5.9.2026 stand hier auch .swap; die Leiste ist
   im Kopf aufgegangen.) */
body > *:not(#bg):not(.top):not(.sprung){position:relative;z-index:1}

.wrap{max-width:1160px;margin:0 auto;padding:0 26px}

h1,h2,h3{font-family:var(--syne);font-weight:800;letter-spacing:-.025em;line-height:1.04;text-wrap:balance}
h1{font-size:clamp(2.2rem,6.4vw,4.6rem)}
h2{font-size:clamp(1.7rem,3.6vw,2.7rem)}
h3{font-size:1.28rem;font-weight:600;letter-spacing:-.015em}
p{margin:0 0 16px;max-width:68ch}
a{color:inherit;text-decoration:none}
a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--cy);outline-offset:3px;border-radius:3px}

/* Sprunglink. Wer mit der Tastatur kommt, hat sonst die Umschaltleiste und die
   ganze Navigation vor sich, bevor der Inhalt anfängt - auf jeder Seite neu.
   Unsichtbar, bis er den Fokus bekommt. .sprung ist oben aus der
   Sammelregel ausgenommen, sonst überschriebe deren position:relative das
   position:fixed hier. */
.sprung{position:fixed;left:-9999px;top:8px;z-index:100;
  background:var(--cy);color:#04262C;font-family:var(--syne);font-weight:800;
  font-size:13px;letter-spacing:.06em;text-transform:uppercase;padding:12px 20px}
.sprung:focus{left:8px}
strong{font-weight:600}

.eyebrow{
  font-family:var(--syne);font-size:11px;font-weight:600;letter-spacing:.2em;
  text-transform:uppercase;color:var(--text-3);
}

/* ---------- Der Kopf trägt beide Marken ----------
   Bis zum 5. September saß über der Navi eine eigene Leiste, der
   Marken-Umschalter (40 px). Zusammen waren das 112 px, bevor der erste
   Inhalt kam - und die Navi war in der Mitte leer. Jetzt steht beides in
   EINER Reihe: die Sperrung links, die Schwestermarke daneben, die Verweise
   rechts. 84 px statt 112.

   ⚠️ Auf triggertok.de steht die alte, gespiegelte Leiste weiter (im
   JS-Bündel nachgewiesen: "om-studios.de", "Auch von uns"). Die beiden
   Seiten sind damit vorerst unsymmetrisch. Der Brief mit der neuen Fassung
   liegt in `marke/triggertok-header.md`.

   Drei Regeln, ohne die aus "giftig" ein Neonschild wird:
     1. Es bewegt sich immer nur EINE Sache.
     2. Harte Kanten. Kein Glimmen, kein Verlauf, kein Schatten.
     3. Alles springt auf dem Raster, nichts gleitet.                     */

/* Der Kopf darf breiter sein als der Inhalt. Gemessen: Sperrung 243 +
   Schwestermarke rund 200 + Navi rund 660 sind gut 1100, der Inhalts-Wrap
   gibt aber nur 1136 her - das reißt bei der ersten Schriftänderung.
   Ein Kopfbereich ist kein Fließtext, er darf die vollen Ränder nutzen. */
.top .wrap{max-width:1320px}

/* Die Schwestermarke. Sie ruht als Zeichen, Name und der Zeile, auf die es
   ankommt: "Auch von uns". Ohne sie liest sich der Verweis wie Fremdwerbung -
   genau das soll er nicht. */
.tt{position:relative;display:flex;align-items:center;gap:11px;height:80px;
  flex:none;padding:0 20px;color:var(--text-3);text-decoration:none;
  transition:background .16s steps(2),color .16s steps(2)}
.tt:hover,.tt:focus-visible{background:var(--em-dim);color:var(--em)}
.tt-text{display:flex;flex-direction:column;gap:3px}
/* ⚠️ Oxanium, nicht Syne. Das ist die Markenschrift der
   Schwestermarke; in unserer Hausschrift gesetzt war es unser Wort
   über ihrem Zeichen. Kantige, breit laufende Groteske — deshalb
   auch nur 0,02em Laufweite statt der 0,14em, die Syne braucht. */
.tt-name{font-family:var(--oxanium);font-size:15px;font-weight:800;
  letter-spacing:.02em;text-transform:uppercase;white-space:nowrap;
  display:inline-flex;align-items:center;line-height:1}
/* Der Überschnitt. Ein Blitz mit Luft ringsum wirkt als
   Trennzeichen, einer der sich verzahnt als Teil des Wortes. */
.tt-name .blitz{margin:0 -2px}
.tt-hint{font-family:var(--syne);font-size:9.5px;font-weight:600;
  letter-spacing:.16em;text-transform:uppercase;white-space:nowrap;
  color:var(--text-3)}
.tt:hover .tt-hint,.tt:focus-visible .tt-hint{color:var(--em);opacity:.72}
/* Hier stand kurz eine Beschreibung, die beim Überfahren aufklappte
   ("Overlays fuer TikTok Live"). Sie ist wieder raus: Selbst im breitesten
   Kopf (1320) bleiben neben Sperrung, Marke und Navi nur rund 195 px, sie
   braucht 320 - und schob damit die Verweise aus dem Bild. Eine Bewegung,
   die eine zweite auslöst, ist keine Geste mehr, sondern ein Ruckeln.
   Was sie sagen sollte, steht jetzt im aria-label des Verweises. */

/* Der Blitz sitzt auf demselben Raster wie das OM-Zeichen: Zellen von zwei
   Einheiten, sieben Spalten, elf Zeilen. Er zündet EINMAL beim Laden von
   oben nach unten und ruht danach - ein Zeichen, das dauernd zappelt,
   kämpft mit dem Text um Aufmerksamkeit, und der Text verliert. */
/* 1,7-mal die Schriftgröße: der Blitz ragt bewusst oben und unten
   aus der Zeile. Bei 15px Wortmarke sind das 26px — vorher stand er
   mit 30px daneben, die Kopfzeile behält also ihr Gewicht. */
.blitz{flex:none;width:auto;height:26px;display:block}
/* Das Zeichen ist jetzt EIN Pfad. Die elf gestaffelten
   Verzögerungen fielen damit weg - sie gehörten zu den elf
   Rechtecken der alten Pixeltreppe. Gezündet wird weiterhin
   einmal beim Laden, danach ruht es. */
.blitz-mint{fill:var(--em)}
/* Der Keil ist die Reaktionsfarbe der Schwestermarke (--tt-reaktion
   drüben). Er färbt sich NICHT beim Überfahren mit — ein
   Markenzeichen wechselt nicht die Farbe, weil die Maus vorbeikommt. */
.blitz-keil{fill:#FF2BD6}
/* ⚠️ OHNE `fill`. Solange der Blitz einfarbig war, konnte die Animation
   die Farbe mitführen. Mit zwei Pfaden färbte sie am Ende BEIDE auf
   var(--em) — der magentafarbene Keil wäre nach einer halben Sekunde
   grün geworden. Gezündet wird jetzt nur über die Deckkraft. */
@keyframes blitz-zuenden{0%{opacity:.1}38%{opacity:1}100%{opacity:1}}
@keyframes blitz-zuenden2{0%{opacity:.1}38%{opacity:1}100%{opacity:1}}
.blitz path{animation:blitz-zuenden .5s steps(3) both}
/* ⚠️ `both` hält den LETZTEN Keyframe — wer Bewegung abbestellt
   hat, sähe aber den ERSTEN, und der steht auf opacity .1. Ohne
   diese Regel bliebe das Zeichen dort fast unsichtbar. */
@media (prefers-reduced-motion:reduce){
  .blitz path{animation:none;opacity:1}
}
/* Neu zünden beim Überfahren: ein zweiter, gleicher Name startet die
   Animation neu. Ohne JavaScript, ohne Klassenwechsel. */
.tt:hover .blitz path,.tt:focus-visible .blitz path{animation-name:blitz-zuenden2}

/* Die Fuge zwischen den beiden Marken. Vier Pixel, wie alles hier. */
.kopf-fuge{flex:none;width:2px;align-self:stretch;margin:27px 0;background:var(--line-2)}

/* ---------- Kopfzeile ---------- */
/* ⚠️ KEIN backdrop-filter. Er stand hier bis zum 5.9.2026 und war der Grund,
   warum die Menü-Schublade nicht funktionierte: Ein Element mit
   backdrop-filter (ebenso filter, transform oder will-change) wird zum
   Bezugsrahmen für alles, was darin `position:fixed` ist. Die Schublade und
   ihr Verdunkler hängen dann an der Kopfzeile statt am Fenster - 340px breit,
   aber nur 70px hoch, und der Verdunkler deckte nur die Leiste ab.

   Ersatz: mehr Deckkraft statt Unschärfe. Bei .94 schimmert der Inhalt
   darunter nicht mehr durch, und es passt ohnehin besser - eine Unschärfe
   ist der weichste Effekt, den es gibt, und diese Seite ist eckig. */
.top{position:sticky;top:0;z-index:60;background:rgba(5,6,10,.94);
  border-bottom:var(--px) solid var(--line)}
/* Am 3. September verkleinert: 88 auf 72, das Zeichen von 56 auf 44. Die
   Leiste nahm mit 88px zusammen mit dem Umschalter darüber 129px vom
   Bildschirm - auf einem Notebook fast ein Sechstel der Höhe, bevor der
   erste Inhalt kam. Das Zeichen ist bei 44px immer noch 243px breit und
   damit gut lesbar.
   ⚠️ Wer diese Höhe ändert, ändert `scroll-margin-top` mit - beide
   Vorkommen, hier unten und im 900px-Block am Dateiende. */
.nav{display:flex;align-items:center;height:80px;gap:0}
.brand{position:relative;display:flex;align-items:center;height:80px;
  padding-right:26px;flex:none}
/* Der Markenbalken blinkt nicht um, er wird UEBERGEBEN: der eine schrumpft
   auf null, während der andere auf volle Breite wächst - beides in acht
   Rastersprüngen. Ein Element trägt damit die ganze Aussage "du bist hier,
   das daneben gehört auch uns", ohne dass sie irgendwo steht.
   Das Wachsen kommt ohne :has() aus, damit es auch in älteren Browsern
   passiert; nur das Schrumpfen der Gegenseite braucht :has().

   Wie das ohne :has() aussieht, ist am 5.9.2026 nachgesehen worden (Regel in
   Chrome zur Laufzeit gelöscht): Beide Balken stehen dann GLEICHZEITIG - der
   cyanfarbene bleibt in voller Breite, während der emeraldfarbene wächst.
   Aus der Übergabe wird ein Nebeneinander, und zwei Marken sehen kurz beide
   aktiv aus. Nicht kaputt, aber die Geste ist weg. :has() ist Baseline 2023
   (Firefox ab 121, Safari ab 15.4), das trifft also nur wirklich alte
   Browser.

   ⚠️ Der naheliegende Ausweg wäre, den TriggerTok-Verweis im Quelltext VOR
   die Sperrung zu setzen und optisch zurückzuordnen - dann genügt der
   Geschwister-Kombinator `~`, den jeder Browser kann. Das ist bewusst NICHT
   gemacht: Damit erreichte die Tabulatortaste die Schwestermarke vor dem
   eigenen Startseiten-Verweis. Eine falsche Reihenfolge für alle, die mit
   der Tastatur gehen, wäre ein höherer Preis als eine fehlende Geste in
   Browsern von vor 2023. */
.brand::after,.tt::after{content:"";position:absolute;left:0;
  bottom:calc(-1 * var(--px));height:var(--px);transition:width .3s steps(8)}
.brand::after{width:100%;background:var(--cy)}
.tt::after{width:0;background:var(--em)}
.tt:hover::after,.tt:focus-visible::after{width:100%}
.nav:has(.tt:hover) .brand::after,.nav:has(.tt:focus-visible) .brand::after{width:0}
/* Die Sperrung blitzt beim Überfahren einmal auf - zwei Sprünge, kein
   Verlauf. */
@keyframes marke-blitz{0%{filter:none}50%{filter:brightness(2.6)}100%{filter:none}}
.brand:hover .zeichen,.brand:focus-visible .zeichen{animation:marke-blitz .2s steps(2)}
/* Die Sperrung: Zeichen, eine Strichstärke Abstand, dann "STUDIOS" - die
   Masse stehen im Markenblatt und werden von marke/zeichen-bauen.js
   gerechnet. Bei 56px Höhe ist sie 309px breit. */
.brand .zeichen{height:44px;width:auto;display:block;flex:none}
/* Die Navi spricht jetzt dieselbe Sprache wie der Rest: Versalien in Syne mit
   Sperrung, wie Umschalter, Augenbrauen und Kennwerte. Vorher stand hier
   15px Fließtext - sauber, aber ohne Stimme.

   ⚠️ Höhe und Rahmen der Leiste bleiben unangetastet. Sie stecken in der
   41/134px-Rechnung für die Sprungmarken am Ende dieser Datei; wer sie
   anfasst, verschiebt jeden Ankersprung der Seite. Das Polster unten ändert
   daran nichts, weil `.nav` eine feste Höhe hat. */
.nav-links{margin-left:auto;flex:none;display:flex;gap:20px;font-family:var(--syne);
  font-size:12.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:var(--text-2)}
/* ⚠️ KEIN padding-bottom hier. Es stand am 3. September kurz drin, damit der
   Balken darunter Platz hat - und hat den Text nach oben gerückt: Bei
   `align-items:center` zentriert der Flexbau die Box MIT Polster, die Schrift
   sitzt dann um die halbe Polsterhöhe zu hoch. Der Balken hängt deshalb
   über `bottom` unter der Zeile, ohne die Box zu vergrößern. */
.nav-links a{position:relative;transition:color .18s ease}
.nav-links a:hover,.nav-links a:focus-visible{color:var(--text)}
/* Der Balken sitzt auf dem 4px-Raster und blendet NICHT weich ein: hart an,
   hart aus. Weiche Übergänge sind die Sprache runder Oberflächen - diese
   Seite ist eckig. */
.nav-links a::after{content:"";position:absolute;left:0;right:0;bottom:-13px;
  height:var(--px);background:var(--cy);opacity:0}
.nav-links a:hover::after,.nav-links a:focus-visible::after{opacity:1}
/* Der Sprachwechsel ist kein Seitenbereich, sondern ein Werkzeug - eine Stufe
   leiser, und in Amber statt Cyan, damit er sich von den Bereichen abhebt. */
.nav-links a[hreflang]{color:var(--text-3)}
.nav-links a[hreflang]:hover,.nav-links a[hreflang]:focus-visible{color:var(--amber)}
.nav-links a[hreflang]::after{background:var(--amber)}

/* ⚠️ DER EINE PUNKT, DER GARANTIERT OHNE SCROLLEN ZU SEHEN IST.
   Gemessen am 9.9.2026: der Creator-Knopf im Hero sitzt bei 914 px, die Falz
   auf einem 889 px hohen Fenster darüber - er ist von 4.309 px hierher
   gerückt, aber eben immer noch knapp DARUNTER. Der Navigationspunkt steht
   dagegen bei 30 px und ist auf jedem Fenster da.
   Deshalb trägt er Amber wie das Angebot selbst, und der Balken darunter
   steht dauerhaft statt nur beim Zeigen - ein Wort in derselben Farbe wie
   die übrigen fünf ist kein Hinweis, sondern ein Listeneintrag.
   Nicht mehr als das: kein Kasten, kein Blinken. Die Zeile trägt sechs
   Punkte, und wer einen davon schreit, macht die anderen unleserlich. */
.nav-links a.nav-hebel{color:var(--amber)}
.nav-links a.nav-hebel:hover,.nav-links a.nav-hebel:focus-visible{color:#FFD98A}
.nav-links a.nav-hebel::after{background:var(--amber);opacity:.5}
.nav-links a.nav-hebel:hover::after,.nav-links a.nav-hebel:focus-visible::after{opacity:1}

/* ---------- Menü für schmale Bildschirme ----------
   Ohne JavaScript, über <details>. Seit dem 5.9.2026 keine Klappliste unter
   dem Knopf mehr, sondern eine Schublade an der rechten Kante: volle Höhe,
   eigener Grund, die Seite dahinter abgedunkelt.

   ⚠️ Sie fährt NICHT herein. Das ist dieselbe Regel wie beim Balken unter den
   Navi-Verweisen: hart an, hart aus. Weiche Übergänge sind die Sprache runder
   Oberflächen, und diese Seite ist eckig. Dazu kommt, dass <details> seinen
   Inhalt im geschlossenen Zustand gar nicht rendert — ein Hereinfahren
   bräuchte @starting-style oder ein Kästchen statt <details>, und beides wäre
   teurer als der Gewinn. */
.menu{display:none;flex:none}
.menu summary{list-style:none;cursor:pointer;position:relative;z-index:3;
  display:flex;align-items:center;gap:12px;
  font-family:var(--syne);font-size:11.5px;font-weight:800;letter-spacing:.16em;
  text-transform:uppercase;color:var(--text-2);
  padding:12px 15px;background:var(--night-2);border:var(--px) solid var(--line);
  transition:color .16s steps(2),border-color .16s steps(2),background .16s steps(2)}
.menu summary::-webkit-details-marker{display:none}
.menu summary:hover{color:var(--cy);border-color:var(--cy-dim);background:var(--night-3)}
.menu[open] summary{color:var(--cy);border-color:var(--cy);background:var(--cy-dim)}

/* Das Zeichen: drei Balken auf dem Raster, die beim Öffnen zum Kreuz werden.
   Der mittlere ist der Hintergrund des Feldes, die äußeren sind ::before und
   ::after — nur so lassen sich zwei davon einzeln drehen. Die Drehung läuft in
   drei Sprüngen. Ein Kreuz ist von Natur aus schräg; das ist die eine Stelle,
   an der die Seite eine Diagonale zulässt, wie beim Blitz. */
.menu-zeichen{position:relative;flex:none;width:20px;height:16px;
  background:linear-gradient(currentColor,currentColor) left center/20px var(--px) no-repeat;
  transition:background-size .18s steps(3)}
.menu-zeichen::before,.menu-zeichen::after{content:"";position:absolute;left:0;
  width:20px;height:var(--px);background:currentColor;
  transition:top .18s steps(3),transform .18s steps(3)}
.menu-zeichen::before{top:0}
.menu-zeichen::after{top:12px}
.menu[open] .menu-zeichen{background-size:0 var(--px)}
.menu[open] .menu-zeichen::before{top:6px;transform:rotate(45deg)}
.menu[open] .menu-zeichen::after{top:6px;transform:rotate(-45deg)}

/* Die abgedunkelte Seite dahinter. Nur Bild, nicht klickbar — zum Schließen
   dient derselbe Knopf, der geöffnet hat, und der liegt darüber. */
.menu[open]::before{content:"";position:fixed;inset:0;background:rgba(5,6,10,.84);z-index:1}
.menu-panel{position:fixed;top:0;right:0;bottom:0;z-index:2;
  width:min(340px,84vw);overflow-y:auto;overscroll-behavior:contain;
  background:var(--night-2);border-left:var(--px) solid var(--cy);
  padding:96px 0 34px;display:flex;flex-direction:column}
.menu-titel{padding:0 24px 9px;font-family:var(--syne);font-size:10.5px;font-weight:600;
  letter-spacing:.2em;text-transform:uppercase;color:var(--amber)}
/* "Rechtliches" wird nach unten gedrückt, statt der Schublade eine tote
   untere Hälfte zu lassen. Zwei verankerte Blöcke - Bereiche oben, Pflicht
   unten - sind ruhiger als eine Liste mit Luft darunter, und es braucht kein
   Füllwerk dafür. */
.menu-titel--später{margin-top:auto;padding-top:30px}
.menu-panel a{position:relative;padding:15px 24px;font-family:var(--syne);
  font-size:15px;font-weight:600;letter-spacing:.03em;color:var(--text-2);
  border-top:1px solid var(--line)}
.menu-panel a:last-child{border-bottom:1px solid var(--line)}
.menu-panel a:hover,.menu-panel a:focus-visible{background:var(--night-3);color:var(--text)}
/* Derselbe Balken wie im Kopf, nur hochkant: er wächst in Sprüngen. */
.menu-panel a::before{content:"";position:absolute;left:0;top:0;bottom:0;width:0;
  background:var(--cy);transition:width .2s steps(4)}
.menu-panel a:hover::before,.menu-panel a:focus-visible::before{width:var(--px)}

/* Der Sprachwechsel gehört nicht ins Menü. Er ist kein Seitenbereich, sondern
   ein Werkzeug — im Menü sucht ihn niemand. Er steht jetzt neben dem Knopf und
   erscheint genau dann, wenn die Verweise verschwinden. Amber wie überall,
   wo ein Werkzeug gemeint ist und kein Bereich. */
/* Auf kurzen Schirmen - Handy quer, kleine Fenster - lief der Inhalt der
   Schublade unten heraus: gemessen 636 px Inhalt in 520 px Höhe. Scrollen
   darin ginge zwar (overflow-y:auto steht oben), aber eine Liste von sieben
   Verweisen, die gescrollt werden muss, ist ein Eingeständnis. Also enger
   setzen, statt scrollen zu lassen - damit passen dieselben Punkte in 458 px.
   Die Verankerung unten fällt dabei weg; bei Platzmangel ist Gedränge
   schlimmer als eine Liste ohne Anker. */
@media (max-height:680px){
  .menu-panel{padding:68px 0 16px}
  .menu-panel a{padding:11px 24px;font-size:14px}
  .menu-titel{padding-bottom:7px}
  .menu-titel--später{margin-top:0;padding-top:22px}
}

/* Solange die Schublade offen ist, darf die Seite dahinter nicht mitscrollen.
   ⚠️ NUR auf Geräten ohne Zeigegerät. Dort gibt es keine sichtbare
   Bildlaufleiste, `overflow:hidden` kostet also keine Breite. Am Schreibtisch
   würde die Leiste verschwinden und der ganze Inhalt um ihre Breite springen -
   das wäre schlimmer als das Übel, das es behebt.
   `overscroll-behavior:contain` an der Schublade sorgt zusätzlich dafür, dass
   ein Wisch am unteren Ende der Liste nicht auf die Seite dahinter durchschlägt. */
@media (hover:none){
  html:has(.menu[open]){overflow:hidden}
}

.kopf-rechts{display:flex;align-items:center;gap:8px;flex:none}
.sprache{display:none;flex:none;align-items:center;
  font-family:var(--syne);font-size:11.5px;font-weight:800;letter-spacing:.14em;
  text-transform:uppercase;color:var(--text-3);
  padding:12px 13px;border:var(--px) solid transparent;
  transition:color .16s steps(2),border-color .16s steps(2)}
.sprache:hover,.sprache:focus-visible{color:var(--amber);border-color:var(--amber-dim)}

/* ⚠️ DER PREIS VON EINER REIHE STATT ZWEIER.
   Gemessen an der deutschen Startseite bei 1600 px: Sperrung 269 + Fuge 2 +
   Schwestermarke 230 + Verweise 723 + Ränder 44 = 1268 px. Danach abgespeckt,
   was ohne Verlust ging - Sprachwechsel als "EN"/"DE" statt ausgeschrieben
   (-72), Abstand der Verweise 22 auf 20 (-8) - bleiben rund 1190.
   Darum weicht die Navi ab 1200 px ins Menü. Vorher tat sie das erst bei 880.
   Auf einem 1024er oder 1152er Notebook sieht man also das Menü statt der
   Verweise. Das ist eine Entscheidung, kein Versehen: Der einzige weitere
   Hebel wäre, den Markennamen "TriggerTok" wegzulassen und nur den Blitz
   stehen zu lassen (-160 px). Ein Zeichen ohne Namen im Kopf ist aber genau
   das generische Symbol, das wir nicht wollten. */
@media (max-width:1200px){
  .nav-links{display:none}
  .menu{display:block}
  .sprache{display:flex}
  .kopf-rechts{margin-left:auto}
}
@media (max-width:880px){
  .nav{height:66px}
  .brand{height:66px;padding-right:16px}
  .tt{height:66px;padding:0 14px;gap:9px}
  .blitz{height:24px}
  .tt-name{font-size:11.5px;letter-spacing:.1em}
  .kopf-fuge{margin:22px 0}
  /* Auf schmalen Geräten ist neben dem Menü kein Platz für die Wortmarke.
     Statt eines zweiten Elements wird sie abgeschnitten: Der Ausschnitt sitzt
     dank preserveAspectRatio="xMinYMid slice" links, die feste Breite kappt
     den Rest. Das Zeichen ist 1,247 mal so breit wie hoch - bei 40px also
     50px. 52px zeigt es vollständig plus einen Hauch Luft; ab etwa 57px
     lugte das S der Wortmarke hervor. */
  .brand .zeichen{height:40px;width:52px}
}
/* Unter 430px reicht der Platz neben Zeichen und Menü nicht mehr für den
   Markennamen. Der Blitz bleibt - er ist das Zeichen und trägt allein. */
@media (max-width:430px){
  .tt-text{display:none}
  .tt{padding:0 10px}
}

/* ---------- Pixel-Rahmen: das Retro-Element, das überall wiederkehrt ---------- */
.px{
  position:relative;background:var(--night-2);
  border:var(--px) solid var(--line);
  /* gestufte Ecken statt Radius — das Raster wird zur Kante */
  clip-path:polygon(
    12px 0, calc(100% - 12px) 0, calc(100% - 12px) 4px, calc(100% - 4px) 4px,
    calc(100% - 4px) 12px, 100% 12px, 100% calc(100% - 12px), calc(100% - 4px) calc(100% - 12px),
    calc(100% - 4px) calc(100% - 4px), calc(100% - 12px) calc(100% - 4px),
    calc(100% - 12px) 100%, 12px 100%, 12px calc(100% - 4px), 4px calc(100% - 4px),
    4px calc(100% - 12px), 0 calc(100% - 12px), 0 12px, 4px 12px, 4px 4px, 12px 4px);
}
.px--cy{border-color:var(--cy-dim)}
.px--amber{border-color:var(--amber-dim)}
.px--em{border-color:var(--em-dim)}

/* ---------- Marken-Chips ---------- */
.chip{
  display:inline-block;font-family:var(--syne);font-size:10.5px;font-weight:600;
  letter-spacing:.14em;text-transform:uppercase;padding:5px 11px;white-space:nowrap;
}
.chip--soon{background:var(--night-3);color:var(--text-3)}
.chip--cy{background:var(--cy-dim);color:var(--cy)}
.chip--amber{background:var(--amber-dim);color:var(--amber)}
.chip--em{background:var(--em-dim);color:var(--em)}
.chip--free{background:var(--amber);color:#2A1B03}

/* ---------- Knopf im Arcade-Stil ---------- */
.btn{
  /* border und cursor gehören hierher, obwohl jahrelang nur <a> diese Klasse
     trug: Ein <button class="btn"> erbt sonst den Browser-Rahmen und stand am
     4.9.2026 mit "2px outset white" in der Anmeldung, während jeder
     Nachbarknopf randlos war. */
  border:0;cursor:pointer;
  display:inline-block;font-family:var(--syne);font-weight:800;font-size:15px;
  letter-spacing:.06em;text-transform:uppercase;padding:15px 30px;
  background:var(--cy);color:#04262C;
  box-shadow:0 var(--px) 0 #10707F;
  transition:transform .12s ease, box-shadow .12s ease;
  /* anywhere statt break-word: break-word erlaubt zwar den Umbruch, senkt
     aber die Mindestbreite des Knopfes nicht - "Bald unter triggertok.de"
     spreizte den Block damit weiter auf 285px auf. */
  overflow-wrap:anywhere;
}
.btn:hover{transform:translateY(2px);box-shadow:0 2px 0 #10707F}
.btn:active{transform:translateY(4px);box-shadow:0 0 0 #10707F}
.btn--amber{background:var(--amber);color:#2A1B03;box-shadow:0 var(--px) 0 #A66C08}
.btn--amber:hover{box-shadow:0 2px 0 #A66C08}
.btn--em{background:var(--em);color:#04291D;box-shadow:0 var(--px) 0 #128862}
.btn--em:hover{box-shadow:0 2px 0 #128862}
.btn--ghost{background:transparent;color:var(--text-2);box-shadow:none;
  border:2px solid var(--line-2);padding:13px 26px}
.btn--ghost:hover{transform:none;color:var(--text);background:var(--night-2)}
.btn.is-blind{background:var(--night-3);color:var(--text-3);
  box-shadow:0 var(--px) 0 var(--line);cursor:default}
.btn.is-blind:hover,.btn.is-blind:active{transform:none;box-shadow:0 var(--px) 0 var(--line)}
.btn-row{display:flex;flex-wrap:wrap;gap:14px;align-items:center}
.btn-row--in{margin-top:26px}
.sub-head{margin:56px 0 22px}
.sub-head--tight{margin:56px 0 0}
.mt-l{margin-top:56px}

/* ---------- Abschnitte ---------- */
section{padding:96px 0;border-top:var(--px) solid var(--line)}
/* Auch die Produktblöcke sind Sprungziele (#triggertok, #zombie, #creator-code).
   Ohne sie hier landet der Sprung unter der angehefteten Kopfzeile. */
section[id],article[id],div[id]{scroll-margin-top:88px}

/* Der Creator-Code ist weder Produkt noch Karte, sondern das Angebot an die
   Creators selbst - deshalb ein eigener Kasten mit der Innenaufteilung eines
   Produktblocks. */
.angebot{padding:clamp(26px,3.4vw,40px);margin-top:26px}
/* Die Punkte und der Meta-Stil hängen sonst an .prod--amber bzw. .prod - der
   Kasten ist aber keines von beiden. Ohne diese zwei Regeln stehen amberne
   Kanten mit cyanen Punkten da, und die Schlusszeile sieht aus wie Fließtext. */
.angebot .feat li::before{background:var(--amber);box-shadow:0 0 0 3px var(--amber-dim)}
.angebot .meta{margin-top:22px;padding-top:14px;border-top:1px solid var(--line);
  font-family:var(--syne);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--text-3)}
.angebot .meta a{color:var(--amber);text-underline-offset:2px;text-decoration:underline}
section:first-of-type{border-top:none}
.sec-lead{color:var(--text-2);max-width:62ch;font-size:1.06rem;font-weight:300;margin:16px 0 52px}

/* ---------- Startbereich ---------- */
/* Ein Schein hinter dem Zeichen. Er gehört zum Kopfbereich, nicht zum
   Fenster - also scrollt er mit weg, statt als Fleck stehen zu bleiben. */
/* ⚠️ DAS HERO WAR AUF BREITE RESPONSIV, NICHT AUF HOEHE — und genau das war
   das Problem. Auf einem flachen, breiten Fenster (gemessen 1920x889) wurde
   jeder Posten maximal groß, obwohl vertikal der Platz fehlte: Zeichen 300 px,
   Polster oben 84 px, Claim-Abstände 30/38. Der Creator-Knopf landete dadurch
   bei 914 px — 25 px UNTER der Falz, also unsichtbar ohne Scrollen.

   Die drei Posten hängen jetzt zusätzlich an `vh`. Auf hohen Fenstern
   gewinnen die alten Werte im `min`/`clamp`, auf flachen schrumpfen sie —
   dort, wo der Platz fehlt, und nur dort.

   Die Schwelle lässt sich ausrechnen, damit sie niemanden überrascht:
   300px / 0.26 = **1154 px Fensterhöhe**. Darüber ist das Zeichen wie
   früher 300 px groß, darunter schrumpft es — also auf praktisch jedem
   Laptop. Bei 1000 px Höhe sind es 260 px, bei 889 noch 231.

   Gemessen bei 889 px Fensterhöhe:
     Zeichen   300 -> 231 px      (26vh)
     Polster    84 ->  53 px      (6vh)
     Claim   30/38 -> 21/27 px
   Zusammen rund 120 px, der Knopf wandert von 914 auf etwa 794.

   ⚠️ Wer hier Werte anfasst, misst danach die Position von
   `.hero a.btn--amber` — nicht das Aussehen. Der Zweck dieser Zeilen ist
   nicht Kompaktheit, sondern dass ein bestimmter Knopf ohne Scrollen zu sehen
   ist. */
.hero{padding-top:clamp(32px,6vh,84px);padding-bottom:clamp(64px,8vw,96px);
  background:
    radial-gradient(46% 52% at 22% 30%, rgba(63,217,235,.13), transparent 68%),
    radial-gradient(38% 42% at 78% 12%, rgba(245,165,36,.055), transparent 70%)}
.hero h1{margin:22px 0 26px;max-width:15ch}
.hero-lead{font-size:clamp(1.1rem,2.2vw,1.4rem);color:var(--text-2);font-weight:300;max-width:56ch}
.hero-lead strong{color:var(--text);font-weight:500}
.claim{font-family:var(--syne);font-weight:800;font-size:1.15rem;letter-spacing:.02em;
  color:var(--amber);margin:clamp(14px,2.4vh,30px) 0 clamp(18px,3vh,38px)}
/* Mit Ring ist das Zeichen quadratisch - der Ring läuft rundherum. Die
   Größe ist bewusst kleiner als die alte Breite: ein Quadrat trägt bei
   gleicher Kantenlänge deutlich mehr Fläche. */
.hero-logo{display:block;width:min(60vw,300px,26vh);aspect-ratio:1;height:auto;
  margin-bottom:clamp(10px,1.8vh,18px)}

/* ---------- Belege: Zahlen, die aus /zahlen.json kommen ---------- */
.proof{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(178px,100%),1fr));gap:var(--px);
  margin-top:clamp(44px,6vw,64px);background:var(--line);border:var(--px) solid var(--line)}
.proof-item{background:var(--night-2);padding:22px 20px}
/* Die Obergrenze lag bei 2,5rem. Bei rund 1000px Fensterbreite wurde
   "< 1 Sek." damit 191px breit und der Kasten war 185px - die Zahl lief
   heraus. 2,35rem und etwas weniger Innenabstand lösen es, ohne dass die
   Zahl an Wucht verliert. */
.proof-num{font-family:var(--syne);font-weight:800;font-size:clamp(1.8rem,3.6vw,2.35rem);
  line-height:1;letter-spacing:-.03em;color:var(--cy)}
.proof-item--amber .proof-num{color:var(--amber)}
.proof-item--em .proof-num{color:var(--em)}
.proof-label{margin-top:9px;font-size:13.5px;color:var(--text-2);font-weight:300;line-height:1.45}
.proof-note{margin-top:14px;font-size:12px;color:var(--text-3);max-width:none}

/* ---------- Produktblock: Text links, Schaukasten rechts ---------- */
.prod{display:grid;grid-template-columns:1.05fr .95fr;margin-bottom:26px;padding:0}
/* min-width:0 hebt die Vorgabe auf, dass ein Rasterfeld mindestens so breit
   ist wie sein längster unteilbarer Inhalt. Ohne das spreizte der Block auf
   337px und schob bei 320px die ganze Seite über den Rand. */
.prod-body,.prod-side{min-width:0;overflow-wrap:break-word}
.prod-body{padding:clamp(26px,3.4vw,40px)}
.prod-side{padding:clamp(22px,3vw,32px);background:var(--night-3);
  border-left:var(--px) solid var(--line);display:flex;flex-direction:column;
  gap:16px;justify-content:center}
.prod--amber .prod-side{border-left-color:var(--amber-dim)}
@media (max-width:860px){
  .prod{grid-template-columns:1fr}
  .prod-side{border-left:none;border-top:var(--px) solid var(--line)}
  .prod--amber .prod-side{border-top-color:var(--amber-dim)}
}
.prod-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.prod-head h3{font-size:clamp(1.5rem,3vw,2rem);font-weight:800;letter-spacing:-.025em}
.prod-lead{color:var(--text-2);font-size:1.02rem;max-width:52ch}
.prod .meta{margin-top:22px;padding-top:14px;border-top:1px solid var(--line);
  font-family:var(--syne);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--text-3)}

/* Merkmalsliste mit Pixel-Punkt */
.feat{list-style:none;display:grid;gap:11px;margin:22px 0 4px;max-width:56ch}
.feat li{position:relative;padding-left:24px;color:var(--text-2);font-size:15.5px;line-height:1.5}
.feat li::before{content:"";position:absolute;left:0;top:.55em;width:9px;height:9px;
  background:var(--cy);box-shadow:0 0 0 3px var(--cy-dim)}
.prod--amber .feat li::before{background:var(--amber);box-shadow:0 0 0 3px var(--amber-dim)}
.feat li strong{color:var(--text);font-weight:600}
.feat a{color:var(--cy);text-underline-offset:2px;text-decoration:underline}
.prod--amber .feat a{color:var(--amber)}

/* Auslöser und Wirkung, wie im Flow-Builder */
.flow{display:grid;gap:var(--px);background:var(--line);border:2px solid var(--line)}
.flow-row{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;
  background:var(--night-2);padding:12px 14px;font-size:13px}
.flow-in{color:var(--text);font-weight:500}
.flow-arrow{font-family:var(--mono);color:var(--amber)}
.flow-out{color:var(--text-2);text-align:right}
@media (max-width:520px){
  .flow-row{grid-template-columns:1fr;gap:3px}
  .flow-out{text-align:left}
  .flow-arrow{display:none}
}
.prod-side h4{font-family:var(--syne);font-size:11px;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;color:var(--text-3);margin-bottom:10px}
.side-title{font-family:var(--syne);font-size:10.5px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--text-3)}

/* Titelbild im Schaukasten - dieselbe harte Kante wie die Kennwerte darunter */
/* ── Die Herzreihe im Minecraft-Block ──────────────────────────────────
   Der Kern des Spiels — wer gewinnt nimmt ein Herz, wer verliert gibt eins
   ab — stand nur als Fließtext im Absatz. Gerade DAS ist aber der Grund,
   warum jemand mitspielt, und der Abschnitt hatte sonst kein einziges Bild.

   ⚠️ BLOECKE UND KEINE HERZEN. Ein Herz braucht Rundungen und eine
   Diagonale; die Seite lässt Diagonalen nur beim TriggerTok-Blitz und im
   Menükreuz zu. Minecraft selbst zeigt Leben als REIHE — eine Blockreihe
   liest sich darum sofort als Lebensanzeige und bleibt im Raster der Marke.

   ⚠️ Die Reihe trägt `aria-hidden`. Was sie sagt, steht links als Text und
   rechts als Zahl; wer vorgelesen bekommt, hört "Du gewinnst, plus eins"
   statt sechs bedeutungsloser Kästen. */
.herzen{display:flex;flex-direction:column;gap:9px;margin-bottom:20px}
.herz-reihe{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:12px}
.herz-was{font-size:14px;color:var(--text-2)}
.herz-bar{display:flex;gap:4px}
.herz-bar i{width:11px;height:11px;background:var(--cy);display:block}
/* Verloren heißt NICHT verschwunden: Der leere Platz bleibt sichtbar, sonst
   wäre "minus eins" nur eine kürzere Reihe und der Verlust nicht zu sehen. */
.herz-bar i.leer{background:none;box-shadow:inset 0 0 0 var(--px) var(--line)}
/* Das gewonnene Herz ist heller als die anderen — es ist das NEUE.
   Und der verlorene Platz wird eigens markiert, nicht bloß leer gelassen:
   Ohne ihn stand in der Verlust-Reihe nur eine kürzere Reihe, und WELCHES
   Herz gerade weg ist, sah man nicht. Erst zusammen sind die beiden Reihen
   ein Paar — hell heißt dazugewonnen, rot heißt verloren.

   ⚠️ `--hit` trägt im Kopf dieses Stylesheets den Vermerk "sparsam: Leben,
   Season-Ende". Genau dafür wird sie hier benutzt und für nichts sonst. */
.herz-bar i.dazu{background:var(--text)}
.herz-bar i.weg{background:none;box-shadow:inset 0 0 0 var(--px) var(--hit)}
.herz-delta--ende{color:var(--hit)}
.herz-delta{font-family:var(--syne);font-size:12px;font-weight:800;
  letter-spacing:.08em;color:var(--text-3);min-width:34px;text-align:right}

.shot{margin:0;border:2px solid var(--line);background:var(--night-2)}
.prod--amber .shot{border-color:var(--amber-dim)}
.shot img{display:block;width:100%;height:auto}
.shot figcaption{font-family:var(--syne);font-size:10.5px;font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);
  padding:9px 12px;border-top:2px solid var(--line)}
.prod--amber .shot figcaption{border-top-color:var(--amber-dim)}

/* Auswahlliste: was an Auslösern und Aktionen zur Verfügung steht. Gleiche
   harte Kante wie die Kennwerte, aber gestapelt statt zweispaltig - die Werte
   sind hier ganze Aufzählungen und würden in einer Zeile umbrechen. */
.palette{display:grid;gap:var(--px);background:var(--line);border:2px solid var(--line)}
.palette > div{background:var(--night-2);padding:11px 14px}
.palette .k{display:block;font-family:var(--syne);font-size:10px;font-weight:600;
  letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);margin-bottom:5px}
.palette .v{display:block;font-size:12.5px;line-height:1.6;color:var(--text-2)}

/* Kennwerte im Schaukasten */
.specs{display:grid;gap:var(--px);background:var(--line);border:2px solid var(--line)}
.specs > div{display:flex;justify-content:space-between;gap:14px;align-items:baseline;
  background:var(--night-2);padding:11px 14px}
.specs .k{color:var(--text-3);font-family:var(--syne);font-size:10.5px;
  font-weight:600;letter-spacing:.12em;text-transform:uppercase}
.specs .v{color:var(--text);font-family:var(--mono);font-size:12.5px;text-align:right}

/* ---------- Preisstufen ---------- */
.plans{display:grid;grid-template-columns:1fr 1fr;gap:var(--px);background:var(--line);
  border:2px solid var(--line)}
@media (max-width:520px){.plans{grid-template-columns:1fr}}
.plan{background:var(--night-2);padding:16px 18px}
.plan-name{font-family:var(--syne);font-size:10.5px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--text-3)}
.plan-price{font-family:var(--syne);font-weight:800;font-size:1.7rem;line-height:1.1;margin-top:6px}
.plan-price span{font-family:var(--outfit);font-size:.8rem;font-weight:300;color:var(--text-3)}
.plan--free .plan-price{color:var(--amber)}
.plan-note{font-size:12.5px;color:var(--text-3);margin-top:8px;line-height:1.45;max-width:none}

/* ---------- Ablauf in Schritten ---------- */
.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(228px,100%),1fr));gap:22px;margin-top:8px}
.step{padding:24px 24px 22px}
.step-no{font-family:var(--syne);font-weight:800;font-size:12px;letter-spacing:.16em;
  color:var(--cy);margin-bottom:12px}
.step h4{font-family:var(--syne);font-size:1.06rem;font-weight:600;letter-spacing:-.015em;margin-bottom:8px}
.step p{color:var(--text-2);font-size:14.5px;margin:0}

/* ---------- Server-Status ---------- */
.status{display:flex;align-items:center;gap:14px;padding:15px 20px;margin-bottom:22px}
.status-dot{width:10px;height:10px;background:var(--text-3);flex:none;
  box-shadow:0 0 0 4px rgba(102,112,138,.16)}
.status.is-live .status-dot{background:var(--cy);box-shadow:0 0 0 4px var(--cy-dim)}
.status-text{font-family:var(--syne);font-size:11.5px;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;color:var(--text-2)}
.status.is-live .status-text{color:var(--cy)}

/* ---------- Karten ---------- */
/* min(310px,100%) statt 310px: Ohne das ist die Mindestbreite absolut und
   die Karte ragt auf einem 320px-Gerät über den Rand hinaus. */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(310px,100%),1fr));gap:22px}
.card{padding:30px 30px 28px;display:flex;flex-direction:column;gap:15px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:14px}
.card p{color:var(--text-2);font-size:15.5px;margin:0}
.card .meta{margin-top:auto;padding-top:14px;border-top:1px solid var(--line);
  font-family:var(--syne);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-3)}

/* ---------- Verbindungsdaten ---------- */
.connect{display:grid;grid-template-columns:1fr 1fr;gap:24px;padding:26px 28px;margin-top:4px}
@media (max-width:640px){.connect{grid-template-columns:1fr}}
.connect h4{font-family:var(--syne);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--text-3);margin-bottom:11px;font-weight:600}
.addr{font-family:var(--mono);font-size:15px;
  background:var(--night);border:2px solid var(--line-2);padding:11px 14px;color:var(--text);
  word-break:break-all}
.addr + .addr{margin-top:8px}
.connect small{display:block;color:var(--text-3);font-size:13px;margin-top:10px;line-height:1.5}

/* ---------- Aufklappbare Fragen ---------- */
.faq{display:grid;gap:var(--px);background:var(--line);border:var(--px) solid var(--line);margin-top:8px}
.faq details{background:var(--night-2)}
.faq summary{list-style:none;cursor:pointer;padding:17px 22px;display:flex;align-items:center;
  gap:14px;font-family:var(--syne);font-weight:600;font-size:1rem;letter-spacing:-.01em}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";margin-left:auto;flex:none;width:11px;height:11px;
  background:var(--text-3);
  clip-path:polygon(0 40%,40% 40%,40% 0,60% 0,60% 40%,100% 40%,100% 60%,60% 60%,60% 100%,40% 100%,40% 60%,0 60%)}
.faq details[open] summary{color:var(--cy)}
.faq details[open] summary::after{background:var(--cy);
  clip-path:polygon(0 40%,100% 40%,100% 60%,0 60%)}
.faq .answer{padding:0 22px 20px;color:var(--text-2);font-size:15.5px}
.faq .answer p{margin:0 0 12px}
.faq .answer p:last-child{margin:0}

/* ---------- Rechtstexte ---------- */
.legal{padding:64px 0 96px;max-width:80ch}
.legal h1{font-size:clamp(2rem,4.6vw,3rem);margin-bottom:10px}
.legal .lead{color:var(--text-3);font-size:15px;margin-bottom:44px}
.legal h2{font-size:1.32rem;font-weight:600;margin:40px 0 12px;letter-spacing:-.015em}
.legal h3{font-size:1.06rem;margin:26px 0 8px}
.legal p,.legal li{color:var(--text-2);font-size:16px}
.legal ul{margin:0 0 16px;padding-left:22px;max-width:68ch}
.legal li{margin-bottom:7px}
.legal a{color:var(--cy);text-underline-offset:2px;text-decoration:underline}
/* ⚠️ Die Zeile darüber färbt JEDEN Verweis im Rechtstext cyan und
   unterstreicht ihn. Auf einem Knopf mit cyanem Grund ergibt das cyane
   Schrift auf cyanem Grund — unsichtbar, und im Quelltext nicht zu
   sehen: die Regel ist stärker als .btn (0-1-1 gegen 0-1-0) und steht
   weit entfernt. Diese drei Zeilen geben dem Knopf sein Aussehen
   zurück. */
.legal .btn{color:#04262C;text-decoration:none}
.legal .btn--ghost{color:var(--text-2)}
.legal .btn--ghost:hover{color:var(--text)}
.legal .box{padding:20px 24px;margin:24px 0}
/* Erstes und letztes Kind ohne Außenabstand. Das stand vorher als
   style-Attribut im HTML - und wurde von der Content-Security-Policy
   stillschweigend verworfen, der Kasten saß schief. */
.legal .box > :first-child{margin-top:0}
.legal .box p:last-child{margin-bottom:0}

/* ---------- Fußzeile ---------- */
footer{border-top:var(--px) solid var(--line);padding:52px 0 64px;font-size:14.5px;color:var(--text-3)}
/* Raster statt Verteilung: Mit justify-content:space-between standen zwischen
   den Spalten 170px Luft und sie schwammen einzeln in der Fläche. Feste
   Anteile halten sie als Block zusammen. */
.foot{display:grid;gap:34px 40px;align-items:start;
  grid-template-columns:minmax(230px,1.4fr) minmax(110px,.8fr) minmax(190px,1.2fr) minmax(105px,.7fr)}
@media (max-width:900px){.foot{grid-template-columns:1fr 1fr}}
@media (max-width:520px){.foot{grid-template-columns:1fr;gap:28px}}
/* In der Fußzeile ist Platz - hier steht die Sperrung auf jeder Breite,
   bei 40px Höhe also 221px breit. */
.foot-brand .zeichen{height:40px;width:auto;display:block;margin-bottom:12px}
/* Drei Spalten neben der Marke. Der Abstand liegt in der Fläche der Links,
   nicht zwischen ihnen: Aus 20px hohen Textzeilen werden Tippziele von 34px,
   ohne dass sich am Bild etwas ändert. */
.foot-sp{display:grid;gap:2px;align-content:start;min-width:0}
.foot-sp b{font-family:var(--syne);font-size:10.5px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--text-3);margin-bottom:8px}
.foot-sp a{display:inline-block;padding:6px 0;transition:color .18s ease;line-height:1.35}
.foot-sp a:hover{color:var(--text-2)}
.foot-sp a small{display:block;font-size:11.5px;color:var(--text-3);line-height:1.35}
.foot-quelle{display:block;margin-top:10px;font-size:11.5px;color:var(--text-3);opacity:.75}

/* Was sonst noch aus dem Haus kommt - eine Stufe leiser als die Markenfamilie
   und ohne Farbpunkte. Acht farbige Punkte nebeneinander wären Konfetti, und
   davor warnt das Markenblatt ausdrücklich. */
.foot-haus{margin-top:16px;display:flex;flex-wrap:wrap;gap:4px 22px;align-items:baseline;
  font-size:13px;color:var(--text-3)}
.foot-haus b{font-family:var(--syne);font-size:10.5px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--text-3);opacity:.8}
.foot-haus a{display:inline-block;padding:5px 0;color:var(--text-3);transition:color .18s ease}
.foot-haus a:hover{color:var(--text-2)}

/* Die Abschlusszeile. Sie steht auf jeder Seite des Hauses. */
.foot-credit{margin-top:26px;padding-top:20px;border-top:1px solid var(--line);
  display:flex;flex-wrap:wrap;gap:6px 28px;justify-content:space-between;
  font-size:12.5px;color:var(--text-3)}
.foot-credit a{color:var(--text-2);transition:color .18s ease;
  display:inline-block;padding:3px 0}
.foot-credit a:hover{color:var(--cy)}
.foot-family{margin-top:30px;padding-top:22px;border-top:1px solid var(--line);
  display:flex;flex-wrap:wrap;gap:10px 24px;align-items:center;font-size:13px}
.foot-family b{font-family:var(--syne);font-size:10.5px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--text-3)}
.foot-family .fam{color:var(--text-3);display:inline-flex;align-items:center;gap:8px;
  padding:6px 0;transition:color .18s ease}
/* Die Agentur ist das Dach, keine Schwestermarke - deshalb kein Farbpunkt. */
.foot-family .fam--dach{font-family:var(--syne);font-weight:600;letter-spacing:.04em;
  color:var(--text-2)}
.foot-family .fam--dach small{margin-left:2px}
.foot-family a.fam:hover{color:var(--text-2)}
.foot-family small{font-size:11px;opacity:.65}
.foot-family i{width:9px;height:9px;display:inline-block;flex:none;background:currentColor}
.foot-family .d-cy{background:var(--cy)}
.foot-family .d-em{background:var(--em)}
.foot-family .d-lime{background:var(--lime)}
.disclaimer{margin-top:30px;padding-top:24px;border-top:1px solid var(--line);
  font-size:12.5px;line-height:1.6;max-width:84ch;color:var(--text-3)}

/* Lange deutsche Wörter sprengen auf schmalen Geräten jede Spalte:
   "Zuschauern" stand bei 320px mit 361px in einem 265px breiten Kasten und
   ragte weit über den Rand. Trennung greift nur mit lang="de" im <html>,
   das steht dort. Der Umbruch an beliebiger Stelle ist die Reißleine, wenn
   ein Wort selbst getrennt nicht passt. */
@media (max-width:560px){
  h1,h2,h3,h4{hyphens:auto;overflow-wrap:break-word}
}

@media (max-width:640px){
  body{font-size:16px}
  .wrap{padding:0 18px}
  section{padding:68px 0}
  .card{padding:24px 22px}
  .proof-item{padding:18px 20px}
}

/* ---------- Die angeheftete Kopfzeile, ab 900px zweistöckig ----------
   Ab hier klebt auch die Umschaltleiste oben fest - darunter nicht. Auf einem
   Handy wären 41 + 77 px dauerhafte Verwaltung rund ein Siebtel des Schirms,
   und der Umschalter ist ein Wegweiser, den man einmal benutzt: kein Werkzeug,
   das man beim Lesen braucht.

   Dieser Block steht bewusst am ENDE der Datei. Er überschreibt .top{top:0}
   und scroll-margin-top, und bei gleicher Spezifität gewinnt die spätere
   Regel - weiter oben wäre er wirkungslos gewesen.

   Die 41px sind die gemessene Höhe der Leiste (40 plus die Linie darunter),
   die 118 sind 41 + 73 für die Navi (72 plus ihre Linie) und vier Pixel
   Luft. Ändert sich eine der beiden Höhen, müssen diese Werte mit -
   ebenso der Grundwert 78 weiter oben (72 + 1 + 4, für Breiten unter 900px,
   wo nur die Navi klebt). */
/* Hier stand bis zum 5. September die zweistöckige Kopfzeile: die
   Umschaltleiste klebte ab 900px zusätzlich oben fest, und die Sprungmarken
   mussten 41 + 73 + 4 = 118 px ausweichen. Mit einer Reihe statt zweier ist
   die Rechnung wieder einfach und steht oben bei .top: 80 + 4 + 4 = 88, auf
   schmalen Geräten 66 + 4 + 4 = 74. Kein Sonderfall mehr. */

/* ⚠️ Diese Regel steht bewusst HIER unten und nicht im 880er-Block weiter
   oben. Sie hat dieselbe Spezifität wie der Grundwert 88, und bei gleicher
   Spezifität gewinnt die spätere Regel. Weiter oben war sie wirkungslos:
   Am 5.9. gemessen, das Ziel landete auf dem Handy bei 88 statt bei 74 - also
   14 px zu tief. Nichts war verdeckt, aber die Zahl stimmte nicht mit dem
   überein, was daneben steht. */
@media (max-width:880px){
  section[id],article[id],div[id]{scroll-margin-top:74px}
}

/* ── Anmeldung für Neuigkeiten ───────────────────────────────────────────
   Der einzige Weg von dieser Seite, der nicht in den Discord führt. Sendet
   an den eigenen Server (om-studios.de/api/anmeldung), den Caddy intern an
   die Lincora-App weiterreicht - deshalb bleiben `connect-src 'self'` und
   `form-action 'self'` unangetastet.

   ⚠️ Der Honigtopf wird HIER versteckt, nicht mit einem style-Attribut: Die
   Seite läuft unter `style-src 'self'` ohne 'unsafe-inline', ein
   style="display:none" würde stillschweigend verworfen - und das Feld
   stände sichtbar in der Seite. */
.anmeldung{max-width:640px;margin:0 auto;padding:34px 30px 30px}
.anmeldung h3{margin:0 0 10px}
.anmeldung > p{color:var(--text-2);font-size:15.5px;margin:0 0 22px}
.anm-reihe{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:18px}
.anm-reihe .anm-feld{flex:1 1 220px;min-width:0}
.anm-feld{
  width:100%;box-sizing:border-box;
  font-family:var(--outfit);font-size:16px;   /* 16px: iOS zoomt darunter hinein */
  padding:14px 16px;color:var(--text);
  background:var(--night-3);border:var(--px) solid var(--line);
}
.anm-feld::placeholder{color:var(--text-3)}
.anm-feld:focus{outline:none;border-color:var(--cy)}
.anm-feld:invalid:not(:placeholder-shown){border-color:var(--hit)}
.anm-wahl{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:20px}
.anm-wahl input{position:absolute;opacity:0;pointer-events:none}
.anm-wahl span{
  display:inline-block;cursor:pointer;
  font-family:var(--syne);font-weight:800;font-size:12.5px;
  letter-spacing:.06em;text-transform:uppercase;
  padding:10px 16px;color:var(--text-3);
  background:var(--night-3);border:2px solid var(--line);
}
.anm-wahl input:checked + span{color:var(--cy);border-color:var(--cy);background:var(--cy-dim)}
.anm-wahl input:focus-visible + span{outline:2px solid var(--cy);outline-offset:2px}
.anm-fuss{color:var(--text-3);font-size:13.5px;margin:16px 0 0;line-height:1.55}
.anm-fuss a{color:var(--text-2)}
/* aria-live: die Antwort muss auch ankommen, wenn niemand hinsieht. */
.anm-sagt{margin:16px 0 0;font-size:14.5px;min-height:1.2em}
.anm-sagt:empty{margin:0}
.anm-sagt--gut{color:var(--em)}
.anm-sagt--schlecht{color:var(--hit)}
/* Der Honigtopf. Für Menschen unsichtbar, für Vorleseprogramme stumm,
   für einen Bot ein einladendes Feld. Kein CAPTCHA - das wäre eine fremde
   Ressource und bräche die Zusage der Datenschutzerklärung. */
.anm-topf{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
@media (max-width:560px){
  .anmeldung{padding:26px 20px 24px}
  .anm-reihe{flex-direction:column}
  /* Zurück auf auto: `flex:1 1 220px` misst die HAUPTACHSE. In der Zeile sind
     das 220px Breite, in der Spalte 220px HOEHE - das Eingabefeld stand damit
     bei 320px Gerätebreite 220px hoch in der Seite. */
  .anm-reihe .anm-feld{flex:0 0 auto}
  .anm-reihe .btn{width:100%;text-align:center}
}


/* ══ Shop ═══════════════════════════════════════════════════════════════
   Steht bewusst am Dateiende, hinter der Sprungmarken-Regel: Hier ist nichts
   dabei, was `section[id]` anfasst, also kann diese Reihenfolge nichts kippen.

   Hausregeln, die hier sichtbar werden: 4px-Raster, harte Kanten, `steps()`
   statt weicher Übergänge, und Cyan als Farbe von OM Studios. */
.shop-wer{
  border:var(--px) solid var(--line);border-left-color:var(--cy);
  background:var(--night-2);padding:28px 26px 24px;margin:0 0 44px;
}
.shop-wer h2{margin-top:0}
/* Beschriftetes Feld. `.anm-feld` gehört ans INPUT, nicht an eine Hülle
   drumherum - am 6.9.2026 andersherum gebaut, und dann trug der Rahmen die
   Feld-Optik und das Feld gar keine. */
.shop-feld{display:flex;flex-direction:column;gap:7px}
.shop-feld label{
  font-family:var(--syne);font-size:11px;font-weight:600;
  letter-spacing:.13em;text-transform:uppercase;color:var(--text-3);
}
.anm-reihe .shop-feld{flex:1 1 220px;min-width:0}
/* ⚠️ Das Feld MUSS hier zurückgesetzt werden. `.anm-reihe .anm-feld` setzt
   `flex:1 1 220px` — gedacht für die Reihe, wo 220px die Breite meinen.
   In `.shop-feld` steht das Feld aber in einer SPALTE, und dort meint
   flex-basis die HOEHE: Das Eingabefeld stand damit am 6.9.2026 live
   220px hoch in der Seite. Dieselbe Falle steht weiter unten schon einmal
   für den Anmeldeblock kommentiert. */
.shop-feld .anm-feld{flex:0 0 auto}

.shop-hinweis{color:var(--text-3);font-size:13.5px;line-height:1.6;margin:16px 0 0}
.shop-hinweis code{font-family:var(--mono);color:var(--text-2);font-size:12.5px}

.shop-lädt{color:var(--text-3);font-size:14px}
.shop-katalog{margin-bottom:44px}

.shop-karte{
  border:var(--px) solid var(--line);background:var(--night-2);
  align-items:flex-start;
  /* steps() statt ease: Die Marke bewegt sich in Rastern, nicht weich. */
  transition:border-color .18s steps(3);
}
.shop-karte:hover,.shop-karte:focus-within{border-color:var(--cy)}

/* Der Bildplatz oben in der Karte. Er hat eine FESTE Höhe, und das ist
   Absicht: Artikel mit Zeichen und Artikel mit späterem Foto müssen
   gleich hoch sein, sonst springt das Raster, sobald der erste Screenshot
   eingetragen wird. */
.shop-karte-zeichen,.shop-karte-bild{
  width:100%;height:132px;margin-bottom:4px;
  border:var(--px) solid var(--line);background:var(--night-3);
}
.shop-karte-zeichen{display:grid;place-items:center;color:var(--cy)}
.shop-karte-zeichen svg{width:64px;height:64px;display:block}
.shop-karte-bild{object-fit:cover}
/* Das Zeichen zieht beim Überfahren mit — die Karte soll sich als EIN
   Ding anfühlen, nicht als Rahmen mit Inhalt. */
.shop-karte:hover .shop-karte-zeichen,
.shop-karte:focus-within .shop-karte-zeichen{border-color:var(--cy-dim)}

/* Die Spiel-Überschrift im Kartenraster. `grid-column:1/-1` ist hier keine
   Feinheit, sondern der ganze Trick: Ohne sie belegte die Überschrift EINE
   Spalte und stünde als schmale Säule neben der ersten Karte statt darüber.
   Sie erscheint ohnehin erst, wenn es mehr als ein Spiel gibt — siehe
   shop.js. */
.shop-spiel{
  grid-column:1/-1;margin:14px 0 -4px;
  font-family:var(--syne);font-size:11.5px;font-weight:800;letter-spacing:.16em;
  text-transform:uppercase;color:var(--text-3);
  padding-bottom:10px;border-bottom:var(--px) solid var(--line);
}
.shop-spiel:first-child{margin-top:0}

.shop-karte h3{margin:0}
.shop-karte p{margin:0;color:var(--text-2);font-size:14.5px;line-height:1.6}
.shop-preis{
  font-family:var(--syne);font-weight:800;font-size:24px;color:var(--cy);
  letter-spacing:.02em;
}
.shop-karte .btn{align-self:flex-start;margin-top:4px}

/* Preis und Knopf stehen IMMER unten. Die Karten einer Reihe sind gleich
   hoch (Raster streckt), ihre Texte nicht - `margin-top:auto` schiebt den
   Fuß an den Boden, egal wie lang die Liste darüber ist. */
.shop-karte-fuss{
  margin-top:auto;align-self:stretch;padding-top:6px;
  display:flex;flex-direction:column;align-items:flex-start;gap:10px;
}
/* ⚠️ `.shop-karte p` (0,1,1) schlug `.shop-preis` (0,1,0): Der Preis stand
   seit jeher in 14,5 px und Grau statt 24 px Cyan. Gemessen 13.9.2026. */
.shop-karte p.shop-preis{font-size:26px;line-height:1.1;color:var(--cy)}
/* Der Knopf über die volle Kartenbreite und einzeilig: „IN DEN WARENKORB"
   ist in Syne breiter als eine Karte und brach in zwei Zeilen um. */
.shop-karte .shop-karte-fuss .btn{
  align-self:stretch;margin-top:0;text-align:center;white-space:nowrap;
  padding-left:12px;padding-right:12px;
  /* Gemessen live mit Syne, Karte 287 px innen (Desktop wie Handy): bei
     15 px/.06em war der Text 276 px breit und lief 13 px über den Rand.
     13,5 px/.03em: 242 px, gut 22 px Luft je Seite. */
  font-size:13.5px;letter-spacing:.03em;
}
/* Liegt im Korb: grün wie „drin" in der Liste darüber, damit der Klick
   sichtbar ankommt. Ein weiterer Klick legt noch eins dazu. */
.shop-karte .shop-karte-fuss .btn.is-drin{background:var(--em);box-shadow:0 var(--px) 0 #07875F}

/* Die Vorschau: so sieht es im Spiel aus. Gleiche Höhe wie der Bildplatz,
   damit ein späteres Foto das Raster nicht verschiebt. Minecraft-Farben
   setzt shop.js direkt am Element; hier steht nur die Bühne. */
.shop-karte-vorschau{
  width:100%;height:132px;margin-bottom:4px;overflow:hidden;
  border:var(--px) solid var(--line);background:var(--night-3);
  display:flex;flex-direction:column;justify-content:center;gap:7px;padding:10px 12px;
  font-family:var(--mono);font-size:12.5px;line-height:1.35;
}
.shop-karte:hover .shop-karte-vorschau,
.shop-karte:focus-within .shop-karte-vorschau{border-color:var(--cy-dim)}
.mc-zeile{
  align-self:flex-start;max-width:100%;padding:2px 6px;
  background:rgba(0,0,0,.4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
/* Das Namensschild über dem Kopf. Allein und mittig stand es in der Luft
   und wirkte verrutscht (13.9.2026) - deshalb eine kleine Figur: links
   bündig wie die Chatzeile, das Schild zentriert über einem Pixelkopf. */
.mc-figur{align-self:flex-start;display:flex;flex-direction:column;align-items:center;gap:3px}
.mc-schild{padding:2px 12px;background:rgba(0,0,0,.6)}
.mc-kopf{
  display:block;width:18px;height:18px;
  /* Haare oben, Gesicht darunter, zwei Augen - reine Flächen, keine Diagonalen. */
  background:
    linear-gradient(#FFAA00,#FFAA00) 4px 9px/3px 3px no-repeat,
    linear-gradient(#FFAA00,#FFAA00) 11px 9px/3px 3px no-repeat,
    linear-gradient(#4A3322 0 6px,#C8956A 6px);
  box-shadow:0 0 0 2px rgba(0,0,0,.35);
}
.mc-klein{color:var(--text-2);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mc-leiste{display:flex;align-items:center;gap:8px}
.mc-leiste-name{flex:none;min-width:56px;color:var(--text-2);font-size:11px;letter-spacing:.04em;text-transform:uppercase}
.mc-zellen{flex:1;display:grid;grid-template-columns:repeat(var(--n),1fr);gap:2px}
.mc-zellen i{display:block;height:10px;border:1px solid var(--line-2)}
.mc-premium .mc-zellen i.an{background:var(--cy);border-color:var(--cy)}
.mc-gratis .mc-zellen i.an{background:var(--text-3);border-color:var(--text-3)}
.mc-club .mc-zellen i{height:14px}
.mc-club .mc-zellen i.an{background:#FF55FF;border-color:#FF55FF}

/* „Das bekommst du". Quadrate statt Haken und Kreuz: Das Markenblatt lässt
   Diagonalen nur beim TriggerTok-Blitz und im Menükreuz zu. Voll = drin,
   Strich = bewusst nicht, Rahmen = gut zu wissen. */
.shop-karte .shop-inhalt{
  list-style:none;margin:0;padding:0;
  display:flex;flex-direction:column;gap:6px;
  color:var(--text-2);font-size:14px;line-height:1.5;
}
.shop-inhalt li{position:relative;padding-left:20px}
.shop-inhalt li::before{content:"";position:absolute;left:2px;top:.55em;width:8px;height:8px}
.shop-inhalt-ja::before{background:var(--em)}
.shop-inhalt-nein{color:var(--text-3)}
.shop-inhalt-nein::before{height:2px;top:.8em;background:var(--text-3)}
.shop-inhalt-info::before{border:2px solid var(--cy);width:4px;height:4px}

/* Der Warenkorb. Bleibt beim Blättern im Blick, aber nur wo Platz ist -
   auf kleinen Geräten klebt er sonst über dem halben Bildschirm. */
.shop-korb{
  border:var(--px) solid var(--cy);background:var(--night-2);
  padding:26px 24px 22px;margin:0 0 44px;
}
.shop-korb h2{margin-top:0}
.korb-liste{list-style:none;margin:0 0 20px;padding:0}
.korb-liste li{
  display:flex;align-items:center;gap:12px;
  padding:10px 0;border-bottom:1px solid var(--line);
}
.korb-liste li:last-child{border-bottom:0}
.korb-name{flex:1 1 auto;min-width:0;font-size:14.5px}
.korb-preis{font-family:var(--mono);font-size:14px;color:var(--text-2);white-space:nowrap}
.korb-weg{
  flex:none;border:0;background:none;cursor:pointer;
  color:var(--text-3);font-size:20px;line-height:1;padding:0 4px;
  transition:color .18s steps(3);
}
.korb-weg:hover,.korb-weg:focus-visible{color:var(--hit)}
.korb-summe{
  display:flex;justify-content:space-between;align-items:baseline;gap:12px;
  margin:0 0 20px;padding-top:16px;border-top:var(--px) solid var(--line);
  font-family:var(--syne);font-weight:800;font-size:16px;
}
.korb-summe strong{font-size:22px;color:var(--cy)}
/* Das Creator-Programm auf /creator. */
.creator-lädt{color:var(--text-3)}
.creator-wer{font-family:var(--mono);font-size:14px;color:var(--text-2)}
.creator-zahlen{margin:20px 0 32px}
.creator-kachel h3{margin:0 0 6px;font-size:13px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--text-3)}
.creator-wert{margin:0;font-family:var(--syne);font-weight:800;font-size:24px;color:var(--cy)}
.creator-hinweis{margin:6px 0 0;font-size:13px;color:var(--text-3)}
.creator-link-reihe{display:flex;gap:8px;align-items:stretch}
.creator-link-reihe .anm-feld{flex:1 1 auto;min-width:0}
.creator-link-reihe .btn{flex:none;white-space:nowrap}
.creator-abmelden{margin-top:40px}
.creator-gut{color:var(--em);font-size:14px;margin:16px 0 0}

/* Der Creator-Code. Er steht im Warenkorb und nicht oben bei Name und
   E-Mail: Er gehört zum Geld, nicht zur Lieferung. */
.shop-code{margin:0 0 20px}
.shop-code-frei{color:var(--text-3);font-weight:400}
.shop-code-reihe{display:flex;gap:8px;align-items:stretch}
.shop-code-reihe .anm-feld{flex:1 1 auto;min-width:0}
.shop-code-reihe .btn{flex:none;white-space:nowrap}
.shop-code-stand{
  margin:10px 0 0;font-size:13.5px;color:var(--hit);
}
.shop-code-stand--gut{color:var(--em)}
/* Der Rabatt steht als eigene Zeile über der Summe - abgezogen wird er
   erst an der Kasse, deshalb soll man beides nebeneinander sehen. */
.korb-minus{
  margin:0 0 10px;font-family:var(--mono);font-size:13.5px;color:var(--em);
  text-align:right;
}

/* Das Häkchen zum Widerrufsverzicht. Es steht über dem Knopf und nicht
   darunter: Wer bestellt, soll es gelesen haben, bevor er klickt - und es ist
   bewusst NICHT vorausgewählt, sonst wäre es keine Zustimmung. */
.shop-haken{
  display:flex;align-items:flex-start;gap:12px;
  margin:0 0 20px;padding:16px;
  border:1px solid var(--line);background:var(--night);
  font-size:13.5px;line-height:1.55;color:var(--text-2);
}
/* ⚠️ ES BLEIBT EIN ECHTES <input type="checkbox">. Nur die Optik ist ein
   Schalter — `appearance:none` nimmt dem Feld das Aussehen, nicht seine
   Bedeutung. Ein nachgebauter Schalter aus <div> und JavaScript verlöre
   Tastaturbedienung, Vorleseprogramm und die Verbindung zum <label> — und
   ausgerechnet hier hängt an dem Häkchen ein Nachweis: Wer wann welcher
   Fassung zugestimmt hat, ist im Streitfall die einzige Quelle.

   ⚠️ Und er steht AUS, solange niemand ihn anfasst. Ein Schalter, der
   vorgewählt aussieht, wäre keine Zustimmung mehr, sondern eine
   Voreinstellung. Das steht so auch im Kommentar in creator.html.

   Eckig, nicht rund: Das Haus rechnet in 4-Pixel-Schritten (--px), runde
   Kappen kommen sonst nirgends vor. */
.shop-haken-feld{
  appearance:none;-webkit-appearance:none;
  flex:none;width:46px;height:26px;margin:0;cursor:pointer;position:relative;
  border:2px solid var(--line-2);background:var(--night-3);
  transition:background .15s ease,border-color .15s ease;
}
.shop-haken-feld::after{
  content:'';position:absolute;top:3px;left:3px;width:16px;height:16px;
  background:var(--text-3);
  transition:transform .15s ease,background .15s ease;
}
.shop-haken-feld:hover{border-color:var(--text-3)}
.shop-haken-feld:checked{background:var(--cy-dim);border-color:var(--cy)}
.shop-haken-feld:checked::after{transform:translateX(20px);background:var(--cy)}
.shop-haken-feld:checked:hover{border-color:var(--cy)}
/* Sichtbar beim Tabben - ohne das ist der Schalter mit der Tastatur
   unbedienbar, weil man nicht sieht, wo man steht. */
.shop-haken-feld:focus-visible{outline:2px solid var(--cy);outline-offset:3px}
/* Im Kontrastmodus zeichnet das System die Farben selbst; dort muss der
   Knopf trotzdem zu sehen sein, deshalb ein Rahmen statt einer Füllung. */
@media (forced-colors:active){
  .shop-haken-feld{border-color:CanvasText}
  .shop-haken-feld::after{background:CanvasText}
  .shop-haken-feld:checked{background:Highlight}
}
.shop-haken label{cursor:pointer}
.shop-haken strong{color:var(--text)}

.shop-fehler{color:var(--hit);font-size:14px;margin:16px 0 0}

.shop-fragen h3{margin-bottom:0;font-size:inherit}
.shop-fragen p{margin:10px 0 0;color:var(--text-2)}

/* Klappbare Fragen. Dieselbe Bauart wie das Kopfmenü: `list-style:none`
   plus `::-webkit-details-marker`, weil Safari das eine ignoriert und
   Chrome das andere. Ohne BEIDE bleibt in einem der beiden das
   Standard-Dreieck stehen. */
.frage{border-bottom:var(--px) solid var(--line)}
.frage:first-of-type{border-top:var(--px) solid var(--line)}
.frage summary{list-style:none;cursor:pointer;position:relative;
  display:flex;align-items:center;gap:14px;padding:16px 40px 16px 0;
  color:var(--text);transition:color .16s steps(2)}
.frage summary::-webkit-details-marker{display:none}
.frage summary:hover{color:var(--cy)}
.frage p{padding:0 40px 18px 0}

/* Das Zeichen rechts: ein Plus, das beim Öffnen zum Minus wird. Zwei
   Balken übereinander, der senkrechte verschwindet — kein Drehen, weil
   die Seite Diagonalen nur beim Blitz und im Menükreuz zulässt. */
.frage summary::before,
.frage summary::after{content:"";position:absolute;right:4px;top:50%;
  background:currentColor;transition:opacity .16s steps(2)}
.frage summary::before{width:14px;height:var(--px);margin-top:calc(var(--px) * -0.5)}
.frage summary::after{width:var(--px);height:14px;margin-top:-7px;right:10px}
.frage[open] summary::after{opacity:0}
.frage[open] summary{color:var(--cy)}

/* Danke-Seite */
.danke-liste{
  display:grid;grid-template-columns:auto 1fr;gap:8px 20px;
  margin:0 0 28px;padding:20px 22px;
  border:var(--px) solid var(--line);border-left-color:var(--cy);
  background:var(--night-2);
}
.danke-liste dt{font-family:var(--syne);font-weight:600;font-size:12px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--text-3)}
.danke-liste dd{margin:0;font-size:15px}

@media (min-width:1000px){
  /* Erst ab hier steht genug Platz daneben, dass ein mitlaufender Korb nicht
     stört. Darunter bleibt er da, wo er im Quelltext steht. */
  .shop-korb{position:sticky;bottom:24px}
}
@media (max-width:560px){
  /* Wie beim Anmeldeblock: In der Spalte misst `flex-basis` die HOEHE. */
  .anm-reihe .shop-feld{flex:0 0 auto}
  .shop-wer{padding:24px 18px 20px}
  .shop-korb{padding:22px 18px 18px}
  .shop-korb .btn{width:100%;text-align:center}
}

/* ═══════════════════════════════════════════════════════════════════
   Admin — /om-admin

   ⚠️ Die Regeln stehen HIER und nicht in einer eigenen `om-admin.css`.
   Die Versionsmarke für den Cache rechnet `DEPLOY/deploy-lokal.sh` aus
   `stil.css` plus den .js/.svg/.png/.jpg-Dateien — eine zweite CSS-Datei
   ginge NICHT in die Marke ein. Caddy liefert /assets/* ein Jahr lang
   `immutable`: Eine Änderung an ihr wäre für wiederkehrende Besucher
   ein Jahr lang unsichtbar.

   Bewusst schmucklos. Das hier ist Werkzeug, keine Marke: keine Animation,
   kein Zeichen im Kopf, nichts, was beim zehnten Blick am Tag stört.
   ═══════════════════════════════════════════════════════════════════ */
.adm{max-width:1180px;margin:0 auto;padding:32px 22px 80px}
.adm-kopf{display:flex;flex-wrap:wrap;gap:14px;align-items:baseline;
  justify-content:space-between;margin:0 0 26px;
  padding:0 0 16px;border-bottom:2px solid var(--line)}
.adm-kopf h1{font-family:var(--syne);font-weight:800;font-size:22px;
  letter-spacing:.02em;color:var(--text)}
.adm-kopf h1 b{color:var(--cy);font-weight:800}
.adm-kopf .adm-neben{font-size:13px;color:var(--text-3)}

/* Anmeldung */
.adm-tor{max-width:400px;margin:14vh auto 0;padding:28px 26px;
  border:var(--px) solid var(--line);background:var(--night-2)}
.adm-tor h1{font-family:var(--syne);font-weight:800;font-size:19px;margin:0 0 6px}
.adm-tor p{font-size:14px;color:var(--text-2);margin:0 0 18px}
.adm-tor .anm-feld{width:100%;margin:0 0 14px}

/* Kennzahlen */
.adm-zahlen{display:grid;gap:14px;margin:0 0 30px;
  grid-template-columns:repeat(auto-fit,minmax(178px,1fr))}
.adm-zahl{padding:16px 18px;border:2px solid var(--line);background:var(--night-2)}
.adm-zahl b{display:block;font-family:var(--syne);font-weight:800;
  font-size:26px;line-height:1.1;color:var(--text)}
.adm-zahl b.is-null{color:var(--text-3)}
.adm-zahl span{display:block;margin-top:6px;font-size:12px;letter-spacing:.09em;
  text-transform:uppercase;color:var(--text-3)}
.adm-zahl small{display:block;margin-top:5px;font-size:12px;color:var(--text-2)}
.adm-zahl--geld b{color:var(--cy)}
.adm-zahl--acht b{color:var(--amber)}
.adm-zahl--hit b{color:var(--hit)}

/* Abschnitte und Tabellen */
/* ⚠️ `padding` und `border-top` MUESSEN hier zurückgesetzt werden.
   Weiter oben steht `section{padding:96px 0;border-top:...}` für die
   Marketingseiten — ohne diese Zeile bekäme jeder Abschnitt im Admin
   96 Pixel Luft und einen Strich, der wie eine Trennlinie aussieht,
   aber keine ist. Am 8.9.2026 im Probestand gemessen. */
.adm-block{margin:0 0 34px;padding:0;border-top:none}
.adm-block h2{font-family:var(--syne);font-weight:600;font-size:14px;
  letter-spacing:.12em;text-transform:uppercase;color:var(--text-2);
  margin:0 0 12px;padding-bottom:8px;border-bottom:2px solid var(--line)}
.adm-rahmen{overflow-x:auto;border:2px solid var(--line);background:var(--night-2)}
.adm-tab{width:100%;border-collapse:collapse;font-size:14px;min-width:640px}
.adm-tab th{text-align:left;padding:11px 14px;font-family:var(--syne);
  font-weight:600;font-size:11px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--text-3);border-bottom:2px solid var(--line);white-space:nowrap}
.adm-tab td{padding:11px 14px;border-bottom:1px solid var(--line);
  vertical-align:top;color:var(--text-2)}
.adm-tab tr:last-child td{border-bottom:0}
.adm-tab td.adm-stark{color:var(--text);font-weight:600}
.adm-tab td.adm-mono{font-family:var(--mono);font-size:13px}
.adm-tab td.adm-rechts{text-align:right;white-space:nowrap}

/* ⚠️ „Nichts da" wird AUSGESPROCHEN. Eine leere Tabelle ohne Zeile
   darunter ist von einer kaputten Abfrage nicht zu unterscheiden — der
   Leser rät dann, ob er nichts sieht oder nichts funktioniert. */
.adm-leer{padding:22px 18px;font-size:14px;color:var(--text-2);
  border:2px dashed var(--line);background:transparent}
.adm-leer b{display:block;color:var(--text);font-family:var(--syne);
  font-weight:600;margin-bottom:5px}

.adm-marke{display:inline-block;padding:2px 8px;font-size:11px;
  letter-spacing:.06em;text-transform:uppercase;font-weight:600;
  border:1px solid var(--line-2);color:var(--text-2);white-space:nowrap}
.adm-marke--gut{border-color:var(--em);color:var(--em)}
.adm-marke--warte{border-color:var(--amber);color:var(--amber)}
.adm-marke--hit{border-color:var(--hit);color:var(--hit)}
.adm-marke--still{border-color:var(--line-2);color:var(--text-3)}

.adm-knopf{font:inherit;font-size:13px;padding:6px 12px;cursor:pointer;
  border:2px solid var(--line-2);background:var(--night-3);color:var(--text-2)}
.adm-knopf:hover{border-color:var(--cy);color:var(--text)}
.adm-knopf[disabled]{opacity:.45;cursor:default}
.adm-knopf--hit:hover{border-color:var(--hit);color:var(--hit)}
.adm-wahl{font:inherit;font-size:13px;padding:6px 10px;
  border:2px solid var(--line-2);background:var(--night-3);color:var(--text)}

.adm-lief{margin:8px 0 0;padding:8px 0 0;border-top:1px dashed var(--line)}
.adm-lief-zeile{display:flex;flex-wrap:wrap;gap:8px;align-items:center;
  padding:4px 0;font-size:13px}
.adm-lief-zeile code{font-family:var(--mono);font-size:12px;color:var(--text-3);
  word-break:break-all}

.adm-fuss{margin-top:40px;padding-top:18px;border-top:2px solid var(--line);
  font-size:13px;color:var(--text-3);display:flex;flex-wrap:wrap;gap:16px;
  justify-content:space-between;align-items:center}
.adm-meldung{margin:0 0 18px;padding:12px 16px;font-size:14px;
  border-left:var(--px) solid var(--hit);background:var(--night-2);color:var(--text)}
.adm-meldung--gut{border-left-color:var(--em)}

@media (max-width:560px){
  .adm{padding:22px 14px 60px}
  .adm-tor{margin-top:8vh}
}

/* ── Rückfrage im Haus-Look ────────────────────────────────────────────
   Ersetzt `window.confirm`. Das browsereigene Fenster steht in der Schrift
   des Betriebssystems, trägt dessen Farben und nennt oben die nackte
   Adresse „127.0.0.1 sagt" — mitten in einer Seite, die sonst durchgehend
   gestaltet ist. Es ist außerdem nicht formatierbar: keine Hervorhebung,
   kein Absatz, keine Warnfarbe.

   ⚠️ Es ist ein echtes <dialog> mit showModal(). Ein nachgebautes Overlay
   müsste Fokusfalle, Escape und die Reihenfolge beim Tabben selbst bauen -
   und genau das vergisst man. Der Browser kann das bereits. */
.adm-dialog{
  border:2px solid var(--line-2);background:var(--night-2);color:var(--text);
  padding:0;max-width:440px;width:calc(100% - 32px);
  font-family:var(--outfit);font-size:15px;
  /* ⚠️ `margin:auto` MUSS hier stehen. Ein <dialog> zentriert sich selbst
     genau darüber - und ganz oben in dieser Datei setzt `*{margin:0}` es
     zurück. Ohne diese Zeile klebt die Rückfrage in der linken oberen
     Ecke. Dieselbe Familie wie `section{padding:96px}`, das dem Admin
     seine Abstände verpasst hatte: ein Reset trifft auch das, was der
     Browser von sich aus richtig macht. Am 8.9.2026 im Probestand gesehen. */
  margin:auto;
}
.adm-dialog::backdrop{background:rgba(5,6,10,.78)}
.adm-dialog h2{
  font-family:var(--syne);font-weight:800;font-size:17px;color:var(--text);
  margin:0;padding:20px 22px 0;border:0;text-transform:none;letter-spacing:0;
}
.adm-dialog p{margin:12px 0 0;padding:0 22px;color:var(--text-2);line-height:1.55}
.adm-dialog p strong{color:var(--text)}
.adm-dialog .adm-dialog-knöpfe{
  display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;
  margin:22px 0 0;padding:16px 22px;border-top:2px solid var(--line);
  background:var(--night-3);
}
/* Der bestätigende Knopf trägt die Markenfarbe, der abbrechende nicht -
   damit im Zweifel der harmlose Weg der leichtere ist. */
.adm-dialog .adm-ja{
  font:inherit;font-family:var(--syne);font-weight:800;font-size:13px;
  letter-spacing:.06em;text-transform:uppercase;cursor:pointer;
  padding:10px 18px;border:0;background:var(--cy);color:#04222A;
  box-shadow:0 var(--px) 0 #10707F;
}
.adm-dialog .adm-ja:hover{transform:translateY(2px);box-shadow:0 2px 0 #10707F}
.adm-dialog--hit .adm-ja{background:var(--hit);color:#2A0410;box-shadow:0 var(--px) 0 #A32448}
.adm-dialog--hit .adm-ja:hover{box-shadow:0 2px 0 #A32448}
.adm-dialog .adm-nein{
  font:inherit;font-size:14px;cursor:pointer;padding:10px 16px;
  border:2px solid var(--line-2);background:transparent;color:var(--text-2);
}
.adm-dialog .adm-nein:hover{border-color:var(--text-3);color:var(--text)}
@media (max-width:420px){
  .adm-dialog .adm-dialog-knöpfe{flex-direction:column-reverse}
  .adm-dialog .adm-ja,.adm-dialog .adm-nein{width:100%}
}

/* ---------- Modpack-Karte (Mods & Karte) ---------- */
.mp{padding:30px 30px 26px}
.mp-titel{font-family:var(--syne);font-size:1.5rem;font-weight:700;letter-spacing:-.02em;margin:0 0 8px}
.mp-lead{color:var(--text-2);font-size:15.5px;margin:0;max-width:60ch}
.mp [translate=no]{white-space:nowrap}
.mp-profile{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:18px;margin-top:24px}
.mp-profil{display:flex;flex-direction:column;background:var(--night-3);border:2px solid var(--line);padding:22px 22px 24px}
.mp-profil--voll{border-color:var(--cy-dim);background:linear-gradient(180deg,rgba(63,217,235,.07),transparent 60%),var(--night-3)}
.mp-profil-kopf{display:flex;align-items:center;justify-content:space-between;gap:12px}
.mp-profil h5{font-family:var(--syne);font-size:1.25rem;font-weight:700;margin:0}
.mp-fuer{color:var(--text-3);font-size:13.5px;margin:4px 0 14px}
.mp-liste{list-style:none;margin:0 0 22px;padding:0;display:grid;gap:9px;flex:1}
.mp-liste li{position:relative;padding-left:22px;color:var(--text-2);font-size:14.5px;line-height:1.45}
.mp-liste li::before{content:"";position:absolute;left:2px;top:.5em;width:8px;height:8px;background:var(--cy)}
.mp-profil:not(.mp-profil--voll) .mp-liste li::before{background:var(--text-3)}
.mp-profil .btn{align-self:flex-start}
.mp-wege{list-style:none;margin:24px 0 0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.mp-wege li{display:flex;align-items:center;gap:12px;color:var(--text-2);font-size:14px;line-height:1.4;
  border:2px dashed var(--line-2);padding:12px 14px}
.mp-wege b{flex:none;display:grid;place-items:center;width:30px;height:30px;background:var(--cy-dim);color:var(--cy);
  font-family:var(--syne);font-weight:800;font-size:14px}
.mp-fuss{color:var(--text-3);font-size:13px;margin:18px 0 0;line-height:1.55}
.mp-fuss a{color:var(--text-2)}
.mp-neben{margin-top:22px}
.mp-neben .step p kbd,.mp kbd{font-family:var(--mono);font-size:.85em;background:var(--night-3);border:1px solid var(--line-2);
  border-bottom-width:3px;padding:1px 6px;color:var(--text)}
@media (max-width:720px){.mp{padding:22px 18px 20px}.mp-wege{grid-template-columns:1fr}}

/* ---------- Herz-Wege (Minecraft-Karte) ---------- */
.hz{margin-top:26px;padding-top:22px;border-top:1px solid var(--line)}
.hz-titel{font-family:var(--syne);font-size:1.15rem;font-weight:700;letter-spacing:-.01em;margin:0 0 14px}
.hz-wege{list-style:none;margin:0;padding:0;display:grid;gap:10px;max-width:58ch}
.hz-wege li{display:grid;grid-template-columns:8.5em 1fr;gap:12px;align-items:baseline;color:var(--text-2);
  font-size:15px;line-height:1.5}
.hz-wege b{white-space:nowrap;font-family:var(--syne);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--hit)}
.hz-rezept{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-top:20px}
.hz-gitter{list-style:none;margin:0;padding:6px;display:grid;grid-template-columns:repeat(3,108px);gap:6px;
  background:var(--night-3);border:2px solid var(--line)}
.hz-zelle{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;text-align:center;
  min-height:92px;padding:8px 4px;background:var(--night-2,#0F141E);box-shadow:inset 0 0 0 1px var(--line)}
.hz-zelle b{font-size:11.5px;font-weight:600;color:var(--text);line-height:1.2}
.hz-zelle small{font-size:10.5px;color:var(--text-3);line-height:1.2}
.hz-ding{display:block;width:22px;height:22px;image-rendering:pixelated}
.hz-ding--netherit{background:#4A4042;box-shadow:inset -4px -4px 0 #2E2729,inset 4px 4px 0 #6B5E60}
.hz-ding--kern{background:#5B6470;box-shadow:inset -4px -4px 0 #3A4049,inset 4px 4px 0 #8A93A0}
.hz-ding--echo{background:#0E5F68;box-shadow:inset -4px -4px 0 #073A40,inset 4px 4px 0 #2FB3C2}
.hz-ding--stern{background:#F2F0E6;box-shadow:inset -4px -4px 0 #B9B6A8,0 0 10px rgba(255,255,230,.55)}
.hz-ding--dreizack{background:#3E8E86;box-shadow:inset -4px -4px 0 #24564F,inset 4px 4px 0 #8FD6C8}
.hz-ding--totem{background:#E3B341;box-shadow:inset -4px -4px 0 #9C7616,inset 4px 4px 0 #6FD36A}
.hz-erg{display:flex;align-items:center;gap:12px;margin:0}
.hz-pfeil{font-size:28px;color:var(--text-3)}
.hz-herz{font-family:var(--syne);font-weight:800;font-size:1.6rem;color:var(--hit);
  padding:12px 16px;border:2px solid var(--hit);background:rgba(255,61,113,.08)}
.hz-fuss{color:var(--text-3);font-size:13px;margin:16px 0 0;line-height:1.55;max-width:60ch}
.hz kbd{font-family:var(--mono);font-size:.9em;background:var(--night-3);border:1px solid var(--line-2);
  border-bottom-width:3px;padding:1px 6px;color:var(--text)}
@media (max-width:560px){
  .hz-wege li{grid-template-columns:1fr;gap:2px}
  .hz-gitter{grid-template-columns:repeat(3,minmax(0,1fr));width:100%}
  .hz-zelle{min-height:84px}
}
