/* irontally.de · Richtung „Strichliste" · Farben und Schriften aus der App (Palette Eisen) */
@font-face{font-family:"Plex Sans";src:url(/assets/fonts/plex-sans-400.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Plex Sans";src:url(/assets/fonts/plex-sans-500.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Plex Sans";src:url(/assets/fonts/plex-sans-600.woff2) format("woff2");font-weight:600;font-display:swap}
@font-face{font-family:"Plex Cond";src:url(/assets/fonts/plex-cond-500.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Plex Cond";src:url(/assets/fonts/plex-cond-600.woff2) format("woff2");font-weight:600;font-display:swap}

:root{
  --schwarz:#0E0E0D; --flaeche:#161615; --haar:#24231F; --linie:#34322E;
  --papier:#EDEBE6; --papier-2:#C9C6BE; --bleistift:#9C9991; --signal:#FF6B2C; --messing:#C9A86A;
  --sans:"Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --cond:"Plex Cond","Plex Sans",system-ui,sans-serif;
  /* Regler (Phase 6) */
  --rand:20px; --breite:1240px;
  --abschnitt:clamp(76px,12vw,152px);
  --h1:clamp(42px,10.4vw,96px); --h2:clamp(32px,6.6vw,60px);
  --text:clamp(16px,1.1vw + 12px,18px);
  --hero-oben:clamp(20px,4vw,56px);
  --geraet:min(82vw,360px);
}
@media (min-width:768px){:root{--rand:40px}}
@media (min-width:1200px){:root{--rand:64px}}

*,*::before,*::after{box-sizing:border-box}
*{margin:0}
html{background:var(--schwarz);color:var(--papier);font-family:var(--sans);font-size:100%;-webkit-text-size-adjust:100%;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;scrollbar-color:var(--linie) var(--schwarz);color-scheme:dark}
body{font-size:var(--text);line-height:1.55;overflow-x:hidden}
@supports (overflow:clip){html,body{overflow-x:clip}}
img,svg{display:block;max-width:100%}
img{height:auto}
::selection{background:var(--papier);color:var(--schwarz)}
a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.24em;text-decoration-color:var(--linie);transition:text-decoration-color .15s}
a:hover{text-decoration-color:currentColor}
:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:2px}
.zahl{font-family:var(--cond);font-variant-numeric:tabular-nums lining-nums}
.skip{position:absolute;left:var(--rand);top:-60px;background:var(--papier);color:var(--schwarz);padding:10px 14px;border-radius:6px;z-index:10;font-weight:600;text-decoration:none}
.skip:focus{top:12px}

.wrap{width:100%;max-width:calc(var(--breite) + 2*var(--rand));margin:0 auto;padding-inline:var(--rand)}
h1,h2{font-family:var(--cond);font-weight:600;text-wrap:balance}
h1{font-size:var(--h1);line-height:.96;letter-spacing:-.015em}
h2{font-size:var(--h2);line-height:1.02;letter-spacing:-.012em}
p{max-width:62ch;text-wrap:pretty}
.leise{color:var(--papier-2)}
.abschnitt{padding-block:var(--abschnitt)}
.band{background:rgb(22 22 21 / .78)}

/* Glut und Nacht (21.10.2026, Benes Wahl B): zwei Lichtebenen hinter dem Inhalt. Nacht (tiefblau) auf html::before,
   Glut (orangerot) auf body::before, darüber Korn wie Magnesia in der Luft. Beide wandern und atmen; beim Scrollen
   wird die Glut schwächer, unten überwiegt die Nacht (Scroll-Teil im Block unten). Hellste Stellen halten AA für
   kleinen Text in Bleistift (mind. 4,6:1 inkl. Korn). */
html::before,body::before,body::after{content:"";position:fixed;z-index:-1;pointer-events:none}
html::before{inset:-30%;background:
  radial-gradient(30% 24% at 78% 38%,#1B2740,rgb(27 39 64 / 0) 70%),
  radial-gradient(34% 26% at 28% 74%,#15243A,rgb(21 36 58 / 0) 70%)}
body::before{inset:-30%;background:
  radial-gradient(30% 24% at 22% 20%,#40200F,rgb(64 32 15 / 0) 70%),
  radial-gradient(26% 20% at 72% 82%,#3A1C0E,rgb(58 28 14 / 0) 70%)}
body::after{inset:-50%;background:url(/assets/img/korn.png);opacity:.09}
@media (prefers-reduced-motion:no-preference){
  html::before{animation:nacht 17s ease-in-out infinite alternate,atmen 7s ease-in-out -3s infinite alternate}
  body::before{animation:glut 13s ease-in-out infinite alternate,atmen 5s ease-in-out infinite alternate}
  body::after{animation:korn .8s steps(1,end) infinite}
}
@keyframes glut{
  0%{transform:translate3d(-16%,-10%,0) rotate(-8deg) scale(1)}
  35%{transform:translate3d(14%,8%,0) rotate(6deg) scale(1.15)}
  70%{transform:translate3d(-4%,16%,0) rotate(-2deg) scale(.92)}
  100%{transform:translate3d(12%,-12%,0) rotate(10deg) scale(1.1)}}
@keyframes nacht{
  0%{transform:translate3d(12%,10%,0) rotate(6deg) scale(1.05)}
  40%{transform:translate3d(-14%,-6%,0) rotate(-6deg) scale(.95)}
  100%{transform:translate3d(6%,-14%,0) rotate(4deg) scale(1.18)}}
@keyframes atmen{from{filter:brightness(.78)}to{filter:brightness(1.04)}}
@keyframes glut-scroll{0%{opacity:1}55%{opacity:.55}100%{opacity:.3}}
@keyframes korn{
  0%{transform:translate3d(0,0,0)} 17%{transform:translate3d(-9%,6%,0)} 33%{transform:translate3d(7%,-11%,0)}
  50%{transform:translate3d(-13%,-4%,0)} 67%{transform:translate3d(11%,9%,0)} 83%{transform:translate3d(-4%,13%,0)}}

/* Kopf */
.kopf{display:flex;align-items:center;justify-content:space-between;height:64px}
.marke{display:flex;align-items:center;gap:10px;font-weight:600;font-size:17px;letter-spacing:-.005em;text-decoration:none}
.marke img{width:28px;height:28px;border-radius:7px}
.kopf a.store{font-size:14px;font-weight:500;color:var(--papier-2)}
/* Sprachumschalter DE | EN mit Flaggen: aktuelle Sprache mit Haarlinienrahmen, die andere als Link;
   durch eine Haarlinie vom Store-Link getrennt */
.kopf-rechts{display:flex;align-items:center;gap:14px}
.sprachen{list-style:none;padding:0 12px 0 0;margin:0;display:flex;gap:2px;border-right:1px solid var(--linie)}
.sprachen a,.sprachen .aktuell{display:inline-flex;align-items:center;gap:6px;padding:6px 7px;border:1px solid transparent;border-radius:6px;font:600 13px/1 var(--sans);letter-spacing:.04em;text-decoration:none}
.sprachen a{color:var(--bleistift);transition:color .15s,border-color .15s}
.sprachen a:hover{color:var(--papier);border-color:var(--haar)}
.sprachen .aktuell{color:var(--papier);border-color:var(--linie)}
.sprachen .flagge{flex:none;height:12px;width:auto;border-radius:2px;box-shadow:0 0 0 1px rgb(237 235 230 / .14)}
/* Unter 420 px passt der Store-Link nicht mehr neben DE | EN; das Badge steht dort im ersten Bildschirm */
@media (max-width:420px){.kopf a.store{display:none}.sprachen{padding-right:0;border-right:0}}

/* Badge: Original von Google, Freiraum = 1/4 der sichtbaren Höhe */
.badge{display:inline-block;line-height:0;margin:-2px 0;border-radius:10px}
.badge img{height:70px;width:auto}
.aktion{display:flex;align-items:center;flex-wrap:wrap;gap:6px 16px;margin-top:20px}
.aktion small{font-size:13px;line-height:1.4;color:var(--bleistift)}

/* Hero */
.hero{padding-top:var(--hero-oben);padding-bottom:clamp(56px,9vw,120px)}
.hero .unter{margin-top:16px;color:var(--papier-2);max-width:36ch}
.hero-raster{display:grid;gap:0 40px}
.hero-raster figure{margin-top:40px;transform:translateY(var(--bild-y,0px))}
.hero h1{max-width:11ch}

.buendel{display:grid;grid-template-columns:auto 1fr;gap:22px 24px;align-items:center;margin-top:36px;padding-top:24px;border-top:1px solid var(--haar)}
.buendel svg{width:var(--buendel,132px);overflow:visible}
.buendel .strich{stroke:var(--papier);stroke-width:17;stroke-linecap:round}
.buendel .quer{stroke:var(--signal);stroke-width:17;stroke-linecap:round}
.buendel text{font:500 13px var(--cond);fill:var(--bleistift);text-anchor:middle}
.buendel text.jetzt{fill:var(--signal);font-weight:600}
.protokoll{display:grid;gap:12px}
.protokoll dt{font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--bleistift)}
.protokoll dd{margin-top:4px}
.protokoll > div + div{padding-top:12px;border-top:1px solid var(--haar)}
.alt{font:500 24px/1 var(--cond);color:var(--papier-2)}
.neu{font:600 clamp(32px,9vw,40px)/1 var(--cond);display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.neu .delta{font-size:.5em;font-weight:600;color:var(--signal)}
.grund{font-size:13px;line-height:1.4;color:var(--bleistift);margin-top:6px}
.bereich{grid-column:1 / -1;font-size:12px;color:var(--bleistift);margin-top:-8px}

/* Bewegung: einmal, kurz, nur additiv */
@media (prefers-reduced-motion:no-preference){
  .buendel .strich{stroke-dasharray:132;stroke-dashoffset:132;animation:ziehen .18s cubic-bezier(.2,.7,.2,1) forwards}
  .buendel .strich:nth-of-type(1){animation-delay:.15s}.buendel .strich:nth-of-type(2){animation-delay:.25s}
  .buendel .strich:nth-of-type(3){animation-delay:.35s}.buendel .strich:nth-of-type(4){animation-delay:.45s}
  .buendel .quer{stroke-dasharray:150;stroke-dashoffset:150;animation:ziehen .24s cubic-bezier(.55,0,.1,1) .66s forwards}
  .buendel .jetzt,.neu,.grund{opacity:0;animation:da .25s ease-out .9s forwards}
}
@keyframes ziehen{to{stroke-dashoffset:0}}
@keyframes da{to{opacity:1}}

/* Zählwerk: ein Strich pro Training. Ruhezustand = Endzustand (Training 6, alle Striche, Querstrich) */
.zaehl{border-top:1px solid var(--haar)}
.zaehl-buehne{padding-block:var(--abschnitt)}
.zaehl-raster{display:grid;gap:40px;align-items:center}
.zaehl-text > * + *{margin-top:18px}
.zaehl-text p{color:var(--papier-2)}
.zaehl-liste{list-style:none;padding:0;margin-top:32px;border-top:1px solid var(--linie)}
.zaehl-liste li{display:grid;grid-template-columns:6.5em minmax(0,1fr) auto;gap:12px;align-items:baseline;padding:9px 0;border-bottom:1px solid var(--haar);font-size:14px;color:var(--papier-2)}
.zaehl-liste .wert{font:500 19px/1.3 var(--cond);color:var(--papier)}
.zaehl-liste .notiz{color:var(--bleistift)}
.zaehl-liste li:last-child .notiz{color:var(--signal);font-weight:600}
.zaehlwerk{position:relative;isolation:isolate;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"tr svg" "wdh svg" "kg svg";column-gap:20px;align-items:end;padding-top:24px;border-top:1px solid var(--haar)}
.zaehlwerk::before{content:"";position:absolute;inset:-35% -15% -25%;z-index:-1;pointer-events:none;
  background:radial-gradient(closest-side,#4A2414,rgb(74 36 20 / 0));opacity:.6}
.zw-training{grid-area:tr;font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--bleistift)}
.zw-wdh{grid-area:wdh;display:flex;align-items:baseline;gap:.08em;font:600 clamp(112px,36vw,232px)/.86 var(--cond);letter-spacing:-.03em}
.zw-n{display:inline-block;min-width:1.12em;text-align:right}
.zw-einheit{font-size:.16em;font-weight:500;letter-spacing:0;color:var(--bleistift)}
.zw-gewicht{grid-area:kg;display:flex;align-items:baseline;gap:.22em;margin-top:14px;font:600 clamp(28px,7.4vw,48px)/1 var(--cond);color:var(--papier)}
.kg-roll{display:inline-grid;justify-items:end;overflow:hidden;padding-block:.06em}
.kg-roll > span{grid-area:1 / 1}
.kg-alt{visibility:hidden}
.zw-delta{font-size:.5em;color:var(--signal)}
.zw-striche{grid-area:svg;align-self:end;width:clamp(104px,30vw,190px);overflow:visible}
.zw-striche .strich{stroke:var(--papier);stroke-width:17;stroke-linecap:round}
.zw-striche .quer{stroke:var(--signal);stroke-width:17;stroke-linecap:round}
.zw-striche text{font:500 13px var(--cond);fill:var(--bleistift);text-anchor:middle}
.zw-striche text.jetzt{fill:var(--signal);font-weight:600}

/* Geräte-Fassung für echte Screens */
.geraet{width:var(--geraet);border:1px solid var(--linie);border-radius:36px;padding:9px;background:#0A0A09}
.geraet img{border-radius:28px;width:100%}
.geraet.ausschnitt{border-bottom:0;border-radius:36px 36px 0 0;padding-bottom:0}
.geraet.ausschnitt img{border-radius:28px 28px 0 0}
.hero .geraet{margin-left:auto;margin-right:calc(var(--rand) * -.2)}

/* Zweispaltige Abschnitte: Text links, Screen rechts */
.zwei{display:grid;gap:48px;align-items:center}
.zwei .text > * + *{margin-top:18px}
.zwei .text p{color:var(--papier-2)}
.zwei figure{justify-self:center}

/* Modi */
.modi-kopf{display:grid;gap:18px}
.modi-kopf p{color:var(--papier-2)}
.modi{list-style:none;padding:0;display:grid;margin-top:48px;border-top:1px solid var(--linie)}
.modi li{display:grid;gap:4px 32px;padding:20px 0;border-bottom:1px solid var(--linie)}
.modi b{font:600 26px/1.1 var(--cond)}
.modi span{color:var(--papier-2)}

/* Anfänger */
.antworten{list-style:none;padding:0;display:flex;flex-wrap:wrap;align-items:baseline}
.antworten li{font:500 clamp(19px,4.9vw,30px)/1.2 var(--cond);color:var(--papier);white-space:nowrap}
.antworten li + li::before{content:"";display:inline-block;width:1px;height:.8em;background:var(--linie);margin:0 clamp(10px,2.6vw,16px);vertical-align:-.05em}

/* Rekorde */
.zwei .text .rekord-zeile,.rekord-zeile{display:flex;align-items:center;gap:10px;color:var(--messing);font:600 15px/1.3 var(--sans)}
.rekord-zeile svg{width:18px;height:18px;flex:none}
.zwei-screens{position:relative;justify-self:center;width:min(100%,520px);padding-bottom:40px}
.zwei-screens .geraet{width:min(64%,320px)}
.zwei-screens .geraet + .geraet{position:absolute;right:0;top:56px;background:var(--schwarz)}

/* Mehr */
.liste{list-style:none;padding:0;margin-top:40px;display:grid;column-gap:48px;border-top:1px solid var(--linie)}
.liste li{text-wrap:balance;padding:16px 0;border-bottom:1px solid var(--linie);font:500 clamp(18px,2vw,21px)/1.35 var(--cond);color:var(--papier)}

/* Nicht + Daten */
.nicht-daten{display:grid;gap:64px}
.nicht ul{list-style:none;padding:0;margin-top:28px}
.nicht li{font:500 clamp(22px,4.4vw,30px)/1.2 var(--cond);color:var(--papier-2);padding:14px 0;border-top:1px solid var(--haar)}
.daten > * + *{margin-top:18px}
.daten p{color:var(--papier-2)}

/* FAQ */
.faq h2{margin-bottom:32px}
.faq details{border-top:1px solid var(--linie)}
.faq details:last-of-type{border-bottom:1px solid var(--linie)}
.faq summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:1fr 20px;gap:16px;align-items:center;padding:20px 0;font:600 clamp(19px,2.2vw,23px)/1.25 var(--cond)}
.faq summary::-webkit-details-marker{display:none}
.faq summary .plus{position:relative;width:16px;height:16px}
.faq summary .plus::before,.faq summary .plus::after{content:"";position:absolute;left:0;top:7px;width:16px;height:2px;border-radius:2px;background:var(--papier);transition:transform .2s ease-out}
.faq summary .plus::after{transform:rotate(90deg)}
.faq details[open] summary .plus::after{transform:rotate(0)}
.faq summary:hover{text-decoration:underline;text-decoration-color:var(--linie);text-underline-offset:.2em}
.faq details p{color:var(--papier-2);padding:0 0 22px;max-width:62ch}

/* Schluss */
.schluss{text-align:left}
.schluss h2{font-size:clamp(40px,9vw,88px);max-width:12ch}
.schluss p{margin-top:16px;color:var(--papier-2)}
.naechstes{display:flex;align-items:center;gap:18px;margin-top:32px}
.naechstes p{margin:0;font:500 clamp(20px,3vw,26px)/1.2 var(--cond);color:var(--papier)}
.ein-strich{width:30px;overflow:visible}
.ein-strich .strich{stroke:var(--papier);stroke-width:17;stroke-linecap:round}
.ein-strich text{font:500 13px var(--cond);fill:var(--bleistift);text-anchor:middle}

/* Fuß */
.fuss{border-top:1px solid var(--haar);padding-block:40px 48px;font-size:14px;color:var(--bleistift)}
.fuss nav ul{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:10px 22px;margin-top:14px}
.fuss nav + nav ul{margin-top:10px}
.fuss nav a{color:var(--papier-2)}
.fuss .copy{margin-top:22px}

/* Rechtstexte */
.recht{padding-block:clamp(40px,7vw,96px) var(--abschnitt)}
.recht h1{font-size:clamp(40px,8vw,72px)}
.recht h2{font-size:clamp(22px,3vw,28px);margin-top:44px;margin-bottom:10px;letter-spacing:-.005em}
.recht p,.recht address{color:var(--papier-2);margin-top:10px;font-style:normal;max-width:60ch}
.recht .stand{margin-top:44px;font-size:14px;color:var(--bleistift)}
/* Übersetzte Rechtstexte: Hinweis auf die maßgebliche deutsche Fassung; 404: zweite Sprache darunter */
.recht .hinweis{margin-top:20px;padding-block:14px;border-block:1px solid var(--haar);font-size:15px;overflow-wrap:anywhere}
.recht .zweitsprache{margin-top:48px;padding-top:4px;border-top:1px solid var(--haar)}

@media (min-width:768px){
  .zwei{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:64px}
  .zwei.umgekehrt .text{order:2}
  .modi li{grid-template-columns:minmax(0,4fr) minmax(0,8fr);align-items:baseline;padding:24px 0}
  .liste{grid-template-columns:1fr 1fr}
  .nicht-daten{grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:72px}
}
@media (min-width:1100px){
  :root{--geraet:430px}
  .hero{padding-bottom:32px}
  .hero{--buendel:156px}
  .ein-strich{width:35px}
  .buendel{gap:22px 32px}
  .hero-raster{grid-template-columns:minmax(0,7fr) minmax(0,5fr);column-gap:72px;align-items:start}
  .hero h1{grid-column:1 / -1;max-width:none}
  .hero .unter{margin-top:28px}
  .hero-raster figure{margin:28px 0 0 auto}
  .hero .geraet.ausschnitt{border-bottom:1px solid var(--linie);border-radius:36px;padding-bottom:9px}
  .hero .geraet.ausschnitt img{border-radius:28px}
  .modi-kopf{grid-template-columns:minmax(0,7fr) minmax(0,5fr);column-gap:72px;align-items:end}
}
@media (min-width:1100px){
  .zaehl-raster{grid-template-columns:minmax(0,5fr) minmax(0,7fr);column-gap:72px}
  .zaehlwerk{padding-top:32px;column-gap:48px}
}

/* Scroll-Bewegung (21.10.2026). Nur ohne Wunsch nach reduzierter Bewegung; sonst bleibt alles im Ruhezustand.
   Browser mit Scroll-Timelines: reines CSS. Browser ohne (Firefox): assets/js/bewegung.js setzt .sa-js auf <html>,
   build.py kopiert den Block zwischen den Markern unter .sa-js, das Skript fährt die Animationen per Scrollstand. */
@property --wdh{syntax:"<integer>";inherits:true;initial-value:8}
@property --tr{syntax:"<integer>";inherits:true;initial-value:6}
@media (prefers-reduced-motion:no-preference){
@supports (animation-timeline:view()){
/*scroll*/
  /* Zählwerk: die Bühne steht, während man durch 300svh scrollt. Sechs Trainings, je ein Abschnitt der Strecke. */
  .zaehl{view-timeline:--zaehl block;height:300svh}
  .zaehl-buehne{position:sticky;top:0;min-height:100svh;display:flex;align-items:center;padding-block:clamp(24px,5svh,64px)}
  .zaehl-buehne > .wrap{width:100%}
  .zaehlwerk,.zaehlwerk *,.zaehl-liste li,.zaehl-liste .wert{animation-timeline:--zaehl;animation-fill-mode:both;animation-timing-function:linear}
  .zaehlwerk{animation-name:zaehlen;animation-range:contain 0% contain 100%}
  .zw-n .statisch,.zw-tr .statisch{display:none}
  .zw-n::after{content:counter(wdh);counter-reset:wdh var(--wdh)}
  .zw-tr::after{content:counter(tr);counter-reset:tr var(--tr)}
  .zw-n{animation-name:blitz;animation-range:contain 0% contain 100%}
  /* Licht hinter der Zahl geht an, wenn die 12 steht */
  .zaehlwerk::before{animation:licht-an linear both;animation-timeline:--zaehl;animation-range:contain 56% contain 100%}
  /* Glut wird nach unten schwächer, die Nacht übernimmt */
  body::before{animation:glut 13s ease-in-out infinite alternate,atmen 5s ease-in-out infinite alternate,glut-scroll linear both;
    animation-timeline:auto,auto,scroll(root)}
  .zw-striche .strich,.zw-striche .quer{stroke-dasharray:150}
  .zw-striche .strich,.zw-striche .quer{animation-name:ziehen-s}
  .zw-striche text{animation-name:da-s}
  .zw-striche .s1,.zw-striche .t1{animation-range:contain 0% contain 5%}
  .zw-striche .s2,.zw-striche .t2{animation-range:contain 14% contain 19%}
  .zw-striche .s3,.zw-striche .t3{animation-range:contain 28% contain 33%}
  .zw-striche .s4,.zw-striche .t4{animation-range:contain 42% contain 47%}
  .zw-striche .quer,.zw-striche .jetzt{animation-range:contain 56% contain 61%}
  .kg-alt{visibility:visible;animation-name:raus;animation-range:contain 72% contain 77%}
  .kg-neu{animation-name:rein;animation-range:contain 72% contain 77%}
  .kg-roll{animation-name:kg-farbe;animation-range:contain 70% contain 96%}
  .zw-delta{animation-name:da-s;animation-range:contain 72% contain 77%}
  .zaehl-liste li{animation-name:zeile}
  .zaehl-liste .wert{animation-name:zeile-wert}
  .zaehl-liste li:nth-child(1),.zaehl-liste li:nth-child(1) .wert{animation-range:contain 0% contain 14%}
  .zaehl-liste li:nth-child(2),.zaehl-liste li:nth-child(2) .wert{animation-range:contain 14% contain 28%}
  .zaehl-liste li:nth-child(3),.zaehl-liste li:nth-child(3) .wert{animation-range:contain 28% contain 42%}
  .zaehl-liste li:nth-child(4),.zaehl-liste li:nth-child(4) .wert{animation-range:contain 42% contain 56%}
  .zaehl-liste li:nth-child(5),.zaehl-liste li:nth-child(5) .wert{animation-range:contain 56% contain 72%}
  .zaehl-liste li:nth-child(6),.zaehl-liste li:nth-child(6) .wert{animation-range:contain 72% contain 100%;animation-name:zeile-letzte}
  .zaehl-liste li:nth-child(6) .wert{animation-name:zeile-wert-letzte}
  /* Am Handy trägt das Zählwerk die Bühne allein; die Liste bleibt für Screenreader im Text. */
  @media (max-width:767px){
    .zaehl-liste{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;margin:0}
  }

  /* Echte Screens gehen beim Hereinscrollen an, wie ein Display, das aufwacht */
  .zwei > .geraet,.zwei-screens .geraet{animation:wach linear both;animation-timeline:view();animation-range:entry 0% cover 40%}
  .zwei-screens .geraet + .geraet{animation-range:entry 20% cover 50%}
  /* Rekord: die Zeile wird Messing, der Pokal zeichnet sich */
  .rekord-zeile{animation:messing linear both;animation-timeline:view();animation-range:entry 100% cover 50%}
  .rekord-zeile path{stroke-dasharray:1;animation:ziehen-p linear both;animation-timeline:view();animation-range:entry 100% cover 50%}
  /* Was die App nicht macht: jede Zeile wird hell, wenn man sie erreicht */
  .nicht li{animation:lesen linear both;animation-timeline:view();animation-range:cover 15% cover 42%}
  /* Schluss: der erste Strich der nächsten Runde */
  .ein-strich .strich{stroke-dasharray:150;animation:ziehen-s linear both;animation-timeline:view();animation-range:entry 80% cover 45%}
/*/scroll*/
}
.sa-js{

  /* Zählwerk: die Bühne steht, während man durch 300svh scrollt. Sechs Trainings, je ein Abschnitt der Strecke. */
  .zaehl{view-timeline:--zaehl block;height:300svh}
  .zaehl-buehne{position:sticky;top:0;min-height:100svh;display:flex;align-items:center;padding-block:clamp(24px,5svh,64px)}
  .zaehl-buehne > .wrap{width:100%}
  .zaehlwerk,.zaehlwerk *,.zaehl-liste li,.zaehl-liste .wert{animation-timeline:--zaehl;animation-fill-mode:both;animation-timing-function:linear}
  .zaehlwerk{animation-name:zaehlen;animation-range:contain 0% contain 100%}
  .zw-n .statisch,.zw-tr .statisch{display:none}
  .zw-n::after{content:counter(wdh);counter-reset:wdh var(--wdh)}
  .zw-tr::after{content:counter(tr);counter-reset:tr var(--tr)}
  .zw-n{animation-name:blitz;animation-range:contain 0% contain 100%}
  /* Licht hinter der Zahl geht an, wenn die 12 steht */
  .zaehlwerk::before{animation:licht-an linear both;animation-timeline:--zaehl;animation-range:contain 56% contain 100%}
  /* Glut wird nach unten schwächer, die Nacht übernimmt */
  body::before{animation:glut 13s ease-in-out infinite alternate,atmen 5s ease-in-out infinite alternate,glut-scroll linear both;
    animation-timeline:auto,auto,scroll(root)}
  .zw-striche .strich,.zw-striche .quer{stroke-dasharray:150}
  .zw-striche .strich,.zw-striche .quer{animation-name:ziehen-s}
  .zw-striche text{animation-name:da-s}
  .zw-striche .s1,.zw-striche .t1{animation-range:contain 0% contain 5%}
  .zw-striche .s2,.zw-striche .t2{animation-range:contain 14% contain 19%}
  .zw-striche .s3,.zw-striche .t3{animation-range:contain 28% contain 33%}
  .zw-striche .s4,.zw-striche .t4{animation-range:contain 42% contain 47%}
  .zw-striche .quer,.zw-striche .jetzt{animation-range:contain 56% contain 61%}
  .kg-alt{visibility:visible;animation-name:raus;animation-range:contain 72% contain 77%}
  .kg-neu{animation-name:rein;animation-range:contain 72% contain 77%}
  .kg-roll{animation-name:kg-farbe;animation-range:contain 70% contain 96%}
  .zw-delta{animation-name:da-s;animation-range:contain 72% contain 77%}
  .zaehl-liste li{animation-name:zeile}
  .zaehl-liste .wert{animation-name:zeile-wert}
  .zaehl-liste li:nth-child(1),.zaehl-liste li:nth-child(1) .wert{animation-range:contain 0% contain 14%}
  .zaehl-liste li:nth-child(2),.zaehl-liste li:nth-child(2) .wert{animation-range:contain 14% contain 28%}
  .zaehl-liste li:nth-child(3),.zaehl-liste li:nth-child(3) .wert{animation-range:contain 28% contain 42%}
  .zaehl-liste li:nth-child(4),.zaehl-liste li:nth-child(4) .wert{animation-range:contain 42% contain 56%}
  .zaehl-liste li:nth-child(5),.zaehl-liste li:nth-child(5) .wert{animation-range:contain 56% contain 72%}
  .zaehl-liste li:nth-child(6),.zaehl-liste li:nth-child(6) .wert{animation-range:contain 72% contain 100%;animation-name:zeile-letzte}
  .zaehl-liste li:nth-child(6) .wert{animation-name:zeile-wert-letzte}
  /* Am Handy trägt das Zählwerk die Bühne allein; die Liste bleibt für Screenreader im Text. */
  @media (max-width:767px){
    .zaehl-liste{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;margin:0}
  }

  /* Echte Screens gehen beim Hereinscrollen an, wie ein Display, das aufwacht */
  .zwei > .geraet,.zwei-screens .geraet{animation:wach linear both;animation-timeline:view();animation-range:entry 0% cover 40%}
  .zwei-screens .geraet + .geraet{animation-range:entry 20% cover 50%}
  /* Rekord: die Zeile wird Messing, der Pokal zeichnet sich */
  .rekord-zeile{animation:messing linear both;animation-timeline:view();animation-range:entry 100% cover 50%}
  .rekord-zeile path{stroke-dasharray:1;animation:ziehen-p linear both;animation-timeline:view();animation-range:entry 100% cover 50%}
  /* Was die App nicht macht: jede Zeile wird hell, wenn man sie erreicht */
  .nicht li{animation:lesen linear both;animation-timeline:view();animation-range:cover 15% cover 42%}
  /* Schluss: der erste Strich der nächsten Runde */
  .ein-strich .strich{stroke-dasharray:150;animation:ziehen-s linear both;animation-timeline:view();animation-range:entry 80% cover 45%}
}
}
@keyframes zaehlen{
  0%,13.9%{--wdh:8;--tr:1} 14%,27.9%{--wdh:9;--tr:2} 28%,41.9%{--wdh:10;--tr:3}
  42%,55.9%{--wdh:11;--tr:4} 56%,71.9%{--wdh:12;--tr:5} 72%,100%{--wdh:8;--tr:6}}
@keyframes blitz{
  0%,13.9%{color:var(--papier)} 14%{color:var(--signal)} 20%,27.9%{color:var(--papier)} 28%{color:var(--signal)}
  34%,41.9%{color:var(--papier)} 42%{color:var(--signal)} 48%,55.9%{color:var(--papier)} 56%,72%{color:var(--signal)} 80%,100%{color:var(--papier)}}
@keyframes ziehen-s{from{stroke-dashoffset:150}to{stroke-dashoffset:0}}
@keyframes ziehen-p{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes da-s{from{opacity:0}to{opacity:1}}
@keyframes raus{to{transform:translateY(-105%);opacity:0}}
@keyframes rein{from{transform:translateY(105%);opacity:0}}
@keyframes kg-farbe{0%{color:var(--papier)}8%,62%{color:var(--signal)}100%{color:var(--papier)}}
@keyframes zeile{0%{color:var(--bleistift)}6%,94%{color:var(--papier)}100%{color:var(--papier-2)}}
@keyframes zeile-wert{0%{color:var(--bleistift)}6%,94%{color:var(--signal)}100%{color:var(--papier)}}
@keyframes zeile-letzte{0%{color:var(--bleistift)}6%,100%{color:var(--papier)}}
@keyframes zeile-wert-letzte{0%{color:var(--bleistift)}6%,100%{color:var(--signal)}}
@keyframes wach{from{filter:brightness(.3) saturate(.4);transform:translateY(56px) scale(.95)}to{filter:none;transform:none}}
@keyframes messing{from{color:var(--papier-2)}to{color:var(--messing)}}
@keyframes licht-an{0%{opacity:0}12%{opacity:1}100%{opacity:.6}}
@keyframes lesen{from{color:var(--bleistift)}to{color:var(--papier)}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
