/* ==========================================================================
   TrainTechSolutions · Strecke Webdesign (Wunsch 02.11.)
   Drittes Gleis: Rechtsweiche → es wird schwarz → der Firmenname fällt vom Himmel, „Train“ und „Tech“ klappen nach
   hinten weg, „Web“ und „Design“ schieben sich vor „Solutions“ → Marke oben links → Daumenkino aus Webdesigns →
   die letzte Seite wird zur Schauseite im Vollbild. Darunter die Strecke Webdesign mit den Leistungen.
   Ablauf in js/webdesign.js, die Entwürfe im Daumenkino in css/webdesign-seiten.css
   ========================================================================== */
:root { --web: #b896ff; --web-rgb: 184, 150, 255; --web-verlauf: linear-gradient(100deg, #8cc0e6 0%, #b896ff 45%, #e0a070 95%); }

/* ---------- Abzweig rechts: Knöpfe ---------- */
.stellwerk { width: min(980px, calc(100% - 2 * var(--pad))); }
.stellwerk .stellwerk__wahl, .weiche-offen .stellwerk__wahl { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.weiche-offen .stellwerk__wahl { max-width: 1120px; }
.weiche--web .weiche__signal { color: var(--web); }
.weiche--web:hover, .weiche--web:focus-visible { border-color: rgba(var(--web-rgb), .85); background: rgba(var(--web-rgb), .1); box-shadow: 0 0 30px rgba(var(--web-rgb), .34); }
.btn--web:hover, .btn--web:focus-visible { border-color: rgba(var(--web-rgb), .9); box-shadow: 0 0 0 1px rgba(var(--web-rgb), .35), 0 0 30px rgba(var(--web-rgb), .4); }
.brand__web { background: linear-gradient(90deg, #8cc0e6, #b896ff); -webkit-background-clip: text; background-clip: text; color: transparent !important; }

/* ---------- Es wird dunkel ----------
   --nacht (0..1) setzt js/start.js: alles wird gleichmäßig dunkler, bis nichts mehr zu sehen ist (Wunsch 02.11.: keine
   Blende, die sich zusammenzieht). Die Szene dreht dazu ihre Belichtung herunter, darüber legt sich Schwarz über alles
   im Bild – Titel, Tacho, Regler und „Weiche gestellt“ eingeschlossen – und ebenso über die Kopfzeile */
.fx-nacht { position: absolute; inset: 0; z-index: 9; pointer-events: none; background: #000; opacity: var(--nacht, 0); }
body[data-weg="webdesign"]:not(.is-schau) .topbar > *, body.is-schau-dunkel .topbar > * { opacity: calc(1 - var(--nacht, 0)); }
body[data-weg="webdesign"][data-phase="da"] :is(.ankunft, .fahrt-frei) { display: none; }

/* während der Schau tritt die Kopfzeile zurück; die Marke kommt am Ende als WebDesignSolutions zurück */
body.is-schau .topbar :is(.topnav, .topbar__cta), body.is-schau .brand { transition: opacity .6s var(--ease); }
body.is-schau.is-schau-dunkel .topbar :is(.topnav, .topbar__cta) { opacity: 0; pointer-events: none; }
body.is-schau.is-schau-dunkel .brand__zeichen { opacity: 0; }
.brand__zeichen { transition: opacity .6s var(--ease), transform .5s var(--ease); }

/* ---------- Bühne der Schau ---------- */
.webschau { position: absolute; inset: 0; z-index: 11; overflow: hidden; background: #000; }
.webschau[hidden] { display: none; }
.webschau__funken { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 6; pointer-events: none; }
.webschau__skip { position: absolute; z-index: 8; right: var(--pad); bottom: calc(var(--rechtlich) + 12px); opacity: 0; transition: opacity .6s; }
.webschau.is-laeuft .webschau__skip { opacity: 1; }
.webschau.is-fertig .webschau__skip { display: none; }

/* Der Name: Wörter einzeln gesetzt (js/webdesign.js rechnet die Lage), Buchstaben einzeln zum Umklappen */
.wname { position: absolute; z-index: 5; left: 50%; top: 46%; width: 0; height: 0; margin: 0; font-weight: 600; letter-spacing: -.045em; line-height: 1; color: var(--ink); visibility: hidden; pointer-events: none; }
.wname__wort { position: absolute; left: 0; top: 0; display: block; white-space: nowrap; perspective: 5em; transform: translate(0, -50%); }
.wname__wort i { display: inline-block; font-style: normal; transform-origin: 50% 84%; backface-visibility: hidden; }
.wname__wort[data-wort="train"], .wname__wort[data-wort="tech"] { color: var(--kupfer); }
.wname__wort[data-wort="web"] { opacity: 0; z-index: 1; }
.wname__wort[data-wort="train"] { z-index: 3; } .wname__wort[data-wort="sol"] { z-index: 2; }
.wname__boden { position: absolute; left: 0; top: .42em; height: 2px; width: 10px; border-radius: 2px; background: linear-gradient(90deg, transparent, rgba(255, 244, 228, .95), transparent); opacity: 0; transform-origin: 50% 50%; filter: drop-shadow(0 0 10px rgba(255, 214, 160, .9)); }

/* Daumenkino: ein Stapel Seiten, die oberste schnellt nach links weg */
.daumen { position: absolute; inset: 0; z-index: 4; pointer-events: none; visibility: hidden; }
.daumen__stapel { position: absolute; --chrome: 28px; }
.daumen__stapel::before, .daumen__stapel::after { content: ''; position: absolute; inset: 0; border-radius: 12px; background: #15181d; border: 1px solid rgba(255, 255, 255, .06); }
.daumen__stapel::before { transform: translate(7px, 9px); opacity: .7; }
.daumen__stapel::after { transform: translate(14px, 18px); opacity: .4; z-index: -1; }
.daumen__blatt { position: absolute; inset: 0; z-index: 1; border-radius: 12px; overflow: hidden; background: #0e1014; transform-origin: 0 50%; backface-visibility: hidden; box-shadow: 0 40px 100px rgba(0, 0, 0, .7), 0 0 0 1px rgba(255, 255, 255, .08); }
.daumen__chrome { position: absolute; left: 0; right: 0; top: 0; height: var(--chrome); display: flex; align-items: center; gap: 6px; padding: 0 12px; background: #23262c; border-bottom: 1px solid rgba(0, 0, 0, .4); }
.daumen__chrome i { width: 9px; height: 9px; border-radius: 50%; background: #4a4e56; flex: none; }
.daumen__chrome i:nth-child(1) { background: #c85a50; } .daumen__chrome i:nth-child(2) { background: #c9a14a; } .daumen__chrome i:nth-child(3) { background: #5aa564; }
.daumen__chrome span { flex: 0 1 46%; margin: 0 auto; padding: 3px 12px; border-radius: 999px; background: rgba(255, 255, 255, .07); font-family: var(--mono); font-size: 11px; letter-spacing: .02em; color: #c8c5bd; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transform: translateX(-24px); }
.daumen__flaeche { position: absolute; left: 0; right: 0; top: var(--chrome); bottom: 0; overflow: hidden; container-type: size; }
.daumen__licht { position: absolute; inset: 0; z-index: 9; pointer-events: none; opacity: 0; background: linear-gradient(90deg, rgba(0, 0, 0, .05), rgba(0, 0, 0, .55) 70%, rgba(255, 255, 255, .12)); }
/* die letzte Seite trägt unsere Schauseite (js/webdesign.js legt #schau verkleinert hinein) */
.daumen__blatt--schau { background: #07060c; }
.daumen__zeile { position: absolute; left: 50%; bottom: calc(var(--rechtlich) + 16px); transform: translateX(-50%); display: flex; align-items: baseline; gap: 14px; margin: 0; white-space: nowrap; font-family: var(--mono); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3); }
.daumen__zeile b { font-weight: 500; color: var(--web); font-variant-numeric: tabular-nums; }
.daumen__zeile span:last-child { color: var(--ink-2); min-width: 14ch; }

/* ---------- Schauseite: die letzte Seite des Daumenkinos, am Ende im Vollbild ---------- */
.schau { position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 3; overflow: hidden; transform-origin: 0 0; visibility: hidden; pointer-events: none;
  background: radial-gradient(120% 90% at 70% 30%, #120d24 0%, #07060c 55%, #040306 100%); color: var(--ink); --mx: 70%; --my: 40%; --px: 0; --py: 0; }
.webschau.is-blaettern .schau, .webschau.is-fertig .schau { visibility: visible; }
.webschau.is-fertig .schau { pointer-events: auto; }
.schau__licht { position: absolute; inset: 0; width: 100%; height: 100%; opacity: .95; }
.schau::after { content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 1; background: radial-gradient(640px circle at var(--mx) var(--my), rgba(var(--web-rgb), .14), transparent 62%); }
/* Inhalt in voller Breite: oben die Zeile, in der Mitte die Strecke mit dem Namen, darunter Text und Knöpfe */
.schau__inhalt { position: relative; z-index: 2; height: 100%; padding: clamp(100px, 15vh, 160px) var(--pad) clamp(86px, 12vh, 124px); display: flex; flex-direction: column; justify-content: center; }
.schau__kicker { display: flex; align-items: center; gap: 12px; margin: 0; font-family: var(--mono); font-size: 12.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--ink-2); }
.schau__punkt { width: 7px; height: 7px; border-radius: 50%; background: var(--web); box-shadow: 0 0 14px var(--web), 0 0 30px rgba(var(--web-rgb), .6); animation: puls 2.4s infinite; flex: none; }
.schau__text { margin: 0; max-width: 600px; font-size: clamp(16px, 1.25vw, 19px); line-height: 1.55; color: var(--ink-2); }
.schau__text b { color: var(--ink); font-weight: 500; }
.schau .cta-row { margin-top: 26px; }
.schau__wege { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px 26px; margin-top: 22px; }
.schau__probieren { padding: 6px 0 3px; font-family: var(--mono); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: #cdb8ff; border-bottom: 1px solid rgba(var(--web-rgb), .45); transition: color .3s, border-color .3s, text-shadow .3s; }
.schau__probieren:hover, .schau__probieren:focus-visible { color: #fff; border-color: var(--web); text-shadow: 0 0 14px rgba(var(--web-rgb), .8); }
/* nach der Durchfahrt leuchtet der Knopf zweimal auf, damit man ihn bemerkt */
.schau__probieren.is-hinweis { animation: probeHinweis 1.6s 1.2s 2 ease-in-out; }
@keyframes probeHinweis { 50% { color: #fff; text-shadow: 0 0 18px rgba(var(--web-rgb), 1), 0 0 4px #fff; } }
.schau__probe { position: fixed; inset: auto 0 clamp(64px, 12vh, 120px); margin: 0 auto; width: min(560px, calc(100vw - 32px)); padding: 18px 18px 14px; border-radius: 20px; border: 1px solid rgba(var(--web-rgb), .34); background: linear-gradient(180deg, rgba(24, 19, 44, .97), rgba(10, 9, 20, .98)); color: var(--ink); box-shadow: 0 30px 90px rgba(0, 0, 0, .6), 0 0 0 1px rgba(255, 255, 255, .04) inset; }
.schau__probe::backdrop { background: rgba(4, 3, 10, .3); }
.schau__probe label { display: block; margin: 0 2px 10px; font-family: var(--mono); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--ink-2); }
.sp__zeile { display: flex; gap: 10px; }
.sp__zeile input { flex: 1; min-width: 0; padding: 12px 14px; border-radius: 12px; border: 1px solid rgba(255, 255, 255, .14); background: rgba(255, 255, 255, .05); color: var(--ink); font-family: inherit; font-size: 16px; font-weight: 500; }
.sp__zeile input:focus { outline: none; border-color: var(--web); box-shadow: 0 0 0 3px rgba(var(--web-rgb), .25); }
.sp__hinweis { margin: 10px 2px 0; font-size: 12.5px; color: var(--ink-3); }
.sp__zurueck { margin-left: 6px; color: #cdb8ff; border-bottom: 1px solid rgba(var(--web-rgb), .45); }
.schau__probe.is-wackeln { animation: probeWackeln .4s; }
@keyframes probeWackeln { 25% { translate: -6px 0; } 50% { translate: 5px 0; } 75% { translate: -3px 0; } }
.sw__name { letter-spacing: -.045em; }
.schau__zurueck { padding: 6px 0 3px; font-family: var(--mono); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3); border-bottom: 1px solid var(--line); transition: color .3s, border-color .3s; }
.schau__zurueck:hover { color: var(--ink); border-color: rgba(var(--web-rgb), .6); }

/* Oberleitungsmasten hinter dem Gleis (vom Zug aus rechts, also hinten): Mast, Ausleger zum Tragseil, Seitenhalter zum
   Fahrdraht. Kachel 7 em breit, 1 em = 100 Einheiten; liegen hinter Name und Zug */
.schau__masten { position: absolute; z-index: 0; left: 0; right: 0; top: -.1em; height: 2.1em; pointer-events: none;
  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 700 210' preserveAspectRatio='none'><g fill='none' stroke='%23a2acbd' stroke-linecap='round'><path d='M40 2 V192' stroke-width='6' stroke-opacity='.34'/><path d='M40 12 L84 19 M40 28 L76 33 M40 12 L58 28' stroke-width='2.4' stroke-opacity='.5'/><path d='M30 192 H50' stroke-width='5' stroke-opacity='.3'/></g><circle cx='84' cy='19' r='2.6' fill='%23a2acbd' fill-opacity='.6'/><circle cx='76' cy='33' r='2.2' fill='%23a2acbd' fill-opacity='.6'/></svg>") calc(var(--pad) * .4) 0 / 7em 100% repeat-x; }
/* unten zwei Spalten: links Text, Knöpfe und Merkmale, rechts die Abfahrtstafel */
.schau__unten { display: grid; grid-template-columns: minmax(0, 620px) minmax(0, 560px); justify-content: space-between; align-items: start; gap: 28px 48px; margin-top: 4px; }
.schau__links { display: flex; flex-direction: column; }
.schau__merkmale { list-style: none; margin: 24px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.schau__merkmale li { display: inline-flex; align-items: center; gap: 8px; padding: 7px 12px 7px 10px; border-radius: 999px; border: 1px solid rgba(255, 255, 255, .1); background: rgba(255, 255, 255, .03); font-family: var(--mono); font-size: 11.5px; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-2); }
.schau__merkmale i { width: 6px; height: 6px; border-radius: 50%; background: var(--green); box-shadow: 0 0 8px var(--green); }
/* Abfahrtstafel im Stil der Tafel im Hauptbahnhof */
.schau__tafel { padding: 14px 14px 10px; border-radius: 20px; background: linear-gradient(180deg, rgba(16, 33, 72, .92), rgba(7, 15, 33, .95)); border: 1px solid rgba(160, 190, 240, .18); box-shadow: 0 30px 80px rgba(0, 0, 0, .45), inset 0 1px 0 rgba(255, 255, 255, .06); }
.st__kopf { display: flex; align-items: center; gap: 10px; margin: 2px 6px 8px; font-family: var(--mono); font-size: 11.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--ink-2); }
.st__lampe { width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 10px var(--green); }
.st__kopf time { margin-left: auto; font-size: 13px; letter-spacing: .06em; color: #ffd75e; }
.st__zeilen { list-style: none; margin: 0; padding: 0; display: grid; gap: 1px; }
.st__zeilen a { display: grid; grid-template-columns: 48px minmax(0, 132px) minmax(0, 1fr) auto; align-items: baseline; gap: 12px; padding: 8px 8px; border-radius: 10px; transition: background .25s; }
.st__zeilen a:hover, .st__zeilen a:focus-visible { background: rgba(255, 255, 255, .07); }
.st__zeilen time { font-family: var(--mono); font-size: 13px; color: #ffd75e; font-variant-numeric: tabular-nums; }
.st__zeilen b { font-family: var(--mono); font-size: 13.5px; font-weight: 500; letter-spacing: .02em; color: var(--ink); white-space: nowrap; overflow: hidden; }
.st__zeilen span { font-size: 13px; color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.st__zeilen i { font-style: normal; font-family: var(--mono); font-size: 11.5px; letter-spacing: .06em; padding: 2px 7px; border-radius: 5px; background: rgba(243, 240, 232, .92); color: #0b1b3c; }
/* Die Strecke (Wunsch 03.11.): Fahrleitung, der Name, das Gleis, davor der Zug. Alles in em der Namensgröße; der Zug
   rechnet in Zug-Einheiten (--zu, wie ZUG.einheit in js/webdesign.js), sein Dach liegt auf --dach */
.schau__bahn { position: relative; margin: 0 calc(-1 * var(--pad)); padding: .72em var(--pad) .3em; font-size: min(9.4vw, 17vh, 11rem); --zu: .0235em; --dach: .7em; }
.schau__wort { position: relative; z-index: 2; width: max-content; max-width: 100%; margin: 0; font-size: 1em; line-height: 1; font-weight: 600; letter-spacing: -.045em; white-space: nowrap; color: var(--ink);
  clip-path: inset(-20% 0 -20% 100%); }
.schau.is-wort .schau__wort { clip-path: none; }
.schau__wort i { font-style: normal; display: inline-block; }
/* echte 3D-Buchstaben (js/wort3d.js) liegen auf einer Leinwand genau über dem Namen; der HTML-Name bleibt darunter
   unsichtbar für Lage und Vorlesen. Ohne WebGL dreht sich der HTML-Name selbst */
.schau__wort3d { position: absolute; z-index: 2; inset: 0; width: 100%; height: 100%; pointer-events: none; visibility: hidden; }
.schau.is-3d .schau__wort i { color: transparent !important; }
.sw__train { color: var(--kupfer); } .sw__web { color: var(--web); }
/* Fahrleitung: Tragseil, Hänger und Fahrdraht über die ganze Breite; daran liegt der Stromabnehmer an */
.schau__fahrleitung { position: absolute; z-index: 1; left: 0; right: 0; top: calc(var(--dach) - 20 * var(--zu) - .14em); height: .14em;
  border-top: 1px solid rgba(190, 200, 214, .32); border-bottom: 1px solid rgba(214, 222, 232, .5);
  background: repeating-linear-gradient(90deg, rgba(190, 200, 214, .28) 0 1px, transparent 1px .9em); }
/* Gleis von der Seite: Schiene mit Glanzkante, darunter die Schwellenköpfe und ein Hauch Schotter */
.schau__gleis { position: absolute; z-index: 1; left: 0; right: 0; top: calc(var(--dach) + 43.2 * var(--zu)); height: .16em;
  background: linear-gradient(rgba(214, 222, 232, .75), rgba(214, 222, 232, .75)) 0 0 / 100% 2px no-repeat,
    linear-gradient(rgba(90, 96, 106, .9), rgba(90, 96, 106, .9)) 0 2px / 100% .04em no-repeat,
    repeating-linear-gradient(90deg, rgba(120, 104, 90, .7) 0 .1em, transparent .1em .38em) 0 .055em / 100% .05em no-repeat; }
.schau__gleis::after { content: ''; position: absolute; left: 0; right: 0; top: .1em; height: .5em; background: linear-gradient(rgba(60, 54, 70, .35), transparent); }
.schau__zug { position: absolute; z-index: 3; left: 0; top: calc(var(--dach) - 26 * var(--zu)); width: calc(1866 * var(--zu)); height: calc(70 * var(--zu)); transform: translateX(120vw); pointer-events: none; display: none; }
/* nur während der Durchfahrt im Bild; danach ganz weg (eine zurückbleibende Ebene zeichnete in Chrome mitunter einen Kasten) */
.schau.is-zug .schau__zug { display: block; }
/* Auf der Schauseite liegt die Körnung normal darüber statt im Mischmodus: über den bewegten und 3D-Ebenen (Zug, Buchstaben)
   ergab der Mischmodus in Chrome einen hellen Kasten mit grobem Korn (Rückmeldung 03.11.) */
body.is-schau .fx-grain { mix-blend-mode: normal; opacity: .035; }
.schau__zug svg { display: block; }
.zug__funke { animation: funke .16s steps(2) infinite; }
@keyframes funke { 0% { opacity: .2; } 50% { opacity: 1; } }

/* Laufband unten */
.schau__band { position: absolute; z-index: 2; left: 0; right: 0; bottom: 0; height: clamp(46px, 6.5vh, 58px); display: flex; align-items: center; overflow: hidden; border-top: 1px solid rgba(255, 255, 255, .08); background: rgba(4, 3, 8, .4); }
.schau__band p { display: flex; width: max-content; margin: 0; font-family: var(--mono); font-size: 12.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--ink-3); white-space: nowrap; animation: schauBand 46s linear infinite; }
.schau__band span { padding-right: .6em; }
@keyframes schauBand { to { transform: translateX(-50%); } }

/* ---------- Strecke Webdesign ---------- */
.strecke--web { position: relative; }
.strecke--web::before { content: ''; position: absolute; inset: 0 0 auto; height: 520px; z-index: -1; pointer-events: none; background: radial-gradient(60% 100% at 80% 0%, rgba(var(--web-rgb), .12), transparent 70%); }
.strecke--web .kicker { color: var(--web); }
.strecke--web .strecke__kopf h2 em, .web__beweis h3 em { background: var(--web-verlauf); -webkit-background-clip: text; background-clip: text; color: transparent; }
.web__lead { margin: 26px 0 0; max-width: 720px; font-size: clamp(17px, 1.35vw, 20px); line-height: 1.55; color: var(--ink-2); }
.web__leistungen { list-style: none; margin: 44px 0 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.web__karte { position: relative; display: flex; flex-direction: column; gap: 10px; padding: 26px 24px 24px; border-radius: 22px; overflow: hidden; background: linear-gradient(170deg, rgba(255, 255, 255, .055), rgba(255, 255, 255, .015)); border: 1px solid var(--line); transition: border-color .4s, transform .6s var(--ease), box-shadow .5s, opacity 1s var(--ease); }
.web__karte::after { content: ''; position: absolute; inset: -1px; border-radius: inherit; pointer-events: none; opacity: 0; background: radial-gradient(420px circle at 30% 0%, rgba(var(--web-rgb), .16), transparent 60%); transition: opacity .5s; }
.web__karte:hover { border-color: rgba(var(--web-rgb), .45); box-shadow: 0 30px 70px rgba(0, 0, 0, .4), 0 0 40px rgba(var(--web-rgb), .12); }
.web__karte:hover::after { opacity: 1; }
.web__karte b { font-size: 21px; font-weight: 500; letter-spacing: -.02em; hyphens: manual; }
.web__karte > span:not(.web__nr) { font-size: 15px; line-height: 1.55; color: var(--ink-2); }
.web__nr { font-family: var(--mono); font-size: 12px; letter-spacing: .14em; color: var(--web); }
.web__karte--gross { grid-row: span 2; justify-content: flex-end; min-height: 300px; background: radial-gradient(120% 90% at 100% 0%, rgba(var(--web-rgb), .2), transparent 60%), linear-gradient(170deg, rgba(255, 255, 255, .06), rgba(255, 255, 255, .015)); }
.web__karte--gross b { font-size: clamp(30px, 3vw, 44px); letter-spacing: -.04em; }
/* die App-Anbindung über die ganze Breite: Text links, Link rechts */
.web__karte--app { grid-column: 1 / -1; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: baseline; gap: 6px 24px; padding-block: 22px; }
.web__karte--app .web__nr { grid-column: 1; }
.web__karte--app b { grid-column: 1; grid-row: 2; }
.web__karte--app > span:not(.web__nr) { grid-column: 2; grid-row: 1 / span 2; align-self: center; max-width: 560px; }
.web__karte--app a { grid-column: 3; grid-row: 1 / span 2; align-self: center; font-size: 14.5px; color: var(--ink); border-bottom: 1px solid rgba(var(--web-rgb), .5); white-space: nowrap; }
.web__beweis { margin-top: clamp(64px, 9vh, 110px); padding: clamp(28px, 4vw, 54px); border-radius: 28px; position: relative; overflow: hidden; background: linear-gradient(140deg, rgba(var(--web-rgb), .1), rgba(224, 160, 112, .06) 60%, rgba(140, 192, 230, .06)); border: 1px solid rgba(var(--web-rgb), .22); }
.web__beweis h3 { font-size: clamp(2rem, 3.6vw, 3.4rem); line-height: 1; letter-spacing: -.045em; font-weight: 500; max-width: 18ch; }
.web__beweis > p:not(.kicker) { margin-top: 18px; max-width: 640px; font-size: 16.5px; line-height: 1.6; color: var(--ink-2); }
.web__fakten { list-style: none; margin: 30px 0 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1px solid var(--line); }
.web__fakten li { padding: 16px 16px 0 0; }
.web__fakten b { display: block; font-size: 19px; font-weight: 500; letter-spacing: -.02em; }
.web__fakten span { display: block; margin-top: 4px; font-size: 13.5px; line-height: 1.4; color: var(--ink-3); }
/* Ablauf als Strecke mit vier Halten */
.web__ablauf { list-style: none; margin: clamp(56px, 8vh, 96px) 0 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; position: relative; }
.web__ablauf::before { content: ''; position: absolute; left: 0; right: 0; top: 17px; height: 2px; background: linear-gradient(90deg, #8cc0e6, #b896ff, #e0a070); opacity: .5; }
.web__ablauf li { position: relative; padding-top: 46px; }
.web__ablauf li > span { position: absolute; top: 0; left: 0; display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: #0b0a12; border: 2px solid var(--web); font-family: var(--mono); font-size: 12px; color: var(--ink); box-shadow: 0 0 18px rgba(var(--web-rgb), .4); }
.web__ablauf b { display: block; font-size: 18px; font-weight: 500; }
.web__ablauf small { display: block; margin-top: 6px; font-size: 14.5px; line-height: 1.5; color: var(--ink-3); }
.web__cta { margin-top: clamp(56px, 8vh, 90px); display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 18px 30px; padding-top: 28px; border-top: 1px solid var(--line); }
.web__cta p { max-width: 520px; font-size: 16px; line-height: 1.55; color: var(--ink-2); }
.web__cta .cta-row { margin: 0; }

/* ---------- Kleinere Bildschirme ---------- */
@media (max-width: 1100px) {
}
@media (max-width: 1000px) {
  .schau__unten { grid-template-columns: minmax(0, 1fr); }
  .schau__tafel { max-width: 560px; }
  .web__leistungen { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .web__karte--gross { grid-column: 1 / -1; grid-row: auto; min-height: 220px; }
  .web__fakten, .web__ablauf { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .web__ablauf { row-gap: 30px; }
  .web__ablauf::before { display: none; }
}
@media (max-width: 860px) {
}
@media (max-width: 760px) {
  .stellwerk .stellwerk__wahl, .weiche-offen .stellwerk__wahl { grid-template-columns: 1fr; }
  .stellwerk .weiche small:not(.weiche__signal) { display: none; }
  .intro__wahl .btn--web { grid-column: 1 / -1; }
  .st__zeilen a { grid-template-columns: 44px minmax(0, 1fr) auto; padding: 6px 6px; }
  .st__zeilen span, .schau__merkmale { display: none; }
  .schau__unten { gap: 20px; }
  .schau__wege { gap: 8px 18px; margin-top: 18px; }
  .schau__wege button { font-size: 11px; letter-spacing: .08em; }
  .sp__lang { display: none; }
  .schau__tafel { padding: 10px 10px 6px; border-radius: 16px; }
  .st__kopf { margin-bottom: 4px; }
  .schau__inhalt { padding-top: 104px; padding-bottom: calc(clamp(46px, 6.5vh, 58px) + var(--rechtlich) + 18px); }
  .schau__band { bottom: calc(var(--rechtlich) + 2px); border-bottom: 1px solid rgba(255, 255, 255, .08); }
  .daumen__chrome span { flex-basis: 70%; font-size: 10px; transform: none; }
  .daumen__zeile { font-size: 11px; gap: 10px; }
  .daumen__zeile span:first-child { display: none; }
  .web__leistungen, .web__fakten, .web__ablauf { grid-template-columns: 1fr; }
  .web__karte--app { display: flex; }
  .web__karte--app a { align-self: flex-start; margin-top: 4px; }
}
/* niedrige Bildschirme: die Schauseite ist genau einen Bildschirm hoch – am Laptop ohne Merkmale, am Handy weniger
   Abfahrten, ganz niedrig keine Tafel */
@media (max-height: 760px) { .schau__merkmale { display: none; } }
@media (max-width: 760px) and (max-height: 860px) { .st__zeilen li:nth-child(n+4) { display: none; } }
@media (max-width: 760px) and (max-height: 700px) { .schau__tafel { display: none; } }
@media (prefers-reduced-motion: reduce) {
  .schau__band p, .schau__punkt, .zug__funke { animation: none !important; }
}
/* Seitenwechsel zur Unterseite webdesign.html (dokumentübergreifende View Transitions): die Marke gleitet mit, der
   angeklickte Link wird zu ihrer Überschrift (:navigation-source, Chrome 156) – die Regel steht allein, damit ältere
   Browser nur sie verwerfen */
@media (prefers-reduced-motion: no-preference) { @view-transition { navigation: auto; } }
.topbar .brand { view-transition-name: marke; }
a[href="webdesign.html"]:navigation-source { view-transition-name: titel; }
