/* Thrillgrounds – Revierseite „Die Kante" · Design-System siehe DESIGN.md
   Die Akzentfarbe kommt je Revier aus den Daten (style="--akzent:…" am <html>); alles andere ist für alle Reviere gleich. */
:root{
  --nacht:#070c0d; --fels:#10181a; --schiefer:#1b2629; --kalk:#d9d3c5; --gischt:#eefcf8;
  --akzent:#17d8b4; --signal:#ff4a1a; --leise:#8a9a9b;
  --display:"Big Shoulders Display",Impact,sans-serif; --serif:"Instrument Serif",Georgia,serif;
  --text:"Hanken Grotesk",system-ui,sans-serif; --mono:"JetBrains Mono",ui-monospace,monospace;
  --beat:1.5s; --rand:clamp(1rem,4vw,4.5rem);
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;background:var(--nacht)}
body{margin:0;color:var(--gischt);font:400 1.0625rem/1.6 var(--text);background:var(--nacht);overflow-x:clip;-webkit-font-smoothing:antialiased}
img{display:block;max-width:100%}
a{color:inherit}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
/* Korn über allem – Fels, nicht Bildschirm */
body::after{content:"";position:fixed;inset:0;z-index:90;pointer-events:none;opacity:.13;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

/* ───────── HUD: Höhenmesser + Puls ───────── */
.hud{position:fixed;inset:0 0 auto 0;z-index:60;display:flex;align-items:center;gap:1.25rem;padding:.8rem var(--rand);
  font:700 .72rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  background:linear-gradient(to bottom,rgba(7,12,13,.85),rgba(7,12,13,0))}
.marke{font:900 1.35rem/1 var(--display);letter-spacing:.06em;text-decoration:none;white-space:nowrap}
.marke b{color:var(--akzent);font-weight:900}
.marke .signet{height:.74em;width:auto;margin-right:.42em;fill:var(--akzent);vertical-align:-.02em}
.hud .revier{color:var(--leise)}
.hud .spacer{flex:1}
.puls{display:flex;align-items:center;gap:.6rem;color:var(--signal)}
.puls svg{width:92px;height:26px;overflow:visible}
.puls path{fill:none;stroke:currentColor;stroke-width:2;stroke-linejoin:round;stroke-dasharray:240;animation:ekg var(--beat) linear infinite}
@keyframes ekg{from{stroke-dashoffset:240}to{stroke-dashoffset:-240}}
.puls .stufe{min-width:5.5ch}
.hud .cta{padding:.7rem 1rem;border:1px solid var(--akzent);color:var(--akzent);text-decoration:none;transition:.2s}
.hud .cta:hover{background:var(--akzent);color:var(--nacht)}

.messer{position:fixed;left:var(--rand);top:50%;translate:0 -50%;z-index:55;height:min(62vh,560px);width:5.5rem;opacity:0;transition:opacity .5s;pointer-events:none}
.im-fall .messer{opacity:1}
.messer .skala{position:absolute;left:0;top:0;bottom:0;width:1px;background:linear-gradient(var(--kalk),var(--akzent))}
.messer .tick{position:absolute;left:0;width:14px;height:1px;background:var(--kalk);font:400 .62rem/1 var(--mono);color:var(--leise);letter-spacing:.08em}
.messer .tick span{position:absolute;left:20px;top:-.35em;white-space:nowrap;transition:color .3s}
.messer .tick.aktiv span{color:var(--gischt)}
.messer .zeiger{position:absolute;left:-5px;top:0;width:11px;height:11px;border-radius:50%;background:var(--signal);box-shadow:0 0 0 6px rgba(255,74,26,.18),0 0 24px var(--signal);will-change:transform}
.stand{position:fixed;right:var(--rand);bottom:1.4rem;z-index:55;text-align:right;opacity:0;transition:opacity .5s;pointer-events:none}
.im-fall .stand{opacity:1}
.stand .zahl{font:900 clamp(2.6rem,6vw,4.6rem)/.85 var(--display);font-variant-numeric:tabular-nums;letter-spacing:.01em}
.stand .zahl small{font-size:.38em;color:var(--akzent);margin-left:.15em}
.stand .label{font:700 .66rem/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--leise)}

/* ───────── Die Kante (Hero) ───────── */
.kante{position:relative;min-height:100svh;display:grid;align-content:end;padding:7rem var(--rand) 0;isolation:isolate;overflow:clip}
.kante .bild{position:absolute;inset:-6% 0 0;z-index:-2}
.kante .bild img{width:100%;height:106%;object-fit:cover;object-position:50% 35%;filter:saturate(.9) contrast(1.06)}
.kante::before{content:"";position:absolute;inset:0;z-index:-1;background:
  linear-gradient(to top,var(--nacht) 0,rgba(7,12,13,.88) 24%,rgba(7,12,13,.5) 48%,rgba(7,12,13,.12) 68%,rgba(7,12,13,.55) 100%)}
.koord{font:700 .72rem/1.5 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--kalk)}
.koord i{font-style:normal;color:var(--akzent)}
.kante h1{margin:.2em 0 0;font:900 clamp(4.2rem,17.5vw,17rem)/.78 var(--display);letter-spacing:-.012em;text-transform:uppercase}
.kante h1::before{content:attr(data-a);display:block}
.kante h1::after{content:attr(data-b);display:block;color:transparent;-webkit-text-stroke:2px var(--gischt);margin-left:.9em}
.kante .zeile{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:clamp(1.5rem,5vw,5rem);align-items:end;margin-top:clamp(1.2rem,3vw,2.6rem);padding-bottom:clamp(1.5rem,4vw,3.5rem)}
.kante .satz{font:italic 400 clamp(1.7rem,3.6vw,3.3rem)/1.06 var(--serif);margin:0;text-wrap:balance}
.kante .satz em{color:var(--akzent);font-style:italic}
.kante .intro{margin:0;color:var(--kalk);max-width:46ch}
/* Rand der Kante: Bodenlinie, darunter nur Luft */
.rand{position:relative;margin:0 calc(var(--rand)*-1);padding:1.4rem var(--rand) 1.6rem;border-top:1px solid rgba(238,252,248,.28);display:flex;flex-wrap:wrap;gap:1.2rem 2.5rem;align-items:center;background:rgba(7,12,13,.55);backdrop-filter:blur(6px)}
.rand::before{content:attr(data-label);text-transform:uppercase;position:absolute;left:var(--rand);top:-.55em;padding:0 .7em;background:var(--nacht);font:700 .62rem/1 var(--mono);letter-spacing:.2em;color:var(--signal)}
.regler{flex:1 1 22rem;display:grid;gap:.55rem}
.regler label{font:700 .72rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;display:flex;justify-content:space-between;gap:1rem}
.regler output{color:var(--signal)}
input[type=range]{appearance:none;-webkit-appearance:none;width:100%;height:28px;background:none;cursor:pointer;margin:0}
input[type=range]::-webkit-slider-runnable-track{height:4px;background:linear-gradient(90deg,var(--akzent),#f0c419 55%,var(--signal))}
input[type=range]::-moz-range-track{height:4px;background:linear-gradient(90deg,var(--akzent),#f0c419 55%,var(--signal))}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;margin-top:-9px;border-radius:50%;background:var(--gischt);border:5px solid var(--signal);box-shadow:0 0 0 0 rgba(255,74,26,.5);animation:klopf var(--beat) ease-out infinite}
input[type=range]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--gischt);border:5px solid var(--signal)}
input[type=range]:focus-visible{outline:2px solid var(--akzent);outline-offset:4px}
@keyframes klopf{0%{box-shadow:0 0 0 0 rgba(255,74,26,.55)}70%,100%{box-shadow:0 0 0 14px rgba(255,74,26,0)}}
.regler .stufen{display:flex;justify-content:space-between;font:400 .62rem/1 var(--mono);color:var(--leise);letter-spacing:.08em;text-transform:uppercase}
.sprung{display:inline-flex;align-items:center;gap:.9rem;padding:1.05rem 1.5rem 1.05rem 1.7rem;background:var(--signal);color:var(--nacht);text-decoration:none;font:900 1.35rem/1 var(--display);letter-spacing:.08em;text-transform:uppercase;clip-path:polygon(0 0,100% 0,100% 68%,92% 100%,0 100%);transition:transform .25s,background .25s}
.sprung:hover{background:var(--gischt);transform:translateY(3px)}
.sprung svg{width:18px;height:18px;animation:runter 1.3s ease-in-out infinite}
@keyframes runter{50%{transform:translateY(5px)}}

/* ───────── Der Fall: Stationen ───────── */
.fall{position:relative}
.station{position:relative;min-height:190svh;isolation:isolate}
.station .grund{position:sticky;top:0;height:100svh;z-index:-1;overflow:clip;background:radial-gradient(90% 70% at 60% 40%,#21383a,var(--nacht))}
.station .grund img{width:100%;height:100%;object-fit:cover;filter:saturate(.85) brightness(.8) contrast(1.06)}
.station .grund::after{content:"";position:absolute;inset:0;background:
  linear-gradient(to bottom,var(--nacht) 0,rgba(7,12,13,.25) 18%,rgba(7,12,13,.25) 70%,var(--nacht) 100%),
  linear-gradient(100deg,rgba(7,12,13,.88) 0,rgba(7,12,13,.45) 48%,rgba(7,12,13,.1) 100%)}
.station.rechts .grund::after{background:
  linear-gradient(to bottom,var(--nacht) 0,rgba(7,12,13,.25) 18%,rgba(7,12,13,.25) 70%,var(--nacht) 100%),
  linear-gradient(260deg,rgba(7,12,13,.88) 0,rgba(7,12,13,.45) 48%,rgba(7,12,13,.1) 100%)}
.station .innen{margin-top:-100svh;min-height:100svh;padding:6.5rem var(--rand) 5.5rem calc(var(--rand) + 13rem);display:grid;grid-template-columns:minmax(0,1fr) minmax(0,34rem);gap:clamp(1.5rem,4vw,4rem);align-content:center;align-items:end}
.station.rechts .innen{grid-template-columns:minmax(0,34rem) minmax(0,1fr);padding-left:calc(var(--rand) + 13rem)}
.station.rechts .kopf{order:2;text-align:right}
.kopf{container-type:inline-size}
.meter{font:900 clamp(5rem,40cqi,21rem)/.74 var(--display);letter-spacing:-.02em;margin:0;color:transparent;-webkit-text-stroke:2px var(--akzent);font-variant-numeric:tabular-nums;white-space:nowrap}
.meter sup{display:block;font:700 clamp(.7rem,1vw,.9rem)/1 var(--mono);-webkit-text-stroke:0;color:var(--akzent);letter-spacing:.22em;margin:1.6em 0 0 .35em}
.station.rechts .meter sup{margin:1.6em .35em 0 0}
.station.aktiv .meter{color:var(--akzent);transition:color .9s}
.kopf .was{font:700 .72rem/1 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--kalk);margin:0 0 1rem}
.kopf h2{font:800 clamp(2.2rem,5vw,4.4rem)/.9 var(--display);text-transform:uppercase;letter-spacing:.01em;margin:.35em 0 0}
.karte{background:rgba(16,24,26,.78);backdrop-filter:blur(10px);border:1px solid rgba(238,252,248,.14);padding:clamp(1.2rem,2.2vw,1.9rem)}
.karte .gefuehl{font:italic 400 clamp(1.35rem,2vw,1.75rem)/1.16 var(--serif);margin:0 0 1rem;text-wrap:pretty}
.karte p{margin:0 0 1rem;color:var(--kalk)}
.pulszeile{display:flex;align-items:center;gap:.7rem;font:700 .68rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--signal);margin-bottom:1.1rem}
.pulszeile .herz{display:flex;gap:4px}
.pulszeile .herz i{width:9px;height:16px;background:rgba(255,74,26,.22);clip-path:polygon(0 100%,35% 0,100% 0,65% 100%)}
.pulszeile .herz i.an{background:var(--signal)}
.pulszeile small{color:var(--leise);font-weight:400;letter-spacing:.06em;text-transform:none}
.fakten{display:grid;grid-template-columns:repeat(auto-fit,minmax(7.2rem,1fr));gap:1px;background:rgba(238,252,248,.14);margin:0 0 1.2rem;padding:0;border:1px solid rgba(238,252,248,.14)}
.fakten div{background:var(--fels);padding:.7rem .8rem}
.fakten dt{font:400 .6rem/1.2 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--leise)}
.fakten dd{margin:.25rem 0 0;font:800 1.45rem/1 var(--display);letter-spacing:.02em}
.angebote{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}
.angebot a{display:grid;grid-template-columns:1fr auto;gap:.2rem 1rem;align-items:center;padding:.8rem .95rem;text-decoration:none;background:var(--schiefer);border-left:3px solid var(--akzent);transition:.2s}
.angebot a:hover{background:var(--gischt);color:var(--nacht);translate:6px 0}
.angebot .titel{font-weight:700;line-height:1.25;font-size:.95rem}
.angebot .preis{grid-row:span 2;font:800 1.9rem/1 var(--display);white-space:nowrap}
.angebot .preis small{display:block;font:400 .58rem/1.2 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--leise)}
.angebot a:hover .preis small,.angebot a:hover .meta{color:#425}
.angebot .meta{font:400 .68rem/1.2 var(--mono);color:var(--leise);letter-spacing:.04em}
.angebot .meta b{color:#f0c419;font-weight:700}
.hinweis{font-size:.85rem;color:var(--leise);margin:.9rem 0 0;border-left:1px solid var(--leise);padding-left:.8rem}
.hinweis b{color:var(--kalk)}
/* Hängezeit: Bild UND Inhalt bleiben stehen, während man 90 svh weiterscrollt – der Moment vor dem nächsten Fall */
@media (min-height:760px) and (min-width:1101px){.station .innen{position:sticky;top:0;height:100svh}}
/* über dem Puls-Limit */
.station.zu-hoch .grund img{filter:grayscale(1) brightness(.3)}
.station.zu-hoch .meter{-webkit-text-stroke-color:#3a4648;color:transparent!important}
.station.zu-hoch .karte{opacity:.45}
.station .limit{display:none;font:700 .7rem/1.4 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--signal);margin-top:1rem}
.station.zu-hoch .limit{display:block}

/* ───────── Landung ───────── */
.landung{position:relative;padding:18svh var(--rand) 8rem;background:
  radial-gradient(120% 60% at 50% 0,rgba(23,216,180,.22),transparent 60%),var(--nacht);border-top:1px solid var(--akzent)}
.landung::before{content:attr(data-label);text-transform:uppercase;position:absolute;left:var(--rand);top:-.55em;padding:0 .7em;background:var(--nacht);font:700 .62rem/1 var(--mono);letter-spacing:.2em;color:var(--akzent)}
.landung h2{font:900 clamp(3rem,10vw,9rem)/.82 var(--display);text-transform:uppercase;margin:0;max-width:12ch}
.landung h2 em{font:italic 400 .62em/1 var(--serif);text-transform:none;color:var(--akzent);display:block;margin-top:.15em}
.tag{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,26rem);gap:clamp(2rem,5vw,5rem);margin-top:4rem;align-items:start}
.tag ol{list-style:none;margin:0;padding:0;counter-reset:s}
.tag li{display:grid;grid-template-columns:4.5rem 1fr auto;gap:1rem;align-items:baseline;padding:1.1rem 0;border-bottom:1px solid rgba(238,252,248,.14)}
.tag li[hidden]{display:none}
.tag li .m{font:800 1.5rem/1 var(--display);color:var(--akzent)}
.tag li .n{font-weight:700}
.tag li .n small{display:block;font:400 .7rem/1.4 var(--mono);color:var(--leise);letter-spacing:.04em}
.tag li .p{font:800 1.5rem/1 var(--display)}
.summe{position:sticky;top:6rem;border:1px solid var(--akzent);padding:1.6rem}
.summe .k{font:700 .68rem/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--leise)}
.summe .betrag{font:900 clamp(3.5rem,7vw,5.5rem)/.9 var(--display);margin:.2em 0 .1em;overflow:hidden;min-width:0}
.summe p{color:var(--kalk);font-size:.9rem;margin:.6rem 0 0}

/* ───────── Auch im Revier / Fakten / FAQ ───────── */
.block{padding:6rem var(--rand);border-top:1px solid rgba(238,252,248,.12)}
.block>h2{font:800 clamp(2rem,4.5vw,3.6rem)/.95 var(--display);text-transform:uppercase;margin:0 0 2.2rem}
.block>h2 span{color:var(--akzent)}
.weitere{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,21rem),1fr));gap:1.2rem}
.weitere article{background:var(--fels);padding:1.5rem;border-top:3px solid var(--kalk)}
.weitere h3{font:800 1.9rem/1 var(--display);text-transform:uppercase;margin:0 0 .4rem}
.tabelle{width:100%;border-collapse:collapse;font-size:.95rem}
.tabelle th,.tabelle td{text-align:left;padding:.85rem .8rem;border-bottom:1px solid rgba(238,252,248,.12);vertical-align:top}
.tabelle th{font:700 .66rem/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--leise)}
.tabelle td:first-child{font-weight:700}
.tabelle .nein{color:var(--signal)}
.tabelle tr.klick td{padding:0}
.tabelle tr.klick td>a{display:block;padding:.85rem .8rem;color:inherit;text-decoration:none}
.tabelle tr.klick:hover td{background:var(--fels)}
.tabelle tr.klick:hover td:first-child a{color:var(--akzent)}
.tabelle tr.klick td>a.buchen{display:inline-block;margin:.5rem .8rem;padding:.45rem .8rem;border:1px solid var(--akzent);color:var(--akzent);font:700 .68rem/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;white-space:nowrap;transition:.2s}
.tabelle tr.klick:hover td>a.buchen,.tabelle tr.klick td>a.buchen:focus-visible{background:var(--akzent);color:var(--nacht)}
.tabelle td small{display:block;margin:-.1rem .8rem .6rem;color:var(--leise);font-size:.78rem}
.scroll-x{overflow-x:auto}
details{border-bottom:1px solid rgba(238,252,248,.14);padding:1.1rem 0;max-width:60rem}
summary{cursor:pointer;font:800 1.55rem/1.1 var(--display);letter-spacing:.02em;list-style:none;display:flex;justify-content:space-between;gap:1rem}
summary::after{content:"+";color:var(--akzent);font-family:var(--mono)}
details[open] summary::after{content:"–"}
details p{color:var(--kalk);margin:.8rem 0 0;max-width:65ch}
footer{padding:3rem var(--rand) 5rem;border-top:1px solid rgba(238,252,248,.12);font-size:.8rem;color:var(--leise);display:grid;gap:1.2rem;max-width:80rem}
footer a{color:var(--kalk)}
footer h2{font:700 .68rem/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--kalk);margin:0 0 .4rem}

/* ───────── Bewegung (nur wenn gewünscht und unterstützt) ───────── */
@media (prefers-reduced-motion:no-preference){
  .kante .koord,.kante h1::before,.kante h1::after,.kante .satz,.kante .intro,.rand{opacity:0;translate:0 28px;animation:auf .9s cubic-bezier(.2,.7,.2,1) forwards}
  .kante h1::before{animation-delay:.15s}.kante h1::after{animation-delay:.3s}
  .kante .satz{animation-delay:.5s}.kante .intro{animation-delay:.62s}.rand{animation-delay:.8s}
  @keyframes auf{to{opacity:1;translate:0 0}}
  @supports (animation-timeline:scroll()){
    /* Blick kippt über die Kante: Bild zoomt und sackt weg, Titel reißt auseinander */
    .kante .bild img{animation:kippen linear both;animation-timeline:scroll(root);animation-range:0 100svh}
    @keyframes kippen{to{scale:1.35;translate:0 12%;filter:saturate(.7) contrast(1.1) blur(3px)}}
    .kante h1{animation:reissen linear both;animation-timeline:scroll(root);animation-range:0 80svh}
    @keyframes reissen{to{letter-spacing:.16em;opacity:.0;translate:0 -18%}}
    .station .grund img{animation:sturz linear both;animation-timeline:view();animation-range:cover 0% cover 100%}
    @keyframes sturz{from{scale:1.28;translate:0 -7%}to{scale:1.02;translate:0 7%}}
    .station .kopf{animation:kommt linear both;animation-timeline:view();animation-range:entry 40% entry 100%}
    @keyframes kommt{from{opacity:0;translate:0 -90px;filter:blur(8px)}to{opacity:1;translate:0 0;filter:blur(0)}}
    .station .karte{animation:kommt2 linear both;animation-timeline:view();animation-range:entry 60% entry 115%}
    @keyframes kommt2{from{opacity:0;translate:0 70px}to{opacity:1;translate:0 0}}
  }
}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.puls path,.sprung svg,input[type=range]::-webkit-slider-thumb{animation:none}}

@media (max-width:1100px){
  .messer{display:none}
  .hud .revier,.hud .cta{display:none}
  .kante .zeile{grid-template-columns:1fr}
  .station{min-height:0}.station .innen,.station.rechts .innen{grid-template-columns:1fr;padding:45svh var(--rand) 12svh;align-content:end}
  .station.rechts .kopf{order:-1;text-align:left}.station.rechts .meter sup{margin:1.6em 0 0 .35em}
  .tag{grid-template-columns:1fr}
  .tag li{grid-template-columns:3.4rem 1fr auto}
  .stand{bottom:.8rem}
}

/* H1: der Text ist der volle Reviername (Suchmaschinen, Screenreader); die zweizeilige Schmuckform kommt aus data-a/data-b */
.kante h1 .nur-text{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* Kopfleiste am Handy: EKG schmaler, Abstände enger – Signet, Puls und Sprachumschalter müssen in 360 px passen */
@media (max-width:520px){.hud{gap:.7rem}.marke{font-size:1.15rem}.puls{gap:.4rem}.puls svg{width:46px}.puls .stufe{min-width:0}}

/* Preis und Währungszeichen nie trennen */
.angebot .preis,.tag .p,.summe .betrag,.tabelle td{white-space:nowrap}

/* Rückverweis in der Station */
.kopf .vergleich{display:inline-block;margin-top:1rem;font:700 .66rem/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--akzent);text-decoration:none;border-bottom:1px solid var(--akzent);padding-bottom:.25rem}
.kopf .vergleich:hover{color:var(--gischt);border-color:var(--gischt)}
