/* janischatelain.ch – Basis: Haldelain Corporate Identity 2026 (Theme Dark), abgeleitet von der Haldelain-Personal-Site-Vorlage */
@font-face{font-family:"Roboto";src:url("/assets/fonts/roboto-latin-wght-normal.woff2") format("woff2");font-weight:100 900;font-style:normal;font-display:swap}
:root{
 --schwarz:#050505;--blau:#0061ff;--blau2:#2f87ff;
 --w1:#fff;--w2:rgba(255,255,255,.87);--w3:rgba(255,255,255,.6);--w4:rgba(255,255,255,.3);--w5:rgba(255,255,255,.15);--w6:rgba(255,255,255,.05);
 --pad:clamp(16px,2.6vw,40px);--r-tag:4px;--r-card:.25rem;
 --ease:cubic-bezier(.2,.7,.2,1);
}
*,*::before,*::after{box-sizing:border-box}
html{background:var(--schwarz);-webkit-text-size-adjust:100%;overflow-x:clip}
html.lenis,html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto!important}
body{margin:0;background:var(--schwarz);color:var(--w1);font-family:"Roboto",Arial,sans-serif;font-weight:300;font-size:17px;line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:clip}
img{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
p{margin:0}
h1,h2,h3{margin:0;font-weight:inherit}
strong,b{font-weight:500}
::selection{background:var(--blau);color:#fff}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-9999px}.skip:focus{left:16px;top:16px;background:var(--blau);padding:8px 12px;z-index:999;border-radius:var(--r-tag)}
:focus-visible{outline:1px solid var(--blau2);outline-offset:3px}
.px{padding-left:var(--pad);padding-right:var(--pad)}

/* Grain-GIF wie auf haldelain.ch (.main-bg.grain: fixed, repeat, Deckkraft 3 %) */
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:2147483647;opacity:.03;background:url("/assets/img/grain.gif") repeat 0 0}

/* Kleintypo */
.meta{font-size:12px;letter-spacing:.06em;text-transform:uppercase;font-weight:300;color:var(--w3);line-height:1.4}
.meta b{color:var(--w1);font-weight:400}
.tag{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 14px;border-radius:var(--r-tag);background:var(--w6);font-size:12px;font-weight:300;letter-spacing:.06em;text-transform:uppercase;color:var(--w1);line-height:1;white-space:nowrap;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:background .2s}
.tag svg{width:14px;height:14px;flex:none}
a.tag:hover{background:var(--w5)}

/* Header */
.hd{position:fixed;top:0;left:0;right:0;z-index:100;display:grid;grid-template-columns:1fr auto 1fr;align-items:start;gap:16px;padding:22px var(--pad);transition:transform .5s var(--ease)}
.hd.hide{transform:translateY(-110%)}
/* 30.09.2026 (Gesamtprüfung): Anker-Ziele unter dem fixen Header (78–82 px) frei halten – gilt für native Sprünge (#ipa, #alex-chatelain per URL); main.js liest denselben Wert für Lenis */
[id]{scroll-margin-top:96px}
/* 29.09.2026: beim Hochscrollen (y>120) dezenter dunkler Verlauf hinter dem Header – lesbar über hellen Bildern, oben weiterhin transparent, kein Blau, kein Rahmen */
.hd::before{content:"";position:absolute;inset:0 0 -24px;z-index:-1;pointer-events:none;background:linear-gradient(rgba(5,5,5,.92),rgba(5,5,5,.6) 70%,rgba(5,5,5,0));opacity:0;transition:opacity .4s var(--ease)}
.hd.scrolled::before{opacity:1}
.brand{font-weight:700;text-transform:uppercase;letter-spacing:-.03em;font-size:15px;line-height:1.2}
.brand small{display:block;font-weight:300;letter-spacing:.06em;font-size:11px;color:var(--w3);margin-top:3px}
.hd .mid{text-align:center}
.hd nav{justify-self:end;display:flex;gap:22px;align-items:center}
.hd nav a{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--w3);transition:color .2s}
.hd nav a:hover{color:#fff}
.hd nav a.tag{color:#fff}
@media(max-width:900px){.hd{grid-template-columns:1fr auto}.hd .mid,.hd nav .opt{display:none}}

/* HERO – Fullframe, Name als Laufband über dem Porträt */
.hero{position:relative;height:100svh;min-height:620px;overflow:hidden}
.hero .shine{position:absolute;left:50%;bottom:-38vw;width:70vw;height:70vw;transform:translateX(-50%);border-radius:50%;background:var(--blau);filter:blur(170px);opacity:.42}
.hero .portrait{position:absolute;left:50%;bottom:0;height:94%;transform:translateX(-50%);aspect-ratio:1280/1834;-webkit-mask-image:linear-gradient(to right,transparent 0,#000 24%,#000 76%,transparent 100%),linear-gradient(to bottom,transparent 0,#000 30%,#000 82%,transparent 100%);-webkit-mask-composite:source-in;mask-image:linear-gradient(to right,transparent 0,#000 24%,#000 76%,transparent 100%),linear-gradient(to bottom,transparent 0,#000 30%,#000 82%,transparent 100%);mask-composite:intersect}
.hero .portrait img{width:100%;height:100%;object-fit:cover}
.hero .say{position:absolute;right:var(--pad);top:36%;max-width:360px} /* 30.09.2026: 280→360 px, erste Zeile «Videoproduzent und Unternehmer.» bleibt am Desktop (bis 23 px) einzeilig */
.hero .say .arr{display:block;width:16px;height:16px;margin-bottom:22px;color:var(--w3)}
.hero .say p{font-size:clamp(18px,1.6vw,23px);line-height:1.3}
.hero .say p span{color:var(--w3)}
.hero .loc{position:absolute;left:var(--pad);top:40%}
.mq{position:absolute;left:0;right:0;bottom:12vh;white-space:nowrap;overflow:hidden;pointer-events:none;z-index:2}
.mq-track{display:inline-flex;will-change:transform}
.mq-item{display:inline-block;font-weight:700;text-transform:uppercase;letter-spacing:-.05em;line-height:.8;font-size:clamp(96px,17vw,290px);padding-right:.18em}
.mq-item i,.hero .mq-item::after{font-style:normal;font-weight:200;padding-left:.18em}
.hero .mq-item::after{content:"\2014"} /* 29.09.2026: Gedankenstrich per ::after statt <i> im h1-Text (h1-Inhalt = nur der Name), Optik identisch */
.hero .foot{position:absolute;left:var(--pad);right:var(--pad);bottom:22px;display:flex;justify-content:space-between;z-index:3}
@media(max-width:700px){.hero .say{top:auto;bottom:64px;left:var(--pad);right:auto}.hero .say .arr{display:none}.hero .loc{top:96px}.mq{bottom:158px}.hero .foot{display:none}} /* 29.09.2026: .mq 150→158 px, mehr Luft zur ersten .say-Zeile */

/* INTRO – ruhiges Swiss Design (Typo-Skala Manual: Lead Light 140 %, Fliesstext Light 140 %) */
.intro{padding:clamp(120px,15vw,240px) 9% clamp(100px,12vw,200px)}
.i-lead{font-size:clamp(26px,2.9vw,46px);line-height:1.4;font-weight:300;letter-spacing:-.012em;max-width:40ch}
.i-cols{display:grid;grid-template-columns:1fr 1fr;margin-top:clamp(64px,8vw,120px);border-top:1px solid var(--w6)}
.i-cols>div{padding:clamp(48px,7vw,150px) clamp(0px,1.2vw,24px) 0}
.i-cols>div:first-child{border-right:1px solid var(--w6);padding-right:clamp(24px,8vw,160px)}
.i-cols>div:last-child{padding-left:clamp(24px,8vw,160px)}
.i-text{font-size:clamp(19px,1.65vw,28px);line-height:1.4;font-weight:300;color:var(--w2)}
@media(max-width:800px){.intro{padding-left:var(--pad);padding-right:var(--pad)}.i-cols{grid-template-columns:1fr}.i-cols>div:first-child{border-right:0;padding-right:0}.i-cols>div:last-child{padding-left:0}.i-cols>div{padding-top:48px}}

/* FAQ – identisch zu haldelain.ch/faq */
.ci-title{margin:0 0 clamp(40px,5vw,72px);font-size:clamp(34px,3.4vw,48px);line-height:1;letter-spacing:-.02em;text-transform:uppercase;font-weight:300}
.ci-title .b{display:inline-block;font-weight:700;background:var(--blau);padding:.06em .16em 0}
.ci-title .l{display:block;padding:.04em 0 0 .16em}
.faq_grid{display:grid;grid-template-columns:1fr 1fr}
.faq_col{display:flex;flex-direction:column}
.faq_item{padding:0 32px 16px;border-top:1px solid var(--w6);transition:background-color .4s cubic-bezier(.86,0,.07,1),padding .4s cubic-bezier(.86,0,.07,1)}
.faq_item:hover{background-color:var(--w6);padding-left:48px}
.faq_trigger{display:flex;justify-content:space-between;align-items:center;gap:24px;padding:32px 0 16px;cursor:pointer;border-radius:4px}
.faq_question{font-size:clamp(19px,1.6vw,24px);font-weight:300;line-height:1.3;margin:0}
.faq_icon{position:relative;width:14.4px;height:14.4px;flex:none}
.faq_icon-bar{position:absolute;left:0;top:50%;width:100%;height:1.5px;margin-top:-.75px;background:var(--blau)}
.faq_icon-bar.vertical{transform:rotate(90deg)}
.faq_panel{overflow:hidden}
.js .faq_panel{height:0}
.faq_answer{font-size:16px;font-weight:300;line-height:1.6;color:rgba(255,255,255,.7);padding:0 40px 24px 0;margin:0}
@media(max-width:800px){.faq_grid{grid-template-columns:1fr}.faq_item{padding:0 16px 12px}.faq_item:hover{padding-left:24px}}

/* SWISS-SEKTIONEN (gleiches System wie Intro) */
.swiss{padding:clamp(120px,14vw,220px) 9% 0}
.swiss>.i-label{margin-bottom:clamp(20px,2vw,32px)}
.swiss h2.i-label{font-weight:300}
.s-list{list-style:none;margin:clamp(40px,5vw,80px) 0 0;padding:0}
.s-list a{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,5fr) minmax(0,3fr) 128px;gap:24px;align-items:baseline;padding:clamp(18px,1.8vw,26px) 0}
.s-list .k{font-size:clamp(14px,1vw,17px);color:var(--w3)}
.s-list .n{font-size:clamp(19px,1.65vw,28px);font-weight:300;line-height:1.3;transition:color .25s,transform .45s var(--ease)}
.s-list .s{font-size:clamp(14px,1vw,17px);color:var(--w3)}
.s-list .y{color:var(--w3);text-align:right;transition:color .25s,transform .45s var(--ease)}

.s-list .soon{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,5fr) minmax(0,3fr) 128px;gap:24px;align-items:baseline;padding:clamp(18px,1.8vw,26px) 0}
.s-list .soon .y{font-size:12px;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}
.s-list a:hover .n{color:var(--blau2);transform:translateX(.25em)}
.s-list a:hover .y{color:var(--blau2);transform:translate(3px,-3px)}
.more{display:inline-block;margin-top:28px;font-size:clamp(14px,1vw,17px);color:var(--w3);transition:color .2s}
.more:hover{color:#fff}
/* Werdegang wie LinkedIn-Lebenslauf */
.cv{list-style:none;margin:clamp(56px,7vw,110px) 0 0;padding:0;border-top:1px solid var(--w6)}
.cv li{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,6fr) minmax(0,3fr);gap:24px;align-items:baseline;padding:clamp(22px,2.2vw,34px) 0;border-bottom:1px solid var(--w6)}
.cv .d,.cv .l{font-size:clamp(14px,1vw,17px);color:var(--w3)}
.cv .l{text-align:right}
.cv h3{font-size:clamp(19px,1.65vw,28px);font-weight:300;line-height:1.3;margin:0 0 6px}
.cv p{font-size:clamp(14px,1vw,17px);color:var(--w3);margin:0}

.s-contact{padding-bottom:clamp(40px,5vw,72px)}
.s-contact2{padding-top:clamp(28px,3vw,48px);padding-bottom:clamp(100px,12vw,180px)}
.mail-mq{display:block;overflow:hidden;white-space:nowrap;padding:.1em 0}
.mail-mq .mq-item{font-size:clamp(40px,6.2vw,108px);font-weight:700;text-transform:uppercase;letter-spacing:-.045em;line-height:1;transition:color .3s}
.mail-mq:hover .mq-item{color:var(--blau)}

.c-tags{display:flex;gap:8px;flex-wrap:wrap}
@media(max-width:800px){.cv li{grid-template-columns:1fr;gap:4px}.cv .l{text-align:left}.s-list a{grid-template-columns:1fr 24px;gap:4px 12px}.s-list .k{grid-column:1/-1}.swiss{padding-left:var(--pad);padding-right:var(--pad)}.s-list a,.s-list li>div{grid-template-columns:1fr auto}.s-list .soon .s{display:none}.s-list .soon{grid-template-columns:1fr auto;gap:4px 12px}.s-list .soon .k{grid-column:1/-1}.s-list .s{display:none}}

/* FOOTER */
.ft{position:relative;border-top:1px solid var(--w6)}
.ft .top{display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px;padding:24px var(--pad)}
.ft .top a:hover{color:#fff}
.ft nav{display:flex;gap:22px}

/* Legal */
.legal{max-width:760px;padding:140px var(--pad) 120px;margin:0 auto}
.legal h1{text-transform:uppercase;letter-spacing:-.05em;line-height:.9;font-size:clamp(44px,7vw,96px);margin-bottom:40px}
.legal h1 .l{display:block;font-weight:200}.legal h1 .b{display:block;font-weight:700}
.legal h2{font-size:22px;font-weight:700;text-transform:uppercase;letter-spacing:-.02em;margin:40px 0 12px}
.legal p{color:var(--w2);margin-bottom:1em}
.legal a{color:var(--blau2)}

/* JS-Zustände (nur wenn JS läuft) */
.js .rv{opacity:0;transform:translateY(24px)}
@media(prefers-reduced-motion:reduce){.js .rv{opacity:1;transform:none}}

/* Layered Slider (nach Osmo-Prinzip, GSAP) */
.ls{position:relative;padding:0 var(--pad) calc(clamp(180px,15vw,260px)*.6667*.35);user-select:none;-webkit-user-select:none;touch-action:pan-y}
.ls-in{position:relative;height:clamp(560px,92vh,1000px);border-radius:var(--r-card);overflow:hidden;background:#111;color:#fff}
.ls-bgs,.ls-bg,.ls-dark,.ls-overlay{position:absolute;inset:0}
.ls-bgs{z-index:0}
.ls-bg img,.ls-bg picture{width:100%;height:100%;object-fit:cover;object-position:50% 45%}
.ls-dark{z-index:1;background:linear-gradient(180deg,rgba(5,5,5,.35) 0%,rgba(5,5,5,.1) 40%,rgba(5,5,5,.25) 100%)}
.ls-titles{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;pointer-events:none}
.ls-title{position:absolute;max-width:80%;pointer-events:auto;background:none;border:0;padding:0;margin:0;color:#fff;cursor:pointer;font:inherit;font-weight:500;text-transform:uppercase;font-size:clamp(16px,1.5vw,22px);line-height:1;letter-spacing:.04em;white-space:nowrap;will-change:transform}
.ls-title[data-active]{cursor:default}
.ls-overlay{z-index:4;pointer-events:none;display:flex;flex-direction:column;justify-content:space-between;align-items:center;padding:clamp(20px,2.4vw,32px)}
.ls-progress{display:flex;align-items:center;gap:12px;font-size:12px;font-weight:300;letter-spacing:.06em;font-variant-numeric:tabular-nums}
.ls-bar{display:block;width:80px;height:2px;background:var(--w4);overflow:hidden}
.ls-fill{display:block;width:100%;height:100%;background:var(--blau);transform:scaleX(0);transform-origin:0 50%}
.ls-nav{display:flex;gap:8px;justify-content:flex-end;width:100%}
.ls-btn{pointer-events:auto;display:flex;align-items:center;justify-content:center;width:48px;height:48px;border:0;border-radius:var(--r-tag);background:rgba(255,255,255,.08);color:#fff;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:background .3s cubic-bezier(.86,0,.07,1)}
@media(hover:hover){.ls-btn:hover{background:var(--blau)}}
.ls-prev svg{transform:scaleX(-1)}
.ls-mask{position:absolute;z-index:3;left:50%;bottom:0;width:clamp(180px,15vw,260px);aspect-ratio:3/2;transform:translateX(-50%);border-radius:var(--r-card);overflow:hidden;background:#111}
.ls-mask-item{position:absolute;inset:0;will-change:transform}
.ls-mask-item img,.ls-mask-item picture{width:100%;height:100%;object-fit:cover}
html:not(.ls-on) .ls-bg:not(:first-child),html:not(.ls-on) .ls-title:not(:first-child),html:not(.ls-on) .ls-mask-item:not(:first-child){opacity:0;visibility:hidden}
@media(max-width:767px){.ls-in{height:78vh;min-height:520px}.ls-bg img{object-position:var(--opm,50%) 45%}.ls-mask{width:min(40vw,170px)}.ls{padding-bottom:calc(min(40vw,170px)*.6667*.35)}.ls-overlay{padding:20px 16px 16px}.ls-nav{justify-content:space-between}}
/* 29.09.2026: Phone – Titel-Buttons mit ≥44 px Tippfläche (Padding + negativer Margin, optisch gleich); Nachbartitel ausgeblendet, damit kein Fragment («IN») am Bühnenrand steht */
@media(max-width:767px){.ls-title{font-size:15px;padding:15px 10px;margin:-15px -10px}.ls-on .ls-title:not([data-active]){visibility:hidden}}

/* ===== Ergänzungen janischatelain.ch – Zitate, Video (Kapitel/Kennzahlen/Thesen: archiviert 29.09.2026) ===== */

/* Zitat: gross, light, dünne Linie – kein Farbblock (CI: keine blauen Flächen) */
.q p{font-size:clamp(22px,2.2vw,34px);line-height:1.3;font-weight:300;letter-spacing:-.01em;color:var(--w1);margin:0 0 14px}
.q p::before{content:"«";color:var(--blau2)}.q p::after{content:"»";color:var(--blau2)}
.q .meta{display:block}

/* Video (YouTube nocookie) */
.vid{margin:clamp(40px,5vw,72px) 0 0}
.vid .fr{position:relative;aspect-ratio:16/9;overflow:hidden;border-radius:var(--r-card);background:#111}
.vid iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
/* 30.09.2026 A26: eigene Vorschau statt YouTube-Player – Standbild als Link (ohne JS: YouTube), Ring «Abspielen» 1 px Blau + weisses Dreieck (keine Fläche, kein Label), iframe erst beim Klick */
.yt-fac{position:absolute;inset:0;display:block;z-index:1;color:#fff;cursor:pointer}
.yt-fac img{display:block;width:100%;height:100%;object-fit:cover}
.yt-fac picture{display:contents} /* 30.09.2026: eigenes Standbild über pic() (AVIF + JPG) – das <picture> bleibt layoutneutral */
.yt-play{position:absolute;left:50%;top:50%;width:88px;height:88px;margin:-44px 0 0 -44px;transition:transform .6s var(--ease)}
.yt-play svg{display:block;width:100%;height:100%;overflow:visible}
.yt-play circle{fill:none;stroke:var(--blau);stroke-width:1;vector-effect:non-scaling-stroke}
.yt-play path{fill:currentColor}
.yt-fac:hover .yt-play,.yt-fac:focus-visible .yt-play{transform:scale(1.08)}
.yt-fac:focus-visible{outline-offset:-3px}
@media(max-width:800px){.yt-play{width:64px;height:64px;margin:-32px 0 0 -32px}}
@media(prefers-reduced-motion:reduce){.yt-play{transition:none}}
.vid figcaption{display:flex;justify-content:space-between;gap:16px;padding-top:12px}

.s-list.two a{grid-template-columns:minmax(0,3fr) minmax(0,8fr) 128px}
@media(max-width:800px){.s-list.two a{grid-template-columns:1fr auto}}
.hd nav a[aria-current="page"]{color:#fff}

/* ===== v2 – Haldelain-Komponenten für die Unterseiten ===== */

main{position:relative;z-index:1}

/* Blaues Label (CI: «Das Label») + Tag-Zeile */

/* Titel-System wie haldelain.ch: Bold auf Blau + Light-Zeile, auch als Sektionstitel */
.ci-title.sm{font-size:clamp(28px,2.6vw,40px)}
/* Unterseiten-Hero, typografisch (v2) */
.sub2{position:relative;padding:clamp(140px,17vw,240px) 9% clamp(70px,8vw,120px)}
.sub2 .shine{position:absolute;right:-20vw;top:-20vw;width:60vw;height:60vw;border-radius:50%;background:var(--blau);filter:blur(180px);opacity:.25;pointer-events:none}
.sub2 .crumbs{display:flex;gap:10px;margin-bottom:clamp(24px,3vw,40px)}.sub2 .crumbs a:hover{color:#fff}
.sub2 .ci-title{margin-bottom:clamp(28px,3vw,44px)}
.sub2 .i-lead{max-width:44ch}
/* Bild-Hero (wie haldelain.ch/about) */
.ihero{position:relative;height:min(92svh,900px);min-height:560px;margin:0 var(--pad);border-radius:var(--r-card);overflow:hidden;background:#111}
.ihero picture,.ihero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.ihero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(5,5,5,.15) 0%,rgba(5,5,5,.05) 40%,rgba(5,5,5,.85) 100%)}
.ihero .in{position:absolute;left:clamp(20px,5vw,80px);right:clamp(20px,5vw,80px);bottom:clamp(28px,5vw,72px);z-index:2}
.ihero .in .crumbs{display:flex;gap:10px;margin-bottom:20px}
.ihero .ci-title{margin-bottom:22px}
.ihero .lead{max-width:52ch;font-size:clamp(16px,1.2vw,20px);line-height:1.5;color:var(--w2)}
.ihero-wrap{padding-top:clamp(100px,11vw,150px)}
/* Sektion mit Standard-Padding ohne Top-Overkill */
.sec{padding:clamp(80px,10vw,160px) 9% 0}
.sec.tight{padding-top:clamp(48px,6vw,96px)}
@media(max-width:800px){.sec,.sub2{padding-left:var(--pad);padding-right:var(--pad)}}
/* Alternierende Kapitel: Text | Bild, Bild | Text */
.alt{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,5vw,96px);align-items:center;padding:clamp(48px,6vw,96px) 0;border-top:1px solid var(--w6)}
.alt:first-of-type{border-top:0}
.alt.rev .txt{order:2}.alt.rev .img{order:1}
.alt h2{font-size:clamp(26px,2.4vw,40px);font-weight:300;letter-spacing:-.012em;line-height:1.2;margin:18px 0 clamp(18px,2vw,28px)}
.alt p{font-size:clamp(16px,1.15vw,19px);line-height:1.55;color:var(--w2);margin:0 0 1em}.alt p:last-child{margin-bottom:0}
.alt .img{position:relative}
.alt .img .fr{position:relative;overflow:hidden;border-radius:var(--r-card);aspect-ratio:4/5;background:#111;border:1px solid var(--w5);padding:10px}

@media(max-width:800px){.alt{grid-template-columns:1fr;gap:28px}.alt.rev .txt{order:1}.alt.rev .img{order:2}.alt .img .fr{aspect-ratio:3/2}}
/* Halde-Fade-Band */
.band{position:relative;margin:clamp(80px,10vw,160px) 0 0;padding:clamp(72px,9vw,140px) 9%;overflow:hidden;background:#050505}
.band>.bg{position:absolute;inset:0;z-index:0}.band>.bg img{width:100%;height:100%;object-fit:cover;opacity:.9}
.band>.bg::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(5,5,5,.55),rgba(5,5,5,.15) 40%,rgba(5,5,5,.6))}
.band>*:not(.bg){position:relative;z-index:1}
@media(max-width:800px){.band{padding-left:var(--pad);padding-right:var(--pad)}}

/* Listen (CI): Gruppen-Titel 15 % Weiss, Einträge Light */
.li{list-style:none;margin:clamp(24px,3vw,40px) 0 0;padding:0;columns:2;column-gap:clamp(24px,4vw,64px)}
.li li span:first-child{color:var(--w3)} /* 29.09.2026 a11y: Text in w3 (≈7.3:1) statt w4 (2.5:1) */
@media(max-width:800px){.li{columns:1}}
/* Projekt-Mosaik (Portfolio-Karten 3:4) */
.mos{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:clamp(32px,4vw,56px)}
.mos img{width:100%;height:100%;object-fit:cover;transition:transform .8s var(--ease)}
.mos a:hover img{transform:scale(1.04)}
.mos .ov h3{font-size:clamp(18px,1.4vw,24px);font-weight:300;line-height:1.25;margin:0}

.mos .ov .cl{position:absolute;top:16px;left:16px}
@media(max-width:800px){.mos{grid-template-columns:1fr 1fr}}
/* Zwei-Spalten-Text (Führung) */
.two{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,6vw,120px);margin-top:clamp(32px,4vw,56px)}
.two p{font-size:clamp(16px,1.15vw,19px);line-height:1.55;color:var(--w2);margin:0 0 1em}
@media(max-width:800px){.two{grid-template-columns:1fr}}
.cta{display:inline-flex;align-items:center;gap:12px;height:48px;padding:0 18px;border-radius:var(--r-tag);background:rgba(255,255,255,.06);font-size:12px;letter-spacing:.06em;text-transform:uppercase;transition:background .3s}
.cta:hover{background:var(--blau)}.cta .n{background:var(--blau);color:#fff;font-size:11px;padding:3px 6px;border-radius:2px}

/* CI-Korrektur: Titel immer VERSAL. Kapitel-/Card-Titel nach Muster «Andere Titel» (Light + Bold-Wort in Halde-Blau, Durchschuss ~85 %) */
.alt h2,.mos .ov h3{text-transform:uppercase;letter-spacing:-.02em;line-height:.95}
.alt h2 b{font-weight:700;color:var(--blau2)}
.alt h2{font-size:clamp(28px,2.8vw,46px)}

/* 30.09.2026 (A21): Führungs-Zitat läuft über den Zitat-Baustein figure.q (Wort-Füllung, Guillemets, Laser-Autorenzeile) – Grösse und Abstände der alten .two .big bleiben */
.two .q{margin:0;padding:0;max-width:none}
.two .q p{font-size:clamp(24px,2.4vw,40px);line-height:1.25;color:#fff;margin:0 0 1em}
.two .q figcaption.meta{margin-top:18px}
/* Zitat direkt unter dem Hero (Eishockey) */
.hq{padding:clamp(40px,5vw,72px) 9% 0}
.hq .q{margin:0;border-top:0;padding-top:0;max-width:70ch}
@media(max-width:800px){.hq{padding-left:var(--pad);padding-right:var(--pad)}}

/* Bild-Hero, Split-Variante (Text links, Hochformat-Bild rechts – wie haldelain.ch-Hero) */
.ihero.split picture,.ihero.split img{left:auto;right:0;width:58%;object-position:50% 20%}
.ihero.split .in{right:auto;max-width:560px}
@media(max-width:800px){.ihero.split picture,.ihero.split img{width:100%;object-position:60% 15%}}
.ihero.split::after{background:linear-gradient(180deg,rgba(5,5,5,0) 55%,rgba(5,5,5,.75) 100%)}
@media(max-width:800px){.ihero.split picture{-webkit-mask-image:none;mask-image:none}}
.ihero.split picture{-webkit-mask-image:none;mask-image:none}
.ihero.split img{-webkit-mask-image:linear-gradient(to right,transparent 0,#000 45%);mask-image:linear-gradient(to right,transparent 0,#000 45%)}
@media(max-width:800px){.ihero.split::after{background:linear-gradient(180deg,rgba(5,5,5,.05) 0%,rgba(5,5,5,.25) 35%,rgba(5,5,5,.92) 62%,rgba(5,5,5,.97) 100%)}.ihero.split img{-webkit-mask-image:none;mask-image:none;object-position:50% 0}.ihero.split{height:100svh}}
/* Hero-Porträt: Kopf über dem Laufband (Studio-Porträt ist enger beschnitten als die Vorlage) */
.hero .portrait{height:112%;bottom:-16%}
@media(max-width:700px){.hero .portrait{height:92%;bottom:60px}}
/* Bild-Hero: Overlay wie CI («smoother, schwarzer Fade macht weisse Typo lesbar») */
.ihero:not(.split)::after{background:linear-gradient(180deg,rgba(5,5,5,.25) 0%,rgba(5,5,5,.15) 30%,rgba(5,5,5,.7) 62%,rgba(5,5,5,.95) 100%),linear-gradient(90deg,rgba(5,5,5,.55) 0%,rgba(5,5,5,0) 55%)}
@media(max-width:800px){.ihero:not(.split)::after{background:linear-gradient(180deg,rgba(5,5,5,.2) 0%,rgba(5,5,5,.3) 35%,rgba(5,5,5,.9) 60%,rgba(5,5,5,.97) 100%)}.ihero:not(.split) img{object-position:60% 30%}}

/* Mini-Fader: zwei Bilder im Rahmen, Klick/Auto wechselt */
.fader{position:relative}
.fader img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .9s var(--ease)}
.fader img.on{opacity:1}
.fader .dots{position:absolute;right:12px;top:12px;display:flex;gap:6px;z-index:2}
.fader .dots button{width:8px;height:8px;border-radius:50%;border:0;padding:0;background:var(--w4);cursor:pointer}
.fader .dots button[aria-current="true"]{background:var(--blau)}

/* Breite Fenster: Bild-Hero behält Luft über dem Kopf (oberer Bildrand bleibt sichtbar) */
@media(min-width:801px){.ihero:not(.split) img{object-position:50% 12%}}
@media(min-width:1700px){.ihero{height:min(92svh,1000px)}}

/* ===== v3 – CI-Korrektur nach Figma «Haldelain — Corporate Identity 2026» (28.09.2026) =====
   Linien nur selektiv (keine fixen Rasterlinien, keine Trennlinien in Listen), keine blauen
   Beschriftungs-Kästchen, Medien leicht abgerundet ohne Rahmen, Listen mit viel Durchschuss. */

.i-cols,.i-cols>div:first-child{border:0}
.s-list li{border-bottom:0}
.s-list a,.s-list .soon{padding:clamp(12px,1.1vw,18px) 0}
.cv,.cv li{border:0}
.cv li{padding:clamp(12px,1.2vw,20px) 0}
.li li{break-inside:avoid;display:grid;grid-template-columns:minmax(0,3fr) minmax(0,5fr);gap:12px;font-size:15px;border-bottom:0;padding:8px 0}

.alt{border-top:0}
.lbl{display:inline-block;text-transform:uppercase;font-weight:300;line-height:1;background:none;color:var(--w3);padding:0;border-radius:0;font-size:12px;letter-spacing:.06em}
.alt .img .fr{border:0;padding:0;background:#111}
.alt .img .fr .fader{overflow:hidden;inset:0;border-radius:0}
.alt .img .fr img{width:100%;height:100%;object-fit:cover;border-radius:0}

/* Projekte-Hero mit Bild */
.sub2.split .im img{width:100%;height:100%;object-fit:cover}

/* Projekte-Hero: Querformat-Bild */
.sub2.split{display:grid;gap:clamp(28px,5vw,96px);grid-template-columns:minmax(0,5fr) minmax(0,6fr);align-items:center}
.sub2.split .im{margin:0;padding:0;border:0;border-radius:var(--r-card);overflow:hidden;background:#111;aspect-ratio:3/2}
@media(max-width:800px){.sub2.split{grid-template-columns:1fr}.sub2.split .im{aspect-ratio:3/2}}
/* Wisch-Slider Haldelain-Office (Werdegang) */
.sw{margin-top:clamp(32px,4vw,56px)}
.sw-track{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none;cursor:grab;overscroll-behavior-x:contain}
.sw-track::-webkit-scrollbar{display:none}
.sw-track.drag{cursor:grabbing;scroll-snap-type:none;user-select:none}
.sw-slide{position:relative;flex:0 0 72%;margin:0;aspect-ratio:16/9;border-radius:var(--r-card);overflow:hidden;background:#111;scroll-snap-align:start}
.sw-slide img{width:100%;height:100%;object-fit:cover;pointer-events:none;transform:scale(1.05);transition:transform 1.2s var(--ease)}
/* 30.09.2026 (A11): aktives Bild fährt ruhig auf 1.0, Nachbarn bleiben bei 1.05 (overflow:hidden + cover → keine Kanten). Reduced motion: kein Zoom, kein Übergang. */
.sw-slide.on img{transform:scale(1)}
@media(prefers-reduced-motion:reduce){.sw-slide img,.sw-slide.on img{transform:none;transition:none}}

.sw-ui{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-top:16px}
.sw-ui .meta{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sw-nav{display:flex;gap:8px}
.sw-btn{width:44px;height:44px;display:grid;place-items:center;border:0;border-radius:var(--r-tag);background:rgba(255,255,255,.08);color:#fff;cursor:pointer;transition:background .25s}
.sw-btn:hover{background:var(--blau)}
.sw-btn:disabled{opacity:.3;cursor:default;background:rgba(255,255,255,.08)}
.sw-prev svg{transform:rotate(180deg)}
@media(max-width:800px){.sw-slide{flex-basis:88%}.sw-btn{width:40px;height:40px}}
/* Projekte-Mosaik: Case-Cover von haldelain.ch im Hochformat 2:3 */
.mos a{position:relative;display:block;overflow:hidden;border-radius:var(--r-card);background:#111;aspect-ratio:2/3}
.mos picture{display:block;width:100%;height:100%}
.mos .soon{align-self:flex-start;box-shadow:inset 0 0 0 1px var(--blau2)} /* 29.09.2026 CI: kein Blau als Fläche – Chip wie die anderen Tags (5 % Weiss, 4 px), Blau nur als 1-px-Kontur */
/* Abschlussarbeit am Rande (Lehrzeit, Projekte) */
/* 30.09.2026 (Feedback Janis «Warum nicht über den ganzen Screen?»): der Trailer läuft über die volle Inhaltsbreite der Sektion (16:9); nur der Satz darüber bleibt auf Lesebreite. Ring wächst auf Desktop mit. */
.ipa{margin-top:clamp(48px,6vw,88px)}
.ipa>p{max-width:720px;font-size:clamp(15px,1.05vw,17px);line-height:1.6;color:var(--w3);margin:0 0 18px}
@media(min-width:801px){.ipa .yt-play{--s:clamp(88px,7vw,120px);width:var(--s);height:var(--s);margin:calc(var(--s)/-2) 0 0 calc(var(--s)/-2)}}
.ipa .vid{margin:0 auto;max-width:calc((100svh - 96px)*16/9)} /* 30.09.2026: volle Inhaltsbreite bleibt (Wunsch Janis) – gedeckelt nur, wenn das Video sonst höher wäre als der Sichtbereich unter dem Header (niedrige Fenster, Phone quer) */
.lehre-lead{max-width:62ch;font-size:clamp(16px,1.15vw,19px);line-height:1.55;color:var(--w2);margin:0 0 clamp(32px,4vw,56px)}

/* Pixel-Morph Hero (Foto -> Voxel), Porträt höher gesetzt */
.hero .portrait{aspect-ratio:1280/1632}
.hero .portrait .morph{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none;image-rendering:pixelated}
/* Morph-Text «Meine Welt. Besteht aus Pixeln.» (nur mit JS/Motion sichtbar) */
.morph-say{display:none}
.js .morph-say{display:block;position:absolute;left:var(--pad);top:52%;z-index:3;margin:0;font-size:clamp(28px,3vw,46px);pointer-events:none}
@media(max-width:700px){.js .morph-say{top:150px;font-size:26px}}
/* Hero-Text «Vor der Kamera. Und dahinter.» – CI-Titel, Wisch- und Masken-Reveal */
.js .morph-say .b{clip-path:inset(0 100% 0 0);will-change:clip-path}
.js .morph-say .l{display:block;opacity:0;overflow:hidden}
.js .morph-say .in{display:inline-block;will-change:transform}
/* Startseite Motion: Laser-Linie Werdegang, Case-Vorschau Projektliste */
#werdegang .cv{position:relative;padding-left:clamp(18px,2vw,32px)}
.cv-line{position:absolute;left:0;top:0;bottom:0;width:1px;background:var(--blau);transform-origin:top;transform:scaleY(0)}
/* 30.09.2026 (G1a): Werdegang-Register «01 Beruf / 02 Im Tor» – Reiter-Baustein der Haltung (.tb-bar/.tb-t/.tb-p), aber ohne Zweispalter (.cvx statt .tabs).
   Das inaktive Panel liegt absolut hinter dem aktiven (statt im Grid-Stapel): so bestimmt nur die sichtbare Liste die Höhe (7 vs. 6 Zeilen → keine Leerzeile vor dem Link),
   bleibt aber im Layout, damit seine eigene Laser-Linie beim Scrollen mitläuft und beim Wechsel schon am richtigen Stand ist. .more[hidden]: display:inline-block überschreibt sonst das hidden-Attribut. */
.cvx{min-width:0}
.cvx .tb-bar{margin:clamp(40px,5vw,72px) 0 0}
.cvx .cv{margin-top:clamp(20px,2vw,32px)}
.cvx .cv h3{font-size:clamp(19px,1.65vw,28px);text-transform:none;letter-spacing:0;line-height:1.3;margin:0 0 6px;max-width:none} /* Zeilen sehen aus wie vor dem Register: .tb-p h3/p (Haltung, Versal, 36 px) greifen sonst auf die CV-Liste */
.cvx .cv p{font-size:clamp(14px,1vw,17px);line-height:1.5;color:var(--w3);max-width:none}
.cvx .tb-ps{position:relative}
#werdegang .tb-p:not(.on){position:absolute;left:0;top:0;width:100%}
.more[hidden]{display:none}
.pv{position:fixed;left:0;top:0;width:clamp(180px,15vw,240px);aspect-ratio:2/3;pointer-events:none;z-index:60}
.pv-im{position:absolute;inset:0;border-radius:var(--r-card);overflow:hidden;background:#111} /* 30.09.2026 (G4a): Bild in eigenem Rahmen, Wrapper ohne overflow – Meta-Zeile darunter */
.pv img{width:100%;height:100%;object-fit:cover}
.pv-m{position:absolute;left:0;right:0;top:100%;padding-top:12px;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--w3);text-shadow:0 1px 10px rgba(0,0,0,.8)} /* Kunde · Kennzahl unter dem Cover, nicht auf dem Bild; leer auf der Startseite */
.pv-m:empty{display:none}
.pv-l .pv-m{left:auto;right:0;text-align:right} /* Nachbesserung 30.09.2026: Vorschau links vom Zeiger → Zeile rechtsbündig, läuft nach links aus statt in den Zeiger */
.pv-m b{color:var(--w1);font-weight:400}

/* Menü (≤ 900 px) – Knopf wie haldelain.ch, Vollbild-Overlay, aktuelle Seite mit CI-Balken */
.menu-btn{display:none;position:relative;width:48px;height:48px;border:0;border-radius:50%;background:var(--blau);cursor:pointer;margin-top:-10px}
.menu-btn span{position:absolute;left:15px;right:15px;height:1.5px;background:#fff;transition:transform .4s var(--ease),top .4s var(--ease)}
.menu-btn span:first-child{top:20px}.menu-btn span:last-child{top:27px}
.menu-open .menu-btn span:first-child{top:23.5px;transform:rotate(45deg)}.menu-open .menu-btn span:last-child{top:23.5px;transform:rotate(-45deg)}
.menu{position:fixed;inset:0;z-index:99;background:#050505;display:flex;flex-direction:column;justify-content:center;padding:110px var(--pad) 40px;opacity:0;visibility:hidden;transition:opacity .4s var(--ease),visibility .4s}
.menu-open .menu{opacity:1;visibility:visible;transition:opacity .4s var(--ease),visibility 0s} /* 29.09.2026 a11y: visibility beim Öffnen sofort, damit der erste Menü-Link den Fokus annehmen kann */
.menu-open{overflow:hidden}
.menu-links{display:flex;flex-direction:column;gap:clamp(6px,1.4vh,14px)}
.menu-links a{display:block;overflow:hidden;font-size:clamp(40px,11vw,84px);font-weight:700;text-transform:uppercase;letter-spacing:-.03em;line-height:1;color:#fff}
.menu-links a span{display:inline-block;padding:.06em .12em 0}
.menu-links a[aria-current="page"] span{background:var(--blau)}
.menu-foot{display:flex;flex-wrap:wrap;gap:10px 22px;margin-top:auto;padding-top:40px}
.menu-foot a{color:var(--w3)}
@media(max-width:900px){.menu-btn{display:block}.hd nav{gap:16px}}
@media(min-width:901px){.menu{display:none}}

/* Bild-Interaktion: Zeiger, Grossansicht */
.zoomable{cursor:zoom-in}
@media(hover:hover) and (pointer:fine){.zoomable,.mos a{cursor:none}}
.cur{position:fixed;left:0;top:0;z-index:120;width:88px;height:88px;border-radius:50%;background:var(--blau);display:grid;place-items:center;pointer-events:none}
.cur span{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#fff}
.lb{position:fixed;inset:0;z-index:150;background:rgba(5,5,5,.96);display:grid;place-items:center;padding:clamp(56px,7vw,96px) clamp(16px,6vw,110px);opacity:0;visibility:hidden;transition:opacity .35s var(--ease),visibility 0s .35s}
.lb-open .lb{opacity:1;visibility:visible;transition:opacity .35s var(--ease),visibility 0s} /* 29.09.2026 a11y: visibility beim Öffnen sofort, sonst kann der Schliessen-Knopf den Fokus nicht annehmen */
.lb-open{overflow:hidden}
.lb-fig{margin:0;display:flex;flex-direction:column;align-items:center;gap:14px;max-width:100%;max-height:100%}
.lb-fig img{max-width:100%;max-height:calc(100svh - 190px);object-fit:contain;border-radius:var(--r-card)}
.lb-fig figcaption{color:var(--w3);text-align:center;max-width:60ch}
.lb-case{color:#fff;text-decoration:underline;text-decoration-color:var(--w4);text-decoration-thickness:1px;text-underline-offset:.18em;transition:color .2s,text-decoration-color .2s} /* 30.09.2026 (G4a): Link «Zum Case» wie .rp-did a – w4-Linie, Hover blau2 */
.lb-case:hover,.lb-case:focus-visible{color:var(--blau2);text-decoration-color:var(--blau2)}
.lb-x{position:absolute;top:22px;right:var(--pad);width:48px;height:48px;border:0;border-radius:50%;background:var(--blau);cursor:pointer}
.lb-x span{position:absolute;left:15px;right:15px;top:23.5px;height:1.5px;background:#fff;transform:rotate(45deg)}.lb-x span+span{transform:rotate(-45deg)}
.lb-p,.lb-n{position:absolute;top:50%;margin-top:-22px}
.lb-p{left:var(--pad)}.lb-n{right:var(--pad)}
.lb-c{position:absolute;left:var(--pad);top:36px;color:var(--w3)}
@media(max-width:700px){.lb-p,.lb-n{top:auto;bottom:22px;margin:0}}

/* Eishockey v4: Fader im Hochformat auch mobil, Bildreihe Alex */
.alt.port .img .fr{aspect-ratio:4/5}
@media(max-width:800px){.alt.port .img .fr{max-width:520px}}

/* Startseite-Slider: Vorschaubild klickbar, Hover mit Laser-Kontur (CI) und leichtem Zoom */
.ls-mask{cursor:pointer;outline:1px solid transparent;outline-offset:6px;transition:outline-color .35s var(--ease)}
.ls-mask:hover,.ls-mask:focus-visible{outline-color:var(--blau)}
.ls-mask-item img{transition:transform .8s var(--ease)}
.ls-mask:hover .ls-mask-item img{transform:scale(1.08)}
@media(hover:hover) and (pointer:fine){.ls-mask{cursor:none}}

/* Seitenabschluss: Bildkarten zu den anderen Seiten */
.nx{padding-bottom:clamp(100px,12vw,180px)}
.nx-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.nx-card{position:relative;display:block;border-radius:var(--r-card);overflow:hidden;aspect-ratio:4/5;background:#111;color:#fff}
.nx-im{position:absolute;inset:0}
.nx-im img{width:100%;height:100%;object-fit:cover;transition:transform 1s var(--ease)}
.nx-card::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(5,5,5,0) 40%,rgba(5,5,5,.88));pointer-events:none}
.nx-tx{position:absolute;left:0;right:0;bottom:0;z-index:1;padding:clamp(18px,2vw,28px)}
.nx-tx .meta{color:var(--w3)}
.nx-tx h3{font-size:clamp(26px,2.6vw,44px);font-weight:700;text-transform:uppercase;letter-spacing:-.03em;line-height:1;margin:10px 0 10px}
.nx-tx h3 span{display:inline-block;transition:transform .5s var(--ease)}
.nx-tx p{font-size:15px;line-height:1.5;color:var(--w2);margin:0;max-width:34ch}
.nx-card:hover .nx-im img{transform:scale(1.06)}
.nx-card:hover h3 span{transform:translateX(8px)}
.nx-card:first-child .nx-tx .meta{color:#fff}
@media(max-width:800px){.nx-grid{grid-template-columns:1fr}.nx-card{aspect-ratio:3/2}}
@media(hover:hover) and (pointer:fine){.nx-card{cursor:none}}
@media(max-width:800px){.nx-card img[src*="goalie-ruecken"]{object-position:50% 25%}}

/* Haltung als Register (Vorbild haldelain.ch «Drei Angebote») */
.tabs{display:grid;grid-template-columns:minmax(0,6fr) minmax(0,5fr);gap:clamp(28px,5vw,96px);align-items:start}
.tb-bar{display:inline-flex;flex-wrap:wrap;gap:4px;padding:4px;border-radius:var(--r-tag);background:var(--w6);margin:clamp(8px,1vw,16px) 0 clamp(28px,3vw,44px)}
.tb-t{border:0;background:transparent;color:var(--w3);font:inherit;font-size:12px;letter-spacing:.06em;text-transform:uppercase;padding:12px 16px;border-radius:var(--r-tag);cursor:pointer;transition:background .3s,color .3s}
.tb-t span{margin-right:4px}
.tb-t:hover{color:#fff}
.tb-t[aria-selected="true"]{background:var(--blau);color:#fff}
.tb-p{display:none}
.tb-p.on{display:block}
.tb-p h3{font-size:clamp(24px,2.2vw,36px);font-weight:300;text-transform:uppercase;letter-spacing:-.02em;line-height:1.05;margin:0 0 18px;max-width:22ch}
.tb-p p{font-size:clamp(16px,1.2vw,19px);line-height:1.6;color:var(--w2);margin:0;max-width:52ch}
.tb-im{position:relative;aspect-ratio:4/5;border-radius:var(--r-card);overflow:hidden;background:#111}
.tb-im img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transform:scale(1.04);transition:opacity .7s var(--ease),transform 1.2s var(--ease)}
.tb-im img.on{opacity:1;transform:none}
/* 29.09.2026: minmax(0,1fr) statt 1fr – sonst zwingt die nowrap-Reiterleiste die Spur auf 521 px und das Register läuft über den Rand */
@media(max-width:800px){.tabs{grid-template-columns:minmax(0,1fr)}.tb-l,.tb-r{min-width:0}.tb-r{order:-1}.tb-im{aspect-ratio:4/3}.tb-bar{display:flex;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;max-width:100%}.tb-bar::-webkit-scrollbar{display:none}.tb-t{white-space:nowrap;flex:none}}

.tb-ps{display:grid}
.tb-p,.tb-p.on{grid-area:1/1;display:block}
.tb-p{visibility:hidden;opacity:0}
.tb-p.on{visibility:visible;opacity:1}

/* ── Heitere Openair: Janis' echte Premiere-Timeline (Recap Friday, 29.09.2026). Farben wie Premiere Pro (Dark UI), bewusst ausserhalb der CI ── */
.hz{padding:clamp(120px,14vw,220px) 9% 0}
.hz-wrap{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:clamp(24px,3vw,40px) clamp(24px,4vw,64px);align-items:center}
.hz-head{max-width:560px}
.hz-head .tag{margin-bottom:28px}
.hz-head .ci-title{margin-bottom:28px}
.hz-txt{color:var(--w2);font-size:clamp(16px,1.2vw,19px);line-height:1.55}
.hz-hint{margin-top:22px;color:var(--w3);max-width:440px}
/* 30.09.2026: Phone-Hinweis unter der Spur («Timeline ziehen, um zu spulen») – nur ≤800 px, verschwindet nach der ersten Berührung (.hz-wrap.scrubbed, main.js). Auf allen Breiten zusätzlich «↔ Ziehen zum Spulen» am Abspielkopf (.pr-gh). */
.hz-mhint{display:none}
@media(max-width:800px){
 .hz-mhint{display:flex;align-items:center;gap:10px;margin:0;padding:10px 14px 11px;border-top:1px solid #111;font-family:"Roboto",Arial,sans-serif;font-size:11px;letter-spacing:.06em;text-transform:uppercase;font-weight:300;line-height:1.4;color:var(--w3);transition:opacity .4s}
 .hz-mhint svg{flex:none;width:40px;height:12px;stroke:var(--blau2);stroke-width:1;fill:none;animation:hzmh 2.4s ease-in-out infinite}
 .hz-wrap.scrubbed .hz-mhint{opacity:0;pointer-events:none}
}
@keyframes hzmh{30%{transform:translateX(-4px)}60%{transform:translateX(4px)}}
@media(prefers-reduced-motion:reduce){.hz-mhint svg{animation:none}}
/* Premiere-Grundfarben */
.pr-mon,.pr-tl{--pr-bg:#1d1d1d;--pr-pan:#232323;--pr-ln:#2c2c2c;--pr-tx:#c8c8c8;--pr-dim:#8a8a8a;--pr-blue:#2d8ceb;--pr-tc:#4aa3ff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;font-weight:400;color:var(--pr-tx);letter-spacing:0;text-transform:none}
.pr-mon{margin:0;width:clamp(260px,24vw,380px);background:var(--pr-bg);border:1px solid #111;border-radius:8px;overflow:hidden;box-shadow:0 30px 80px rgba(0,0,0,.5)}
.pr-ph{display:flex;gap:18px;padding:9px 14px;font-size:11px;white-space:nowrap;overflow:hidden;color:var(--pr-dim);border-bottom:1px solid #111}
.pr-ph .on{color:#e8e8e8;flex:none}.pr-ph i{font-style:normal;margin-left:6px}
/* 30.09.2026 (A03): Quellen-Anzeige – Mini-Thumbnail 24×14 + Clipname/fx, kürzt mit Ellipse statt die Kopfzeile zu verschieben; feste Zeilenhöhe = kein Sprung, wenn das Thumbnail kommt/geht */
.pr-ph{align-items:center;line-height:14px}
.pr-ph .src{display:flex;align-items:center;gap:6px;flex:1 1 auto;min-width:0;overflow:hidden}
.pr-ph .src .nm,.pr-ph .src .fx{min-width:0;overflow:hidden;text-overflow:ellipsis}
.pr-ph .src .nm{flex:0 0 auto;max-width:calc(100% - 30px)}.pr-ph .src .fx{flex:0 1 auto}.pr-ph .src .fx:empty{display:none} /* Effektliste kürzt zuerst, der Name erst, wenn er allein nicht mehr passt (max-width statt flex-shrink: Sub-Pixel-Schrumpfen löste sonst die Ellipse aus); 30 px = Thumb 24 + Lücke 6, sonst lag die Ellipse im abgeschnittenen Teil */
.pr-ph .src .th{flex:none;width:24px;height:14px;border-radius:2px;background-color:#000;background-repeat:no-repeat;box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.pr-ph .src .th[hidden]{display:block;visibility:hidden} /* Nachbesserung 30.09.2026: Platz bleibt reserviert – «Quelle» springt nicht zwischen «(keine Clips)» und Clip hin und her */
.pr-screen{position:relative;aspect-ratio:9/16;background:#000;margin:12px 12px 0;cursor:pointer}
.pr-screen video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.pr-big{position:absolute;inset:0;margin:auto;width:64px;height:64px;border-radius:50%;border:0;background:rgba(0,0,0,.45);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fff;display:grid;place-items:center;cursor:pointer;transition:opacity .25s,transform .25s}
.pr-big svg{width:24px;height:24px;fill:currentColor}
.hz-wrap.playing .pr-big{opacity:0;transform:scale(.9);pointer-events:none}
.pr-mf{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:10px 14px 4px;font-size:11px;white-space:nowrap}
.pr-mf .pr-dd+.pr-dd{display:none}
.pr-dd{border:1px solid #3a3a3a;border-radius:3px;padding:2px 8px;color:var(--pr-dim)}
.pr-dd:first-of-type{justify-self:start}
.pr-du{color:#e8e8e8;font-variant-numeric:tabular-nums}
.pr-tc{color:var(--pr-tc);font-variant-numeric:tabular-nums;font-size:13px}
.pr-ctl{display:flex;justify-content:center;gap:6px;padding:6px 10px 12px}
.pr-ctl button{width:34px;height:30px;border:0;border-radius:4px;background:transparent;color:#d6d6d6;display:grid;place-items:center;cursor:pointer}
.pr-ctl button:hover{background:#2e2e2e}
.pr-ctl svg{width:15px;height:15px;fill:currentColor}
.pr-ctl .snd path{stroke:currentColor;stroke-width:1.2}.pr-ctl .snd path:first-child{stroke:none}
/* 30.09.2026 Janis: «Ton an» war nicht verständlich – kleiner Pfeil + Label rechts neben dem Lautsprecher, verschwindet, sobald Ton an ist */
.snd-w{position:relative;display:flex}
.snd-hint{position:absolute;left:100%;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:6px;margin-left:6px;white-space:nowrap;pointer-events:none;font-size:11px;font-weight:300;letter-spacing:.06em;text-transform:uppercase;color:var(--w1);transition:opacity .3s}
.snd-hint svg{width:22px;height:10px;fill:none;stroke:var(--blau2);stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;animation:sndh 1.6s ease-in-out infinite}
@keyframes sndh{0%,100%{transform:translateX(0)}50%{transform:translateX(-4px)}}
.snd-w:has(.snd[aria-pressed=true]) .snd-hint{opacity:0}
@media(prefers-reduced-motion:reduce){.snd-hint svg{animation:none}}
@media(max-width:600px){.pr-ctl{padding-right:96px}}  /* Platz für «Ton an» innerhalb des Monitors */
.pr-ctl .snd .w{display:none}.pr-ctl .snd[aria-pressed=true] .w{display:block}.pr-ctl .snd[aria-pressed=true] .x{display:none}
.i-pause{display:none}.hz-wrap.playing .i-pause{display:block}.hz-wrap.playing .i-play{display:none}
/* Timeline */
.pr-tl{grid-column:1/-1;background:var(--pr-bg);border:1px solid #111;border-radius:8px;overflow:hidden;box-shadow:0 30px 80px rgba(0,0,0,.5);outline-offset:2px}
.pr-scrub:focus-visible{outline:1px solid var(--pr-blue);outline-offset:-1px} /* 29.09.2026 a11y: Slider-Rolle liegt auf der Spur (.pr-scrub), nicht mehr auf dem Wrapper */
.pr-tabs{display:flex;gap:26px;padding:9px 14px 0;font-size:12px;color:var(--pr-dim)}
.pr-tabs button{display:flex;align-items:center;gap:6px;padding:0 2px 7px;border:0;border-bottom:2px solid transparent;background:none;color:var(--pr-dim);font:inherit;font-size:12px;cursor:pointer}
.pr-tabs button:hover{color:#e8e8e8}
.pr-tabs button[aria-selected=true]{color:#e8e8e8;border-bottom-color:var(--pr-blue)}
.pr-tabs i{font-style:normal}.pr-tabs .x,.pr-tabs .m{visibility:hidden}.pr-tabs [aria-selected=true] .x,.pr-tabs [aria-selected=true] .m{visibility:visible}
.pr-tabs .sq{width:10px;height:10px;border-radius:2px;flex:none}
.pr-body[hidden]{display:none}
.pr-lanes .out{position:absolute;top:0;right:0;bottom:0;background:rgba(255,255,255,.035);pointer-events:none;border-left:1px solid #2a2a2a}
.pr-heads .mx{font-size:10px;color:var(--pr-blue)}
.pr-heads>.mix,.pr-lanes>.mix{height:22px;border-top:1px solid #111}
.pr-bar{display:flex;align-items:center;gap:24px;padding:8px 14px 6px;border-top:1px solid #111}
.pr-tc.big{font-size:16px;min-width:108px}
.pr-bar .tools{display:flex;gap:6px}.pr-bar .tools b{width:20px;height:18px;border-radius:3px;background:#2a2a2a}.pr-bar .tools b.on{background:#3a3a3a}
.pr-body{display:grid;grid-template-columns:clamp(150px,13vw,180px) 1fr;border-top:1px solid #111;user-select:none;-webkit-user-select:none}
.pr-heads{background:var(--pr-pan);border-right:1px solid #111}
.pr-heads>div,.pr-lanes>div{height:20px;border-bottom:1px solid #1a1a1a}
.pr-lanes>.pr-phd{position:absolute;height:auto;border:0}
.pr-heads>.v1,.pr-lanes>.v1{height:36px}
.pr-heads>.ru,.pr-lanes>.ru{height:30px;border-bottom:1px solid #111}
.pr-heads>.dv,.pr-lanes>.dv{height:6px;background:#141414;border-bottom:1px solid #111}
.pr-heads .h{display:flex;align-items:center;gap:7px;padding:0 8px;font-size:11px;color:var(--pr-dim)}
.pr-heads svg{width:11px;height:11px;fill:none;stroke:#8a8a8a;stroke-width:1;flex:none}
.pr-heads .sp{width:22px;height:15px;border-radius:3px;font-size:10px;display:grid;place-items:center;color:#fff;flex:none}
.pr-heads .sp:not(:empty){background:var(--pr-blue)}
.pr-heads .tn{width:24px;text-align:center;border-radius:3px;padding:1px 0}
.pr-heads .tn.on{background:var(--pr-blue);color:#fff}
.pr-heads .ms{font-size:10px;color:#7a7a7a}
.pr-lanes{position:relative;background:#1a1a1a;min-width:0;cursor:ew-resize;touch-action:pan-y;overflow:hidden}
.pr-lanes>div{position:relative}
.pr-lanes .ru{background:#1d1d1d}
.pr-lanes .ru .wa{position:absolute;left:0;right:0;bottom:0;height:3px;background:#c9b81c}
.pr-lanes .ru u{position:absolute;bottom:3px;width:1px;height:5px;background:#555}
.pr-lanes .ru span{position:absolute;top:5px;font-size:10px;color:#9a9a9a;font-variant-numeric:tabular-nums;border-left:1px solid #777;padding-left:3px;height:21px;white-space:nowrap}
/* 29.09.2026: .c (Premiere-Clips) auf .pr-lanes begrenzt – vorher global, jedes künftige class="c" wäre absolut positioniert worden */
.pr-lanes .c em{position:relative;font-style:normal;font-size:10px;line-height:1;padding:3px 4px;color:rgba(255,255,255,.92);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.pr-lanes .c .fx{position:absolute;right:3px;top:2px;font-size:10px;font-style:italic;font-weight:400;color:#fff;opacity:.9}
.pr-lanes .c{position:absolute;top:1px;bottom:1px;border-radius:2px;overflow:hidden;box-shadow:inset 0 0 0 1px rgba(0,0,0,.35);font-style:normal;display:flex;align-items:flex-start;background:var(--c,#1b6388)}
.pr-lanes .c.t-aud svg{position:absolute;inset:2px 0 0;width:100%;height:calc(100% - 2px)}
.pr-lanes .c.t-aud polygon{fill:#8fd36a;opacity:.85}
.pr-lanes .c.t-aud em{display:none}
.pr-lanes .c s{position:absolute;left:0;top:0;bottom:0;width:40%;max-width:20px;background-image:url(/assets/heitere/recap-thumbs.jpg);background-repeat:no-repeat;text-decoration:none;opacity:.95}
.pr-lanes .v1 .c s+em{padding-left:24px}
.pr-lanes .c.hit{box-shadow:inset 0 0 0 1px #fff}
.pr-phd{position:absolute;top:0;bottom:0;left:0;width:1px;background:var(--pr-blue);pointer-events:none;will-change:transform;z-index:2}
/* 30.09.2026 (Feedback Janis «Scrub-Hinweis»): Abspielkopf mit sichtbarem Griff (15×20, Premiere-Kopfmarker, grab-Cursor – pointerdown landet über Bubbling bei den Spuren),
   Puls-Ring (1-px-Kontur, 2× beim ersten Einscrollen, .hz-wrap.hz-pulse aus main.js) und Hinweis «↔ Ziehen zum Spulen» im Lineal, der dem Kopf folgt; ab 55 % links vom Kopf (.lf), nach der ersten Bedienung weg (.scrubbed). */
.pr-phd b{position:absolute;top:10px;left:var(--gx,-7px);width:15px;height:20px;background:var(--pr-blue);clip-path:polygon(0 0,100% 0,100% 62%,50% 100%,0 62%);pointer-events:auto;cursor:grab}
.pr-lanes:active .pr-phd b{cursor:grabbing}
.pr-phd::before{content:"";position:absolute;top:8px;left:calc(var(--gx,-7px) - 5px);width:25px;height:25px;border:1px solid var(--blau2);border-radius:50%;opacity:0;pointer-events:none}
.hz-wrap.hz-pulse .pr-phd::before{animation:hzpulse 1.1s ease-out 2}
@keyframes hzpulse{0%{opacity:.9;transform:scale(.5)}100%{opacity:0;transform:scale(1.7)}}
.pr-gh{position:absolute;top:6px;left:14px;display:flex;align-items:center;gap:6px;padding:2px 7px 2px 6px;border:1px solid var(--blau2);border-radius:3px;background:#1d1d1d;font-family:"Roboto",Arial,sans-serif;font-style:normal;font-size:11px;font-weight:400;letter-spacing:.06em;text-transform:uppercase;line-height:14px;color:#e8e8e8;white-space:nowrap;pointer-events:none;transition:opacity .4s}
.pr-gh svg{flex:none;width:22px;height:10px;fill:none;stroke:var(--blau2);stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
.pr-phd.lf .pr-gh{left:auto;right:14px}
.hz-wrap.scrubbed .pr-gh{opacity:0}
@media(prefers-reduced-motion:reduce){.hz-wrap.hz-pulse .pr-phd::before{animation:none}}
.hz-after{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;gap:28px clamp(24px,4vw,64px);padding-top:clamp(48px,6vw,90px);align-items:end}

.hz-after .more{grid-column:1}
@media(max-width:800px){
 .hz{padding-left:var(--pad);padding-right:var(--pad)}
 .hz-wrap{grid-template-columns:1fr}
 .pr-mon{width:min(78vw,340px);justify-self:center}
 .pr-body{grid-template-columns:44px 1fr}
 .pr-heads .h svg,.pr-heads .ms,.pr-heads .sp{display:none}
 .pr-heads .h{padding:0 4px;justify-content:center}
 .pr-heads>div,.pr-lanes>div{height:12px}
 .pr-heads>.v1,.pr-lanes>.v1{height:26px}
 .pr-heads .tn{font-size:9px;width:auto;padding:0 3px}
 .pr-lanes .c em,.pr-lanes .c .fx{display:none}
 .pr-ph .src .fx,.pr-ph .on i{display:none} /* 30.09.2026 (A03): Effektliste der Quellen-Anzeige und das ≡ hinter «Programm» entfallen auf Phones – die Kopfzeile ist 263 px breit, so bleibt «Quelle: (keine Clips)» ungekürzt */
 .pr-ph .src .th[hidden]{display:none}.pr-ph .src .th[hidden]+.nm{max-width:100%} /* Phones: kein reservierter Thumb-Platz (264 px reichen sonst nicht für «Quelle: (keine Clips)») */
 .pr-lanes .ru span:nth-child(odd){font-size:0}
 .pr-bar .tools{display:none}
 /* 29.09.2026: Sequenz-Reiter horizontal scrollbar (403 px in 341 px – «Twocolors» war auf Phones nicht wählbar) */
 .pr-tabs{gap:18px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
 .pr-tabs::-webkit-scrollbar{display:none}
 .pr-tabs button{flex:none;white-space:nowrap}
 .hz-after{grid-template-columns:1fr}
 
}

/* ── Eishockey «Im Tor»: Stationen-Bühne (29.09.2026). Ohne JS: Bilder und Texte untereinander ── */
.tor{padding:clamp(100px,12vw,180px) 9% 0}
.tor-pin{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.9fr);gap:clamp(32px,5vw,96px);align-items:center}
.tor-in{color:var(--w2);max-width:440px;margin-bottom:40px}
.tor-t{margin-bottom:28px}
.tor-yr{display:block;font-size:clamp(40px,5vw,80px);font-weight:700;letter-spacing:-.03em;line-height:1;color:var(--blau2);font-variant-numeric:tabular-nums}
.tor-t h3{font-size:clamp(22px,2vw,30px);font-weight:500;text-transform:uppercase;letter-spacing:-.01em;margin:14px 0 8px}
.tor-t p{color:var(--w3);max-width:420px}
.tor-list{list-style:none;margin:0;padding:0;display:none}
.tor-f{margin:0 0 16px;position:relative;border-radius:var(--r-card);overflow:hidden}
.tor-f img{width:100%;aspect-ratio:4/5;object-fit:cover}
.tor-f .cr{position:absolute;right:10px;bottom:10px;color:#fff;background:rgba(0,0,0,.45);padding:3px 7px;border-radius:var(--r-tag)}
.tor-n{display:none}
/* Mit JS: gestapelt, gepinnt */
.tor.on{padding:0}
.tor.on .tor-pin{height:100vh;height:100svh;padding:clamp(80px,10vh,120px) 9% clamp(32px,5vh,56px);box-sizing:border-box}
.tor.on .tor-ts{position:relative;height:clamp(170px,19vw,230px);overflow:hidden}
.tor.on .tor-t{position:absolute;inset:0;margin:0;opacity:0}
.tor.on .tor-t:first-child{opacity:1}
.tor.on .tor-list{display:grid;gap:0;margin-top:clamp(20px,3vh,40px);max-width:440px}
.tor-list button{position:relative;display:grid;grid-template-columns:36px 1fr;align-items:center;width:100%;padding:9px 0;border:0;background:none;color:var(--w3);font:inherit;font-size:14px;text-transform:uppercase;letter-spacing:.04em;text-align:left;cursor:pointer;transition:color .3s}
.tor-list button span{font-size:11px;color:var(--w3)} /* 29.09.2026 a11y: Kontrast */
.tor-list button i{position:absolute;left:0;bottom:-1px;height:1px;width:100%;background:var(--blau2);transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ease)}
.tor-list button:hover,.tor-list button[aria-current]{color:var(--w1)}
.tor-list button[aria-current] i{transform:scaleX(1)}
.tor.on .tor-r{position:relative;height:100%;display:flex;flex-direction:column;justify-content:center}
.tor.on .tor-stack{position:relative;height:min(100%,calc((100vw - 18%) * .45 * 1.25));aspect-ratio:4/5;max-width:100%;margin-left:auto}
.tor.on .tor-f{position:absolute;inset:0;margin:0;will-change:clip-path,transform}
.tor.on .tor-f img{height:100%;aspect-ratio:auto;will-change:transform}
.tor.on .tor-f:not(:first-child){clip-path:inset(100% 0 0 0)}
.tor.on .tor-f::after{content:"";position:absolute;inset:0;background:#000;opacity:var(--dim,0);pointer-events:none}
.tor.on .tor-n{display:block;text-align:right;margin-top:14px}
.tor-n b{color:var(--w1);font-weight:400}
@media(max-width:800px){
 .tor{padding-left:var(--pad);padding-right:var(--pad)}
 .tor-pin{grid-template-columns:1fr}
 .tor.on .tor-pin{padding:72px var(--pad) 20px;grid-template-rows:auto minmax(0,1fr);gap:14px;align-items:stretch}
 .tor.on .tor-l .ci-title{margin-bottom:10px;font-size:26px}
 .tor.on .tor-in,.tor.on .tor-list{display:none}
 .tor.on .tor-ts{height:118px}
 .tor-yr{font-size:36px}.tor-t h3{margin:8px 0 4px;font-size:19px}.tor-t p{font-size:14px}
 .tor.on .tor-l{order:2}
 /* 29.09.2026: Höhe aus dem Seitenverhältnis statt aus der Elternhöhe – in der auto-Reihe kollabierte der Stapel auf 0×0 (keine Bilder auf Phone/Tablet) */
 .tor.on .tor-r{order:1;min-height:0;height:auto;display:block}
 .tor.on .tor-stack{height:auto;width:min(100%,calc((100svh - 340px) * .8));aspect-ratio:4/5;margin:0 auto;touch-action:pan-y} /* 30.09.2026 (A22): horizontal wischbar (main.js Observer), vertikal scrollt der Browser */
 .tor.on .tor-stack img{-webkit-user-drag:none;user-select:none}
 .tor.on .tor-n{text-align:center;margin-top:8px}
}
.tor-card{background:#0b0b0b;box-shadow:inset 0 0 0 1px var(--blau2);aspect-ratio:4/5;display:flex;align-items:flex-end;padding:clamp(20px,3vw,36px)}
.tor-card .ci-title{margin:0;font-size:clamp(34px,3.6vw,56px)}
.tor.on .tor-card{aspect-ratio:auto}

/* Heitere: Memoji-Sticker am Monitor + Illustration Equipment-Check */
.pr-mon{position:relative;overflow:visible}
.pr-mon .pr-ph{border-radius:8px 8px 0 0}
.hz-stk{position:absolute;z-index:4;left:clamp(-166px,-9.8vw,-120px);top:clamp(-70px,-5vw,-40px);width:clamp(110px,10vw,170px);height:auto;transform:rotate(-8deg);filter:drop-shadow(0 10px 24px rgba(0,0,0,.45));pointer-events:none}

/* Nachbesserung A03 30.09.2026: Sticker auf Desktop 22–46 px weiter links (left ≈ −Breite), damit die Kamera nicht mehr über der Kopfzeile liegt – vorher verdeckte sie das «Q» von «Quelle» und das Mini-Thumbnail; die Kamera ragt jetzt nur noch unterhalb der Kopfzeile über den Monitorrand */
/* 29.09.2026: Phone – Sticker kleiner und unter die Monitor-Kopfzeile auf die Ecke des Bildschirms, damit er weder den Hinweistext noch «Quelle: (keine Clips)» verdeckt. Nachbesserung A03 30.09.2026: gilt jetzt bis 800 px (Tablet hochkant) – bei 481–800 px lag er weiter über der Kopfzeile und verdeckte «Quelle» samt Mini-Thumbnail (81 px weit) */
@media(max-width:800px){.hz-stk{left:-14px;top:36px;width:84px}}
@media(max-width:480px){.hz-stk{left:-12px;top:36px;width:72px}}

/* Eishockey: Alex als Laufbahn-Register (29.09.2026) – Station wählen, Bild wechselt */
.alx-h{font-size:clamp(26px,2.6vw,42px);line-height:1.05;text-transform:uppercase;letter-spacing:-.02em;font-weight:300;margin-bottom:28px}
.alx-h b{display:block;font-weight:700;color:var(--blau2)}
.alx-l>p{color:var(--w2);margin-bottom:16px;max-width:560px}
.alx-k{margin:36px 0 10px}
.alx-list{list-style:none;margin:0;padding:0}
.alx-list button{position:relative;display:grid;grid-template-columns:110px 1fr;gap:2px 12px;align-items:baseline;width:100%;padding:11px 0;border:0;background:none;color:var(--w3);font:inherit;font-size:15px;text-align:left;cursor:pointer;transition:color .3s,padding .4s var(--ease)}
.alx-list .y{font-size:12px;letter-spacing:.06em;color:var(--w3);font-variant-numeric:tabular-nums} /* 29.09.2026 a11y: Kontrast */
.alx-list .t{text-transform:uppercase;letter-spacing:.02em}
.alx-list em{grid-column:2;font-style:normal;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--w3)}
.alx-list i{position:absolute;left:0;bottom:-1px;height:1px;width:100%;background:var(--blau2);transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ease)}
.alx-list button:hover,.alx-list button[aria-pressed=true]{color:var(--w1);padding-left:10px}
.alx-list button[aria-pressed=true] em{color:var(--blau2)}
.alx-list button[aria-pressed=true] i,.alx-list button:hover i{transform:scaleX(1)}
.alx-stage>picture>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;clip-path:inset(100% 0 0 0);transform:scale(1.12);transition:clip-path .8s cubic-bezier(.7,0,.2,1),transform 1.2s cubic-bezier(.2,.7,.2,1),width .7s cubic-bezier(.7,0,.2,1) .35s}
.alx-stage>picture>img.on{clip-path:inset(0 0 0 0);transform:scale(1);z-index:2}
.alx-stage>picture>img.was{clip-path:inset(0 0 0 0);transform:scale(1);z-index:1}
.alx-r figcaption{margin-top:12px}
.alx-r figcaption b{color:var(--w1);font-weight:400}
/* 30.09.2026 (G3a «Gleichzeitig»): Doppelbühne. Station mit data-pair → Alex-Bild auf 58 % (object-fit komponiert um, Gesicht bleibt bei 50 % mittig),
   von rechts wischt der Janis-Streifen (42 %) ein, dazwischen die 1-px-Laser-Kante (Blau nur als Kontur), unter der Bühne die zweite Caption-Zeile.
   Ablauf: 0,15 s Breite · 0,35 s Streifen + Zoom-out · 0,55 s Kante von oben · 0,70 s Zeile. Rücklauf ohne Verzögerung. Selektoren auf >picture>img, damit der Streifen die Wisch-Regeln nicht erbt. */
.alx-stage.pair>picture>img{width:58%}
.alx-pair{position:absolute;top:0;right:0;bottom:0;width:42%;clip-path:inset(0 0 0 100%);transition:clip-path .5s cubic-bezier(.7,0,.2,1);z-index:3;pointer-events:none}
.alx-pair::before{content:"";position:absolute;left:0;top:0;bottom:0;width:1px;background:var(--blau2);transform:scaleY(0);transform-origin:top;transition:transform .3s var(--ease);z-index:1}
.alx-pair picture{position:absolute;inset:0}
.alx-pair img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transform:scale(1.12);transition:opacity 0s .5s,transform .6s var(--ease)} /* Rücklauf: Bild bleibt deckend, bis der Clip zu ist (.5s) – kein Ausbluten ins Schwarz der Bühne */
.alx-pair img.pon{opacity:1;transform:scale(1);transition:opacity 0s .35s,transform 1.2s var(--ease) .35s} /* der Clip macht den Wisch, das Bild ist ab dem ersten Pixel deckend */
.alx-stage.pair .alx-pair{clip-path:inset(0);transition:clip-path .7s cubic-bezier(.7,0,.2,1) .35s}
.alx-stage.pair .alx-pair::before{transform:scaleY(1);transition:transform .5s var(--ease) .55s}
.alx-pc{display:block;min-height:1.4em;margin-top:4px;opacity:0;transform:translateY(6px);transition:opacity .2s,transform .2s}
.alx-r.pair .alx-pc{opacity:1;transform:none;transition:opacity .3s .7s,transform .3s .7s}
.alx-stage:not(.pair)>picture>img{transition-duration:.8s,1.2s,.5s;transition-delay:0s,0s,0s} /* Rücklauf: Breite im Gleichschritt mit dem Streifen-Clip (.5s, kein Delay) – sonst klafft ein Loch zwischen Alex und Janis */
@media(max-width:800px){.alx-pc{min-height:2.8em}} /* Phone: die Zeile bricht auf zwei Zeilen um – beide reserviert, sonst rutscht die Liste unter dem Finger weg */
@media(prefers-reduced-motion:reduce){.alx-stage>picture>img,.alx-stage .alx-pair,.alx-stage.pair .alx-pair,.alx-pair::before,.alx-stage.pair .alx-pair::before,.alx-pair img,.alx-pair img.pon,.alx-pc,.alx-r.pair .alx-pc{transition:none}}
.alx-list em:empty{display:none}

/* Heitere: Kennzahlen fliegen als Push-Mitteilungen über den Monitor */
.hz-nt{position:absolute;z-index:5;right:clamp(-150px,-8vw,-40px);top:16%;width:clamp(210px,17vw,260px);display:flex;flex-direction:column;gap:10px;pointer-events:none}
.nt{display:grid;grid-template-columns:30px 1fr auto;gap:10px;align-items:center;padding:10px 12px;border-radius:14px;background:rgba(28,28,30,.78);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 12px 32px rgba(0,0,0,.45),inset 0 0 0 1px rgba(255,255,255,.08);color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif}
.nt i{width:30px;height:30px;border-radius:8px;background:var(--blau);display:grid;place-items:center}
.nt i svg{width:16px;height:16px;fill:#fff}
.nt p{margin:0;line-height:1.15;min-width:0}
.nt b{display:block;font-size:20px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.nt span{font-size:11.5px;color:rgba(255,255,255,.7)}
.nt .nt-t{align-self:start;font-size:10.5px;color:rgba(255,255,255,.5)} /* 29.09.2026: <time> → <span class="nt-t"> («jetzt» ist kein Zeitwert) */
/* 30.09.2026 (Feedback Janis, iPhone-Test 29.09.): auf Phones keine Mitteilungen – sie lagen der Timeline im Weg und mussten erst weggeklickt werden. Die vier Kennzahlen (550'000+ Views, 50+ Contentpieces, 20 Acts, 4 Eventtage) entfallen auf Phones ganz – im Text bleibt nur «über 50 Contentpieces»; Desktop/Tablet (>800 px) unverändert. main.js überspringt Einflug/Zähler bei ≤800 px. */
@media(max-width:800px){.hz-nt{display:none}}

/* Alex-Register: Text oben über beide Spalten, darunter links die Stationenliste, rechts die Bühne fest im Hochformat 4:5 (oben bündig mit der Liste, nicht mehr an deren Höhe gebunden – siehe 30.09.2026 unten). Phone/Tablet ≤800 px: Bühne, Bildzeile, darunter die Stationen als wischbare Zeile. */
.alx-grid{display:grid;gap:clamp(32px,5vw,96px);grid-template-columns:minmax(0,1fr) minmax(0,.8fr);align-items:start}
.alx-txt{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 clamp(32px,5vw,96px)}
.alx-txt .alx-h{grid-row:span 2}
.alx-l .alx-k{margin-top:0}
/* 30.09.2026 (Feedback Janis «fast alles abgeschnitten oder zu knapp»): die Bühne war an die Listenhöhe gebunden (438×419 bei 1280, 657×419 bei 1920 – Querformat!) und schnitt die 4:5-Porträts oben/unten ab.
   Neu steht sie fest im Hochformat 4:5 wie die Exporte → jedes Bild unbeschnitten, Kopf und Oberkörper mit Luft. Breite gedeckelt (520 px bzw. Fensterhöhe), damit Bühne + Bildzeile neben der Liste im Bild bleiben.
   Kleine Originale (.nat: Spielerkarte 281 px, SCL-Porträt 500 px) stehen in Originalproportion und höchstens Originalgrösse auf dunklem Grund statt grossgezogen. */
.alx-r{margin:0;position:relative;top:0;display:flex;flex-direction:column;justify-self:end;width:100%;max-width:min(520px,calc((100vh - 200px)*.8))}
.alx-stage{position:relative;border-radius:var(--r-card);overflow:hidden;background:#0b0b0b;flex:none;aspect-ratio:4/5;min-height:0}
.alx-stage>picture>img.nat{object-fit:scale-down;background:#0b0b0b}
/* 29.09.2026: Bild auf Phone/Tablet nicht mehr sticky – es schob sich beim Scrollen über die Stationen, die Bildunterschrift lag auf «Geschäftsführer» */
@media(max-width:800px){.alx-txt{grid-template-columns:1fr}.alx-grid{grid-template-columns:minmax(0,1fr)}.alx-l{min-width:0}.alx-r{position:relative;top:auto;z-index:auto;justify-self:start;max-width:min(440px,calc((100svh - 272px)*.8))}}
/* 30.09.2026 Nachbesserung (Gegenprüfung): mit der 4:5-Bühne (429 statt 257 px hoch bei 375) passten Bild und die achtzeilige Stationenliste auf dem Phone nicht mehr gemeinsam in den Sichtbereich –
   bei den unteren Stationen war das Bild zu 0–44 % sichtbar, ohne Kopf. Neu ≤800 px: die Stationen stehen als EINE wischbare Zeile ÜBER der Bühne (Reiter über dem Bild – gleiches Muster wie die
   scrollende Reiterleiste .tb-bar; DOM-Reihenfolge Liste → Bild, kein order mehr), die gewählte Station rückt in die Mitte (main.js), darunter die 1-px-Linie in Blau2.
   Über der Bühne liegt damit immer gleich viel (Header 82 + Überschrift 27 + Zeile 82 + Abstand 20 = 211 px), die unterschiedlich lange Bildzeile steht darunter und verschiebt nichts unter dem Finger.
   Bühnenhöhe höchstens 100svh − 272 px (211 + Bildzeile bis zwei Zeilen + Luft) → Zeile, ganzes Bild und die Bildzeile stehen bei JEDER Station gleichzeitig im Bild, auch mit eingeblendetem Header.
   Die Zeile läuft randabfallend bis an die Fensterkanten (rechts weich ausgeblendet = «es geht weiter»); die senkrechte Liste bleibt für >800 px unverändert. */
@media(max-width:800px){
 .alx-grid{row-gap:20px}
 .alx-txt{margin-bottom:12px}
 .alx-list{display:flex;gap:28px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;margin-inline:calc(50% - 50vw);padding-inline:calc(50vw - 50%) 56px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 14px,#000 calc(100% - 56px),transparent);mask-image:linear-gradient(90deg,transparent,#000 14px,#000 calc(100% - 56px),transparent)}
 .alx-list::-webkit-scrollbar{display:none}
 .alx-list li{flex:none;display:flex}
 .alx-list button{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:2px;width:auto;padding:8px 0 12px;white-space:nowrap} /* oben bündig: Stationen ohne Zusatz (zwei Zeilen) stehen auf derselben Höhe wie die dreizeiligen */
 .alx-list i{bottom:0} /* die Zeile scrollt (overflow) – die Linie läge bei −1 px im abgeschnittenen Bereich */
}

/* Mittlere Breiten (z.B. Browser-Fenster neben einem Chat): Kennzahlen unter den Monitor, Sticker weg von der Monitor-Kopfzeile */
@media(min-width:801px) and (max-width:1280px){
 .hz-nt{position:relative;right:auto;top:auto;width:auto;display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 12px 0}
 .nt{padding:8px 10px;grid-template-columns:24px 1fr;gap:8px;border-radius:12px}
 .nt .nt-t{display:none}.nt i{width:24px;height:24px;border-radius:6px}.nt i svg{width:13px;height:13px}
 .nt b{font-size:17px}.nt span{font-size:10.5px}
 .pr-mon{width:clamp(280px,34vw,360px)}
 .hz-stk{left:-100px;top:-58px;width:104px}
}

/* Heitere: BTS-Collage (Fotos + Handyclips), fächert beim Scrollen aus */
.hz-after{display:block}
.bw-head{display:flex;align-items:baseline;gap:18px;margin-bottom:18px}
.bw-t{font-size:clamp(22px,2.2vw,34px);text-transform:uppercase;letter-spacing:-.01em}
.bw{position:relative;aspect-ratio:100/38;margin-bottom:40px}
.bw-c{position:absolute;margin:0;border-radius:var(--r-card);overflow:hidden;border:1px solid var(--w5);background:#111;box-shadow:0 24px 60px rgba(0,0,0,.55);transform:rotate(var(--r,0deg));transition:box-shadow .3s;cursor:zoom-in;will-change:transform}
.bw-c img,.bw-c video{display:block;width:100%;height:100%;object-fit:cover}
.bw-c:hover{z-index:6;box-shadow:0 30px 80px rgba(0,0,0,.7)}
.bw-1{left:0;top:12%;width:20%;aspect-ratio:4/5;--r:-5deg}
.bw-2{left:19.5%;top:0;width:18%;aspect-ratio:9/16;--r:3deg;z-index:2}
.bw-3{left:38.5%;top:14%;width:20%;aspect-ratio:4/5;--r:-3deg}
.bw-4{left:58%;top:2%;width:18%;aspect-ratio:9/16;--r:4deg;z-index:3}
.bw-5{left:77%;top:12%;width:22%;aspect-ratio:4/5;--r:-2deg}
@media(max-width:800px){
 .bw{height:auto;aspect-ratio:auto;display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 calc(-1 * var(--pad)) 24px;padding:0 var(--pad) 20px}
 .bw-c{position:relative;left:auto;top:auto;flex:0 0 62vw;scroll-snap-align:center;transform:none}
}

/* Profil: blaue Markierung wie ein Textmarker (zieht beim Einblenden auf), Icons, Logo-Laufband */
.hl{background:linear-gradient(var(--blau),var(--blau)) no-repeat 0 60%/0% 88%;padding:0 .12em;margin:0 -.04em;transition:background-size 1.1s cubic-bezier(.7,0,.2,1)}
.hl.on{background-size:100% 88%}
.i-label{font-size:clamp(14px,1vw,17px);color:var(--w3);margin-bottom:14px;display:flex;align-items:center;gap:10px}
.i-ic{width:26px;height:26px;border-radius:7px;background:var(--blau);display:grid;place-items:center;flex:none}
.i-ic svg{width:15px;height:15px;fill:#fff}
/* 30.09.2026: Memoji-Sticker bei «Heute» (Kamera) und «Abseits der Agentur» (Goalie) – dekorativ, absolut neben dem Label (kein Layout-Einfluss), ragen nur in den Leerraum darüber. Ohne JS/bei reduce statisch Pose 1. */
.i-lt{position:relative}
.stk{position:absolute;left:calc(100% + 14px);bottom:-10px;width:112px;display:block;transform:rotate(-6deg);transform-origin:50% 85%;filter:drop-shadow(0 10px 24px rgba(0,0,0,.45));-webkit-tap-highlight-color:transparent}
.stk img{display:block;width:100%;height:auto}
.stk-g{width:104px;transform:rotate(4deg)}
.stk-g .p2{position:absolute;left:0;top:0;opacity:0}
.stk-puck{position:absolute;left:85.7%;top:13.5%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:#fff;opacity:0;pointer-events:none}
.stk-puck::before{content:"";position:absolute;right:50%;top:50%;width:34px;height:4px;margin-top:-2px;border-radius:2px;background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.55))}
@media(max-width:800px){.i-cols>div{padding-top:64px}.stk,.stk-g{width:72px;bottom:-6px}}
.logos{margin-top:clamp(56px,7vw,110px)}
.logos>.meta{display:block;margin-bottom:22px}
.logos .lane{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.logos .mq-track{display:flex;width:max-content;align-items:center}
.logos .lg{display:flex;align-items:center;justify-content:center;height:clamp(34px,3.4vw,52px);padding:0 clamp(28px,3.4vw,56px)}
.logos .lg img{height:100%;width:auto;max-width:180px;object-fit:contain;filter:brightness(0) invert(1);opacity:.55;transition:opacity .3s}
.logos .lg:hover img{opacity:1}
.bw-c .tag{position:absolute;left:10px;bottom:10px;background:rgba(0,0,0,.5);height:26px;padding:0 10px;font-size:11px}

/* Projekte: Collage «Hinter der Kamera» (7 Karten) */
.bw-pro{aspect-ratio:100/30}
.bw-pro .pc-1{left:0;top:6%;width:15%;aspect-ratio:2/3;--r:-5deg}
.bw-pro .pc-3{left:13.5%;top:0;width:15%;aspect-ratio:2/3;--r:3deg;z-index:2}
.bw-pro .pc-2{left:27%;top:20%;width:30%;aspect-ratio:3/2;--r:-2deg;z-index:3}
.bw-pro .pc-5{left:55.5%;top:4%;width:15%;aspect-ratio:2/3;--r:4deg;z-index:2}
.bw-pro .pc-6{left:69.5%;top:0;width:15%;aspect-ratio:2/3;--r:-3deg}
.bw-pro .pc-7{left:84%;top:7%;width:15%;aspect-ratio:2/3;--r:4deg}
@media(max-width:800px){.bw-pro{aspect-ratio:auto}}
/* Republica: Stationen-Leiste + Karten */
.rp-steps{list-style:none;margin:clamp(40px,5vw,72px) 0 clamp(32px,4vw,56px);padding:26px 0 0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;position:relative;border-top:1px solid var(--w5)}
.rp-line{position:absolute;left:0;top:-1px;height:1px;width:100%;background:var(--blau2);transform:scaleX(var(--p,0));transform-origin:left}
.rp-steps li{position:relative}
.rp-steps li::before{content:"";position:absolute;top:-31px;left:0;width:9px;height:9px;border-radius:50%;background:var(--schwarz);border:1px solid var(--blau2);transition:background .4s}
.rp-steps li.on::before{background:var(--blau2)}
.rp-d{display:block;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--w3)}
.rp-steps b{display:block;font-size:clamp(26px,2.6vw,40px);font-weight:700;text-transform:uppercase;letter-spacing:-.02em;margin:8px 0 6px}
.rp-s{color:var(--w3);font-size:15px}

@media(max-width:800px){.rp-steps{grid-template-columns:1fr;gap:28px;border-top:0;border-left:1px solid var(--w5);padding:0 0 0 22px}.rp-line{top:0;left:-1px;width:1px;height:100%;transform:scaleY(var(--p,0));transform-origin:top}.rp-steps li::before{top:6px;left:-27px}}

/* Werdegang: Jahreszahl als Kontur-Wasserzeichen, Kapitel-Navigator, Zeitleiste mit Linie */
.chn{position:fixed;left:clamp(14px,1.6vw,28px);top:50%;z-index:60;transform:translateY(-50%);display:flex;flex-direction:column;gap:14px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .4s,visibility .4s} /* 29.09.2026 a11y: visibility, sonst sind die Knöpfe unsichtbar fokussierbar */
.chn.show{opacity:1;visibility:visible;pointer-events:auto}
.chn button{display:flex;align-items:center;gap:10px;background:none;border:0;padding:0;color:var(--w3);font:inherit;font-size:11px;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;transition:color .3s}
.chn button i{width:7px;height:7px;border-radius:50%;border:1px solid currentColor;transition:background .3s,transform .3s}
.chn button span{max-width:0;overflow:hidden;white-space:nowrap;transition:max-width .5s var(--ease)}
.chn button:hover span,.chn button.on span{max-width:120px}
.chn button.on{color:var(--w1)}.chn button.on i{background:var(--blau2);border-color:var(--blau2);transform:scale(1.3)}
@media(max-width:1100px){.chn{display:none}}
.tlv-line{position:absolute;left:-1px;top:0;width:1px;height:100%;background:var(--blau2);transform:scaleY(var(--p,0));transform-origin:top}
.tlv li::before{content:"";position:absolute;left:-31px;top:50%;width:9px;height:9px;margin-top:-5px;border-radius:50%;background:var(--schwarz);border:1px solid var(--w4);transition:background .3s,border-color .3s}
.tlv li.on{opacity:1}.tlv li.on::before{background:var(--blau2);border-color:var(--blau2)}
.tlv{position:relative;border-left:1px solid var(--w5);padding-left:26px;display:block;columns:auto;column-count:1}
.tlv li{position:relative;transition:color .4s,opacity .4s;opacity:.45;display:grid;grid-template-columns:minmax(120px,200px) 1fr;gap:16px;padding:8px 0}
/* 29.09.2026: Phone – Datum als Zeile über dem Text (vorher 200 px Datumsspalte, 100 px Textspalte) */
@media(max-width:800px){.tlv li{grid-template-columns:1fr;gap:2px}}
.rp-did{max-width:760px;margin:0 0 clamp(28px,3vw,44px)}
.rp-did .bw-t{margin-bottom:12px}
.rp-did p:last-child{color:var(--w2)}
.rp .bw-pro{margin-bottom:clamp(56px,7vw,110px)}

/* Links im Fliesstext: dezent unterstrichen in Halde-Blau */
.i-lead a,.i-text a,.lead a,.hz-txt a,.alx-txt a,.alt .txt p a,.band p a,.lehre-lead a,.rp-did a,.faq_answer a{text-decoration:underline;text-decoration-color:var(--w4);text-decoration-thickness:1px;text-underline-offset:.18em;transition:color .2s,text-decoration-color .2s}
.i-lead a:hover,.i-text a:hover,.lead a:hover,.hz-txt a:hover,.alx-txt a:hover,.alt .txt p a:hover,.band p a:hover,.lehre-lead a:hover,.rp-did a:hover,.faq_answer a:hover{color:var(--blau2);text-decoration-color:var(--blau2)}
/* Link im blauen Textmarker: im Hover weiss statt blau, sonst Blau auf Blau; :is() hebt die Spezifität über die Hover-Regel darüber (29.09.2026) */
:is(.i-lead,.i-text,.lead,.hz-txt,.alx-txt,.alt .txt p,.band p,.lehre-lead,.rp-did,.faq_answer) .hl a:hover{color:var(--w1);text-decoration-color:var(--w1)}

/* Zitate: Wort für Wort heller beim Scrollen, Guillemets fliegen ein, Autorzeile mit Laser-Linie (29.09.) */
.q{margin:clamp(32px,4vw,56px) 0 0;padding:clamp(20px,2.4vw,36px) 0 0;max-width:60ch;border-top:0;padding-top:0;margin-left:0;margin-right:0}
.q blockquote{margin:0}
.q p::before,.q p::after{content:none}
.q .qm{display:inline-block;color:var(--blau2);will-change:transform}
.q .qw{transition:none}
.q figcaption.meta{display:flex;align-items:center;gap:12px;margin-top:6px}
.q figcaption::before{content:"";width:var(--ql,32px);height:1px;background:var(--blau2);transition:width 1s var(--ease)}
.q.anim figcaption::before{--ql:0px}.q.anim.on figcaption::before{--ql:40px} /* 29.09.2026: .anim statt .js (Root-Flag) – gesetzt in main.js Zitate-Block */
/* Alex-Register: ruhig – kein Springen der Zeilen, Fokusrahmen nur per Tastatur */
.alx-list button:hover,.alx-list button[aria-pressed=true]{padding-left:0}
.alx-list button .t,.alx-list button em{transition:transform .4s var(--ease)}
.alx-list button[aria-pressed=true] .t,.alx-list button[aria-pressed=true] em{transform:translateX(10px)}
@media(max-width:800px){.alx-list button[aria-pressed=true] .t,.alx-list button[aria-pressed=true] em{transform:none}}
.alx-list button:focus:not(:focus-visible){outline:none} /* 29.09.2026 a11y: Tastatur-Fokus bleibt sichtbar */
.alx-list button:focus-visible{outline:1px solid var(--blau2);outline-offset:2px}

/* Mitteilungen: «Alle ausblenden» (iOS-Stil) – erscheint beim Überfahren des Stapels, auf Touch immer */
.hz-nt .nt{pointer-events:auto}
.nt-all{align-self:flex-end;pointer-events:auto;display:inline-flex;align-items:center;gap:8px;height:28px;padding:0 12px;border:0;border-radius:14px;background:rgba(28,28,30,.78);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:inset 0 0 0 1px rgba(255,255,255,.08);color:#fff;font:500 12px/1 -apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;cursor:pointer;opacity:0;transform:translateY(6px);transition:opacity .25s,transform .25s}
.hz-nt.ready:hover .nt-all,.nt-all:focus-visible{opacity:1;transform:none}
@media(hover:none){.hz-nt.ready .nt-all{opacity:1;transform:none}}
@media(max-width:1280px){.nt-all{grid-column:1/-1;justify-self:end}}

/* Haltung «03 KI»: Echt gegen KI – Regler mit Laser-Linie */
.tb-im .ki-ai{position:absolute;inset:0;background-size:cover;background-position:center;opacity:0;clip-path:inset(0 0 0 var(--k,100%));transition:opacity .5s var(--ease);z-index:2;pointer-events:none}
.tb-im .ki-h{position:absolute;top:0;bottom:0;left:var(--k,100%);width:44px;margin-left:-22px;z-index:3;opacity:0;pointer-events:none;cursor:ew-resize;touch-action:pan-y;transition:opacity .4s}
.tb-im .ki-h::before{content:"";position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--blau2);box-shadow:0 0 12px rgba(47,135,255,.7)}
.tb-im .ki-h i{position:absolute;left:50%;top:50%;width:38px;height:38px;margin:-19px 0 0 -19px;border-radius:50%;background:rgba(5,5,5,.6);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);box-shadow:inset 0 0 0 1px var(--blau2)}
.tb-im .ki-h i::before,.tb-im .ki-h i::after{content:"";position:absolute;top:50%;width:6px;height:6px;margin-top:-3px;border-top:1px solid #fff;border-left:1px solid #fff}
.tb-im .ki-h i::before{left:10px;transform:rotate(-45deg)}.tb-im .ki-h i::after{right:10px;transform:rotate(135deg)}
/* 29.09.2026: das KI-Foto steckt in einem <picture> (AVIF) – Geschwister-Bezug daher über :has() auf dem <picture> */
.tb-im picture:has(>img[data-ki].on) ~ .ki-ai,.tb-im picture:has(>img[data-ki].on) ~ .ki-h{opacity:1}
.tb-im picture:has(>img[data-ki].on) ~ .ki-h{pointer-events:auto}

/* Echt / KI direkt auf dem Bild (Wunsch Janis), folgen dem Regler */
.tb-im .ki-lb{position:absolute;top:14px;z-index:4;height:28px;padding:0 12px;display:flex;align-items:center;border-radius:var(--r-tag);background:rgba(5,5,5,.55);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#fff;opacity:0;transition:opacity .4s;pointer-events:none}
.tb-im .ki-lb-l{left:14px}
.tb-im .ki-lb-r{right:14px}
.tb-im picture:has(>img[data-ki].on) ~ .ki-lb{opacity:1}
.lehre-lead + .lehre-lead{margin-top:18px}
/* Case-Kacheln: Zeitraum, Kennzahl, Rolle (29.09.2026) */
.mos .ov .mf{margin:2px 0 0;font-size:13px;color:var(--w1)}
.mos .ov .mr{margin:0;font-size:12px;color:var(--w3);line-height:1.35}
.mos .ov{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-end;padding:20px;gap:8px;background:linear-gradient(180deg,rgba(5,5,5,0) 30%,rgba(5,5,5,.6) 55%,rgba(5,5,5,.94))}
/* 29.09.2026: auch auf Phones zwei Spalten (Kachel ~250 px statt 515 px hoch, halbiert die Seitenlänge); Overlay kompakter, bleibt lesbar */
@media(max-width:480px){.mos{grid-template-columns:1fr 1fr;gap:8px}.mos .ov{padding:12px;gap:4px}.mos .ov h3{font-size:15px}.mos .ov .mf{font-size:11px}.mos .ov .mr{font-size:11px}.mos .ov .cl{top:10px;left:10px;height:24px;padding:0 8px;font-size:10px;display:block;line-height:24px;width:max-content;max-width:calc(100% - 20px);overflow:hidden;text-overflow:ellipsis}.mos .soon{height:24px;padding:0 8px;font-size:10px}}
/* Werdegang: Collage Haldelain-Anfänge mit Video erster Arbeitstag (29.09.2026) */
.band-txt{max-width:46em;margin:clamp(24px,3vw,40px) 0 clamp(32px,4vw,56px)}
.band-txt p{color:var(--w2);margin:0 0 16px}
.bw-wd{aspect-ratio:100/40}
.bw-wd .wd-0{left:0;top:10%;width:18%;aspect-ratio:2/3;--r:-4deg}
.bw-wd .wd-1{left:17%;top:18%;width:20%;aspect-ratio:4/5;--r:3deg}
.bw-wd .wd-2{left:37%;top:0;width:19%;aspect-ratio:9/16;--r:2deg;z-index:3}
.bw-wd .wd-3{left:59%;top:8%;width:18%;aspect-ratio:2/3;--r:-3deg;z-index:2}
.bw-wd .wd-4{left:80%;top:14%;width:18%;aspect-ratio:2/3;--r:3deg}

.bw-set{aspect-ratio:100/64;margin-top:clamp(32px,4vw,56px)}
.bw-set .st-2{left:6%;top:6%;width:32%;aspect-ratio:3/2;--r:-3deg}
.bw-set .st-1{left:35%;top:0;width:18%;aspect-ratio:9/16;--r:3deg;z-index:2}
.bw-set .st-3{left:52%;top:8%;width:26%;aspect-ratio:12/13;--r:-2deg}
.bw-set .st-4{left:76%;top:2%;width:18%;aspect-ratio:9/16;--r:4deg;z-index:3}
.bw-set .st-5{left:22%;top:50%;width:22%;aspect-ratio:3/4;--r:2deg;z-index:4}
.bw-set .st-6{left:46%;top:44%;width:18%;aspect-ratio:9/16;--r:-3deg;z-index:5}
.bw-set .st-7{left:66%;top:52%;width:22%;aspect-ratio:3/4;--r:3deg;z-index:4}
/* Video-Karten: Standbild als eigenes Bild (Safari zeigt Poster in gedrehten Karten sonst schwarz) */
.bw-v{cursor:default;isolation:isolate;-webkit-mask-image:-webkit-radial-gradient(white,black)}
.bw-v .vp{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1;transition:opacity .4s}
.bw-v.playing .vp{opacity:0}
/* Werdegang Republica: eigenes Layout mit Bento und vier Stationen */
.alt.rpw{display:block}
.rpw-top{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,5vw,96px);align-items:end}
/* 30.09.2026 (Feedback Janis «Bilder unten abgeschnitten»): kein festes Zeilenraster mehr – jede Kachel trägt das Seitenverhältnis ihres Originals (aspect-ratio inline aus build.py),
   nichts wird beschnitten. Drei Spalten mit je zwei Bildern; Spaltenbreite ∝ 1/Σ(h/w) der Spalte (1 : 1 : 1.1227), dadurch enden alle drei Spalten auf derselben Höhe. */
.rpb{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.1227fr);gap:12px;align-items:start;margin:clamp(40px,5vw,72px) 0}
.rpb-c{display:flex;flex-direction:column;gap:12px;min-width:0}
.rpb figure{position:relative;margin:0;overflow:hidden;border-radius:var(--r-card);background:#111}
.rpb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;transition:transform 1.2s var(--ease)}
.rpb figure:hover img{transform:scale(1.04)}

/* Phone: Zeilen statt Spalten (Spalten-Wrapper lösen sich auf). Querformate b1/b6 über die ganze Breite, Hochformate paarweise – Breiten ∝ Seitenverhältnis, damit beide gleich hoch sind.
   Einzige Ausnahme vom Original-Format: das Gimbal-Bild (b4) steht neben dem Hochformat als Quadrat, Ausschnitt links (Janis ganz im Bild, rechts fallen nur Fahnen weg). */
@media(max-width:800px){.rpw-top{grid-template-columns:1fr}
 .rpb{display:flex;flex-wrap:wrap}.rpb-c{display:contents}.rpb figure{flex:0 0 100%}
 .rpb .b1{order:1}.rpb .b2{order:2;flex-basis:calc((100% - 12px)*.4838)}.rpb .b3{order:3;flex-basis:calc((100% - 12px)*.516)}.rpb .b6{order:4}
 .rpb .b5{order:5;flex-basis:calc((100% - 12px)*.4285)}.rpb .b4{order:6;flex-basis:calc((100% - 12px)*.5713);aspect-ratio:1/1!important}.rpb .b4 img{object-position:10% 50%}}
.wd-ctl{position:absolute;right:10px;bottom:10px;z-index:2;display:flex;gap:4px} /* 29.09.2026 a11y: Chip-Gruppe «Abspielen/Pause · Ton» */
.wd-snd{font:inherit;font-size:11px;font-weight:300;letter-spacing:.06em;text-transform:uppercase;color:var(--w1);background:var(--w6);backdrop-filter:blur(12px);border:0;border-radius:var(--r-tag);padding:7px 9px;cursor:pointer}
.wd-snd:hover{color:var(--blau2)}
@media(max-width:800px){.bw-wd,.bw-set{aspect-ratio:auto}.bw-wd .bw-c,.bw-set .bw-c{flex:0 0 62vw}}
/* Werdegang: Zwischentitel über der Anfänge-Collage, Buchstaben bauen sich beim Scrollen auf */
.wd-head{font-size:clamp(30px,4.6vw,76px);font-weight:300;text-transform:uppercase;letter-spacing:-.03em;line-height:.95;margin:clamp(48px,6vw,96px) 0 clamp(24px,3vw,40px);color:var(--w1)}
[data-rchars] .ch{display:inline-block;will-change:transform,opacity,filter}
/* 29.09.2026 a11y: Fokus-Sichtbarkeit – Bildrahmen (clip-path/overflow schneiden aussen ab → Kontur innen), Echt/KI-Griff (Ring um den Knopf), Sprungziele ohne Rahmen */
.zoomable:focus-visible{outline:1px solid var(--blau2);outline-offset:-2px}
.tb-im .ki-h:focus-visible{outline:0}.tb-im .ki-h:focus-visible i{outline:1px solid var(--blau2);outline-offset:3px}
main:focus,section:focus{outline:0}
/* 30.09.2026: Werdegang – ruhige Sektion Andrea Chatelain beim Office (Porträt klein, Zwischentitel + 1 Absatz, keine Karte) */
.wd-am{display:grid;grid-template-columns:minmax(0,320px) minmax(0,1fr);gap:clamp(24px,4vw,72px);align-items:end;margin-top:clamp(64px,8vw,128px)}
.wd-am-im{margin:0;aspect-ratio:4/5;border-radius:var(--r-card);overflow:hidden;background:#111}
.wd-am-im img{display:block;width:100%;height:100%;object-fit:cover}
.wd-am .wd-head{margin:0 0 clamp(16px,2vw,28px)}
.wd-am-txt p{color:var(--w2);max-width:34em;margin:0}.wd-am-txt p+p{margin-top:1em}
@media(max-width:800px){.wd-am{grid-template-columns:1fr;align-items:start}.wd-am-im{width:64%;max-width:320px}}
