/* ============================================================
   start-layering.css — Startseite W33 START (r11, 27.09.2026)
   Nur für web/index.html. Hero-Tiefe (S1) und Laufband (S2) stehen inline
   im Block #w33-start-kritisch; hier alles unterhalb des ersten Bildschirms.

   Regeln (Brief START S8): jede Bewegung nur unter
   prefers-reduced-motion: no-preference; Grundzustand immer sichtbar
   (HAUS_INSPO K6-1); Dauer-Bewegung nur, solange das Element im Bild
   ist (.is-sicht aus start-layering.js); Scroll-Kopplung nur unter
   @supports (animation-timeline: view()); keine Rotation im Endzustand.
   Farben nur aus Tokens. Muster sind eigene Nachbauten ohne Abhängigkeit:
   Magic UI (MIT), Aceternity UI, Haikei, Skiper UI, shadcn/ui, motion.dev.

   W33 START-2 („All-Out“, 27.09.2026): jede Sektion bekommt Grund (Verlauf +
   Haikei-Form + Korn), Tiefe und Bewegung. Budget (Brief A-Grenzen): Dauer-
   Animationen im Ruhezustand ≤ 12; alles außerhalb des Hero läuft nur mit
   .is-sicht (IntersectionObserver), auch die scroll-gekoppelten; Reduced
   Motion = 0 laufende Animationen, Endzustände sichtbar.
   ============================================================ */

/* ---- 0 · Reveal (Blur Fade) -------------------------------------------
   Quelle: Magic UI blur-fade.tsx:38–62 → übernommen: 400 ms, blur 6 px,
   Hub ≤ 8 px, „easeOut“ (hier --ease-drift). Abweichung: Grundzustand
   sichtbar; die Animation startet erst mit .is-in (motion.dev inView-
   Semantik als IntersectionObserver in start-layering.js). */
@media (prefers-reduced-motion: no-preference) {
  .w13-rv.is-in { animation: sl-blur var(--dur-fade, 400ms) var(--ease-drift) both; animation-delay: calc(min(var(--i, 0), 5) * 50ms); } /* START-2 A9: Staffel ≤ 5 × 50 ms */
}
@keyframes sl-blur {
  from { opacity: 0; transform: translateY(8px); filter: blur(6px); }
}

/* ---- S3 · Was DripBack übernimmt: Bento + Border Beam -----------------
   Quelle: Magic UI bento-grid.tsx:22–31 → übernommen: Raster mit einer
   Doppelkarte. Karte 01 = 2 Spalten × 2 Zeilen ab 901 px. */
@media (min-width: 601px) and (max-width: 900px) {
  .w13-grid3.sl-bento3 > :first-child { grid-column: 1 / -1; }
}
/* Nachbesserung 1: Doppelkarte nur breit, nicht hoch (gleiche Reihe = gleiche Höhe wie die Nachbarn). */
@media (min-width: 901px) {
  .w13-grid3.sl-bento3 { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr); }
}
/* Karte 01 füllt die Doppelhöhe mit der Stimm-Welle (Deko, aria-hidden) statt mit Leerraum. */
.sl-welle {
  display: block; width: 100%; flex: 1 1 88px; min-height: 88px; max-height: 280px; height: auto;
  margin: var(--space-3) 0 var(--space-2); fill: var(--lyr-accent);
}
@media (max-width: 600px) { .sl-welle { display: none; } } /* einspaltig: Karte bleibt ≤ 1,3 × Nachbarn */
/* Quelle: Magic UI border-beam.tsx:67–104 → übernommen: Lichtquadrat
   (Verlauf nach links, Akzent → transparent) läuft per offset-path
   rect(0 auto auto 0 round) über einen auf den Rand maskierten Rahmen,
   6 s linear, nur diese eine Karte. Maske wie shine-border.tsx:48–51.
   Fallback (kein offset-path) und Reduced Motion: ruhender Rahmen. */
.sl-strahl {
  position: absolute; inset: 0; z-index: 2; border-radius: inherit; padding: 1px; pointer-events: none;
  background: color-mix(in srgb, var(--accent) 38%, transparent);
  -webkit-mask: linear-gradient(black 0 0) content-box, linear-gradient(black 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(black 0 0) content-box exclude, linear-gradient(black 0 0);
}
.sl-strahl i { display: none; }
@supports (offset-path: rect(0 auto auto 0)) {
  @media (prefers-reduced-motion: no-preference) {
    .sl-strahl { background: color-mix(in srgb, var(--accent) 14%, transparent); }
    .sl-strahl i {
      display: block; position: absolute; width: 96px; aspect-ratio: 1;
      background: linear-gradient(to left, var(--accent-small), var(--accent), transparent);
      offset-path: rect(0 auto auto 0 round 96px); offset-distance: 0%;
    }
    [data-sl-sicht].is-sicht > .sl-strahl i { animation: sl-strahl 6s linear infinite; }
  }
}
@keyframes sl-strahl { to { offset-distance: 100%; } }

/* ---- S4 · Server-Montage (Motor: hero-scrub.js, unverändert) ----------
   Karte = figure[data-build-seq]; Medium [data-build-media] mit <img>
   (Poster f0001, Reduced Motion f0216) + <canvas>; Legende
   [data-build-phase] mit <b>/<span>. Seitenverhältnis 20:11 wie die
   720×396-Frames (hero-scrub.css W15g). */
.sl-server { overflow: visible; }
.sl-server__pin { position: relative; }
.sl-server__pin > .w13__wrap { position: relative; z-index: 1; }
.sl-boden {
  position: absolute; left: 0; bottom: 0; z-index: 0; width: 100%; height: 40%; pointer-events: none;
  -webkit-mask-image: linear-gradient(transparent, black 70%); mask-image: linear-gradient(transparent, black 70%);
}
.sl-server__rig { position: relative; isolation: isolate; display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
.sl-blob-rig {
  position: absolute; z-index: -1; left: -12%; top: -16%; width: 124%; height: 96%;
  fill: var(--accent); opacity: .24; filter: blur(56px); pointer-events: none;
}
.sl-server__main {
  margin: 0; border: 1px solid var(--line-2); border-radius: var(--r-4);
  background: var(--lyr-l1); box-shadow: var(--shadow-3);
}
.sl-server__media {
  position: relative; display: block; aspect-ratio: 20 / 11; overflow: hidden;
  border-radius: var(--r-4) var(--r-4) 0 0; background: var(--lyr-l2);
}
.sl-server__media img, .sl-server__media canvas {
  position: absolute; inset: 0; display: block; width: 100%; height: 100%; object-fit: cover;
}
.sl-server__media canvas { opacity: 0; transition: opacity 240ms ease; }
.sl-server__main.is-ready canvas { opacity: 1; }
/* Fortschritt: vier Stufen, der Motor setzt data-phase am Host. */
.sl-server__media::after {
  content: ""; position: absolute; left: 0; bottom: 0; z-index: 2; height: 3px; width: 25%;
  background: var(--accent); transition: width 300ms var(--ease-drift);
}
.sl-server__main[data-phase="2"] .sl-server__media::after { width: 50%; }
.sl-server__main[data-phase="3"] .sl-server__media::after { width: 75%; }
.sl-server__main[data-phase="4"] .sl-server__media::after { width: 100%; }
.sl-server__phase {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1) var(--space-1-5);
  padding: var(--space-1-5) var(--space-2); border-top: 1px solid var(--line);
  font-family: var(--font-mono); font-size: var(--fs-small); letter-spacing: .06em; text-transform: uppercase;
  color: var(--ink-2); line-height: 1.4; min-height: 48px; box-sizing: border-box;
}
.sl-server__phase b { color: var(--lyr-accent-ink); font-weight: 600; }
.sl-server__phase span { color: var(--ink); }
.sl-server__phase em { font-style: normal; margin-left: auto; color: var(--ink-2); }
.sl-server__notiz { margin: 0; font-size: var(--fs-card); line-height: 1.5; color: var(--ink-2); }
.sl-server__notiz strong { color: var(--ink); font-weight: 600; }
.sl-server__rig .w13-chips { margin-top: 0; }
/* Quelle: Aceternity UI Container Scroll Animation → übernommen: das Rig
   kippt beim Einlaufen aus rotateX(12°) in die Ruhelage; fertig vor 30 %
   Sichtbarkeit (HAUS_INSPO K6-2, animation-range entry 0 % → cover 30 %). */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .sl-server__main { transform-origin: 50% 100%; }
    .sl-server__rig.is-sicht .sl-server__main { animation: sl-kipp linear both; animation-timeline: view(); animation-range: entry 0% cover 30%; }
  }
}
@keyframes sl-kipp { from { transform: perspective(1200px) rotateX(12deg) scale(.96); } }
/* Pin nur, wenn Text + Rig in 100 vh passen (gemessen: Textspalte ≈ 660 px bei 1072 px Inhaltsbreite):
   breit ≥ 1168 px (volle Container-Breite), hoch ≥ 780 px, Bewegung erlaubt. Sonst Fluss. */
@media (min-width: 1168px) and (min-height: 780px) and (prefers-reduced-motion: no-preference) {
  /* min-height statt height: bei großer Systemschrift (200 %) wächst Bühne mit, nichts läuft in den nächsten Abschnitt. */
  .sl-server { height: auto; min-height: 200vh; padding-block: 0; }
  .sl-server__pin {
    position: sticky; top: 0; min-height: 100vh; box-sizing: border-box;
    padding-top: var(--space-7); display: grid; align-content: center;
  }
}

/* ---- S5 · Anrufablauf: Tracing Beam ----------------------------------
   Quelle: Magic UI animated-beam.tsx:126–145 → übernommen: ruhige Bahn
   (Deckkraft niedrig) + Strahl darüber, runde Enden. Quelle: Aceternity UI
   Tracing Beam → übernommen: Linie wird beim Scrollen gezeichnet, ein
   Leuchtkopf läuft vorne mit. Nur 5 Spalten (≥ 1101 px). */
.sl-ablauf { position: relative; view-timeline: --sl-ablauf block; }
.sl-ablauf > .w13-steps { position: relative; z-index: 1; }
.sl-linie {
  display: none; position: absolute; z-index: 0; top: 0; height: 2px; pointer-events: none;
  left: 37px; right: calc((100% - 4 * var(--space-2)) / 5 - 37px);
}
@media (min-width: 1101px) { .sl-linie { display: block; } }
.sl-linie svg { display: block; width: 100%; height: 2px; overflow: visible; }
.sl-linie path, .sl-linie-v path { fill: none; stroke-width: 2; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.sl-linie__bahn { stroke: var(--line-3); }
.sl-linie__strahl { stroke: var(--accent); stroke-dasharray: 1; stroke-dashoffset: 0; filter: drop-shadow(0 0 4px var(--accent)); }
.sl-kopf {
  position: absolute; top: 50%; left: 100%; width: 10px; height: 10px; border-radius: 50%;
  transform: translate(-50%, -50%); background: var(--accent-small);
  box-shadow: 0 0 12px 4px color-mix(in srgb, var(--accent) 60%, transparent);
}
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    /* START-2: nur solange der Abschnitt im Bild ist (.is-sicht) → außerhalb 0 laufende Animationen */
    .w13-flow.is-sicht .sl-linie .sl-linie__strahl { animation: sl-zeichnen linear both; animation-timeline: --sl-ablauf; animation-range: entry 35% cover 55%; }
    .w13-flow.is-sicht .sl-linie .sl-kopf { animation: sl-kopf linear both; animation-timeline: --sl-ablauf; animation-range: entry 35% cover 55%; }
  }
}
@keyframes sl-zeichnen { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }
@keyframes sl-kopf { from { left: 0%; } to { left: 100%; } }
/* Karten gestaffelt 5 × 50 ms, je 300 ms → spätestens 500 ms nach .is-in alles scharf (Nachbesserung 1: Kritiker-Streifen 0/150/400 ms,
   Shots nach ≈ 1,2 s). Der Rahmen selbst blendet nicht. */
@media (prefers-reduced-motion: no-preference) {
  .sl-ablauf.w13-rv.is-in { animation: none; }
  .sl-ablauf.is-in .w13-step { animation: sl-blur 300ms var(--ease-drift) both; }
  .sl-ablauf.is-in .w13-step:nth-child(2) { animation-delay: 50ms; }
  .sl-ablauf.is-in .w13-step:nth-child(3) { animation-delay: 100ms; }
  .sl-ablauf.is-in .w13-step:nth-child(4) { animation-delay: 150ms; }
  .sl-ablauf.is-in .w13-step:nth-child(5) { animation-delay: 200ms; }
}
/* Skiper-UI-Wortreveal gestrichen (Nachbesserung 1): H2 „So läuft ein Anruf.“ bleibt statisch. */

/* ---- S6 · Baukasten: Wellen-Übergang, Raster-Ebene, Bento, Glanz -------
   Quelle: Haikei Layered Waves → übernommen: drei Wellen, Farbe aus
   Tokens, die vorderste = Flächenfarbe des Abschnitts. */
.sl-module { position: relative; background: var(--lyr-l1); }
.sl-module > .w13__wrap { position: relative; z-index: 1; }
.sl-wellen {
  position: absolute; left: 0; right: 0; top: 0; z-index: 1; height: clamp(32px, 5vw, 64px);
  transform: translateY(-100%); pointer-events: none;
}
.sl-wellen svg { display: block; width: 100%; height: 100%; }
.sl-wellen path:nth-child(1) { fill: color-mix(in srgb, var(--accent) 12%, var(--lyr-l1)); }
.sl-wellen path:nth-child(2) { fill: color-mix(in srgb, var(--accent) 6%, var(--lyr-l1)); }
.sl-wellen path:nth-child(3) { fill: var(--lyr-l1); }
/* Quelle: Magic UI grid-pattern.tsx:37–53 → übernommen: 40-px-Raster als Hintergrundebene, radial maskiert. */
.sl-raster {
  position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; pointer-events: none; stroke: var(--line-2);
  -webkit-mask-image: radial-gradient(70% 55% at 50% 38%, black, transparent);
  mask-image: radial-gradient(70% 55% at 50% 38%, black, transparent);
}
/* Nachbesserung 1: Karte 01 = 2 Spalten × 1 Reihe; 06 schließt die Reihe (2 Spalten: span 2, 3 Spalten: ganze Breite) → kein Loch,
   jede Karte so hoch wie ihre Nachbarn; Ziffer in Hausgröße, Text oben. */
@media (min-width: 601px) and (max-width: 1100px) {
  .w13-mods.sl-bento6 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .w13-mods.sl-bento6 > :first-child, .w13-mods.sl-bento6 > :last-child { grid-column: span 2; }
}
@media (min-width: 1101px) {
  .w13-mods.sl-bento6 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .w13-mods.sl-bento6 > :first-child { grid-column: span 2; }
  .w13-mods.sl-bento6 > :last-child { grid-column: 1 / -1; }
}
.w13-mods.sl-bento6 > .w13-mod { background: var(--lyr-l2); }
/* Breite Karten (01, 06): Text etwas größer, Chip am Fuß — die Reihe hat die Höhe der schmalen Nachbarn. */
@media (min-width: 601px) {
  .w13-mods.sl-bento6 > :is(:first-child, :last-child) { display: flex; flex-direction: column; }
  .w13-mods.sl-bento6 > :is(:first-child, :last-child) p:not(.w13-mod__num) { font-size: var(--fs-lede); max-width: 36ch; }
  .w13-mods.sl-bento6 > :is(:first-child, :last-child) .w13-mod__chip { margin-top: auto; align-self: flex-start; }
}
.sl-felder { display: none; }
@media (min-width: 601px) {
  .w13-mods.sl-bento6 > .w13-mod:first-child .sl-felder {
    display: block; position: absolute; inset: 0; z-index: -1; pointer-events: none; border-radius: inherit; contain: paint;
    stroke: var(--line-2);
    -webkit-mask-image: radial-gradient(60% 90% at 85% 40%, black, transparent);
    mask-image: radial-gradient(60% 90% at 85% 40%, black, transparent);
  }
  .sl-felder svg { position: absolute; inset: 0; width: 100%; height: 100%; }
  .sl-felder__g { position: absolute; inset: 0; opacity: .7; }
  .sl-felder__g i { position: absolute; width: 39px; height: 39px; translate: 1px 1px; background: color-mix(in srgb, var(--accent) 16%, transparent); }
}
/* START-2 A6 · Quelle: Magic UI animated-grid-pattern.tsx → Felder blinken langsam (2 Gruppen, 7 s, gegenphasig), nur im Bild */
@media (min-width: 601px) and (prefers-reduced-motion: no-preference) {
  .w13-mod.is-sicht .sl-felder__g--a { animation: sl-blink 7s ease-in-out infinite; }
  .w13-mod.is-sicht .sl-felder__g--b { animation: sl-blink 7s ease-in-out -3.5s infinite; }
}
/* Quelle: Magic UI magic-card.tsx:61–62 (gradientSize 200) / Aceternity UI Card Spotlight → übernommen:
   Radialglanz folgt dem Zeiger (start-layering.js setzt --sl-mx/--sl-my), nur Geräte mit Hover. */
.sl-spot { position: relative; isolation: isolate; }
.sl-spot::before {
  content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; pointer-events: none; opacity: 0;
  background: radial-gradient(240px circle at var(--sl-mx, 50%) var(--sl-my, 0%), color-mix(in srgb, var(--accent) 16%, transparent), transparent 70%);
  transition: opacity 200ms ease;
}
@media (hover: hover) { .sl-spot:hover::before { opacity: 1; } }

/* ---- S7 · Abschluss: Karte mit Shine Border ---------------------------
   Quelle: Magic UI shine-border.tsx:39–58 + globals.css:355 (@keyframes
   shine) → übernommen: radial-gradient(transparent, transparent, Akzent,
   transparent, transparent), background-size 300 % 300 %, Maske
   content-box xor, 14 s; nur im Bild; Reduced Motion = ruhender Glanz. */
.sl-abschluss {
  position: relative; border: 1px solid var(--line-2); border-radius: var(--r-5);
  background: var(--lyr-l1); padding: var(--space-6) var(--space-4);
}
@media (max-width: 600px) { .sl-abschluss { padding: var(--space-4) var(--space-2); } }
.sl-glanz {
  position: absolute; inset: -1px; border-radius: inherit; padding: 1px; pointer-events: none;
  background-image: radial-gradient(transparent, transparent, var(--accent), var(--accent-small), transparent, transparent);
  background-size: 300% 300%; background-position: 0% 0%;
  -webkit-mask: linear-gradient(black 0 0) content-box, linear-gradient(black 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(black 0 0) content-box exclude, linear-gradient(black 0 0);
}
@media (prefers-reduced-motion: no-preference) {
  .sl-abschluss.is-sicht > .sl-glanz { animation: sl-glanz 14s linear infinite; }
}
@keyframes sl-glanz { 50% { background-position: 100% 100%; } }

/* ======================================================================
   W33 START-2 („All-Out“) — Ergänzungen je Abschnitt A1–A9
   ====================================================================== */

/* ---- A1 · Hero: Halo nur, solange er < 50 % Viewport breit ist (Paint-Regel: eine geblurte Ebene je Sektion);
   darunter übernimmt das Raster die Ferne-Ebene der Parallaxe. ---- */
@media (max-width: 960px) {
  .sl-halo { display: none; }
  .sl-gitter { inset: -48px -8px; }
}
@supports (animation-timeline: scroll()) {
  @media (max-width: 960px) and (prefers-reduced-motion: no-preference) {
    .sl-gitter { animation: sl-tief-06 linear both; animation-timeline: scroll(root); animation-range: 0 100vh; } /* START-3: Keyframe aus dem Hero-Block (0,6×) */
  }
}
.w13-hero__screen .sl-strahl { border-radius: inherit; }

/* ---- Gemeinsam: Meteore (A3 Karte 01, A8 Abschluss) ------------------
   Quelle: Magic UI meteors.tsx:18–23, 51–56 + globals.css:247–259 → Kopf + Schweif,
   Winkel 215°; abgewandelt: EIN SVG-Muster (Kachel mit 1–2 Meteoren), das als
   Gruppe diagonal um genau eine Kachel wandert → nahtlose Schleife, 1 Animation,
   Compositor (transform). Reduced Motion: ruhende Streifen. */
.sl-meteore { position: absolute; inset: 0; z-index: -1; border-radius: inherit; pointer-events: none; contain: paint; opacity: .7; }
.sl-meteore__zug { position: absolute; top: -360px; left: 0; right: -360px; bottom: 0; }
.sl-meteore__zug svg { display: block; width: 100%; height: 100%; }
.sl-meteore path { fill: none; stroke-width: 1.5; stroke-linecap: round; }
@keyframes sl-meteor { to { transform: translate3d(-360px, 360px, 0); } }
@keyframes sl-meteor-g { to { transform: translate3d(-720px, 720px, 0); } }
@media (prefers-reduced-motion: no-preference) {
  [data-sl-sicht].is-sicht > .sl-meteore .sl-meteore__zug { animation: sl-meteor 8s linear infinite; }
  .w13-close.is-sicht .sl-meteore--close .sl-meteore__zug { animation: sl-meteor-g 16s linear infinite; }
}

/* ---- Gemeinsam: Magic Card / Glowing Effect (A3, A6) ------------------
   Quelle: Magic UI magic-card.tsx:169–176 (radial-gradient 200 px am Zeiger,
   border-box) + Aceternity UI Glowing Effect (Muster) → Rand leuchtet zum Zeiger
   hin; nur Geräte mit Hover; ohne Hover ruhiger Rahmen. */
.sl-mc { position: relative; }
@media (hover: hover) {
  .sl-mc::after {
    content: ""; position: absolute; inset: -1px; z-index: 3; border-radius: inherit; padding: 1px; pointer-events: none; opacity: 0;
    background: radial-gradient(220px circle at var(--sl-mx, 50%) var(--sl-my, 0%), var(--accent-small), color-mix(in srgb, var(--accent-2) 70%, transparent) 40%, transparent 75%);
    -webkit-mask: linear-gradient(black 0 0) content-box, linear-gradient(black 0 0); -webkit-mask-composite: xor;
    mask: linear-gradient(black 0 0) content-box exclude, linear-gradient(black 0 0);
    transition: opacity 200ms ease;
  }
  .sl-mc:hover::after { opacity: 1; }
}

/* ---- A3 · Was DripBack übernimmt ------------------------------------- */
.sl-liefert { background: var(--lyr-l1); }
.sl-grund--liefert { background:
  radial-gradient(45% 55% at 90% 6%, color-mix(in srgb, var(--accent) 11%, transparent), transparent 72%),
  radial-gradient(40% 50% at 4% 96%, color-mix(in srgb, var(--accent-2) 12%, transparent), transparent 72%); }
.sl-kante--wellen path:nth-child(1) { fill: color-mix(in srgb, var(--accent) 16%, var(--lyr-l1)); }
.sl-kante--wellen path:nth-child(2) { fill: color-mix(in srgb, var(--accent) 7%, var(--lyr-l1)); }
.sl-kante--wellen path:nth-child(3) { fill: var(--lyr-l1); }
.sl-kante--wellen path:nth-child(4) { fill: var(--lyr-l1); }
.sl-liefert .w13-card { background: color-mix(in srgb, var(--lyr-l2) 80%, transparent); }
.sl-karte-haupt { isolation: isolate; }
/* Karte 02: Mini-Kalender (statisch) */
.sl-kal { display: grid; gap: var(--space-1); margin: var(--space-3) 0 var(--space-2); }
.sl-kal > span { display: block; min-height: 24px; box-sizing: border-box; border-radius: var(--r-2); }
.sl-kal__belegt { background: repeating-linear-gradient(135deg, var(--line-2) 0 6px, transparent 6px 12px); border: 1px solid var(--line-2); }
.sl-kal__slot {
  padding: var(--space-1) var(--space-1-5); border: 1px solid color-mix(in srgb, var(--accent) 55%, transparent);
  border-left: 3px solid var(--accent); background: color-mix(in srgb, var(--accent) 16%, transparent);
  font-family: var(--font-mono); font-size: var(--fs-small); line-height: 1.4; color: var(--ink);
}
.sl-kal__frei { border: 1px dashed var(--line-3); }
/* Karte 03: drei CRM-Zeilen */
.sl-crm { list-style: none; margin: var(--space-3) 0 var(--space-2); padding: 0; display: grid; gap: var(--space-1); }
.sl-crm > * {
  display: grid; grid-template-columns: minmax(0, auto) minmax(24px, 1fr) auto; align-items: center; gap: var(--space-1-5);
  min-height: 32px; padding: 0 var(--space-1-5); border: 1px solid var(--line-2); border-radius: var(--r-2);
  background: color-mix(in srgb, var(--ink) 3%, transparent); font-family: var(--font-mono); font-size: var(--fs-small); color: var(--ink-2); line-height: 1.4;
}
.sl-crm i { display: block; height: 6px; border-radius: var(--r-pill); background: linear-gradient(90deg, var(--line-3), transparent); }
.sl-crm b { color: var(--accent-small); font-weight: 600; }

/* ---- A4 · Server-Montage --------------------------------------------- */
.sl-server__pin { z-index: 1; }
.sl-grund--server { background:
  radial-gradient(50% 42% at 10% 92%, color-mix(in srgb, var(--accent) 13%, transparent), transparent 72%),
  radial-gradient(38% 40% at 92% 18%, color-mix(in srgb, var(--accent-2) 11%, transparent), transparent 72%); }
.sl-kante--stufen path:nth-child(1) { fill: color-mix(in srgb, var(--accent) 7%, var(--bg)); }
.sl-kante--stufen path:nth-child(2) { fill: var(--bg); }
.sl-kante__linie { fill: none; stroke: var(--accent); stroke-width: 1; opacity: .5; }
/* Ripple: 2 Ringe (210/280 von 420 → 50 % / 66,7 %), gemeinsamer Puls */
.sl-ripple {
  position: absolute; z-index: -2; left: 50%; top: 34%; width: min(420px, 100%); aspect-ratio: 1; translate: -50% -50%;
  border-radius: 50%; pointer-events: none; opacity: .8;
  background: radial-gradient(circle closest-side,
    color-mix(in srgb, var(--accent) 9%, transparent) 0 49.2%, color-mix(in srgb, var(--ink) 22%, transparent) 49.6% 50%, transparent 50.4% 66.2%,
    color-mix(in srgb, var(--ink) 14%, transparent) 66.6% 67%, transparent 67.4%);
  -webkit-mask-image: linear-gradient(black 30%, transparent 92%); mask-image: linear-gradient(black 30%, transparent 92%);
}
@keyframes sl-ripple { 0%, 100% { transform: scale(1); } 50% { transform: scale(.9); } }
@media (prefers-reduced-motion: no-preference) {
  .sl-server__rig.is-sicht > .sl-ripple { animation: sl-ripple 4s ease infinite; }
}
/* Schritt-Pillen (Skiper-Muster): data-phase am Host (hero-scrub) → erledigt / aktuell; Leiste = __heroScrub.progress (JS) */
.sl-pillen { position: relative; display: flex; flex-wrap: wrap; gap: var(--space-1); list-style: none; margin: 0; padding: 0 0 var(--space-1-5); }
.sl-pillen > * {
  display: inline-flex; align-items: center; min-height: 32px; box-sizing: border-box; padding: var(--space-0) var(--space-1-5);
  border: 1px solid var(--line-2); border-radius: var(--r-pill); background: var(--line);
  font-family: var(--font-mono); font-size: var(--fs-small); line-height: 1.4; color: var(--ink-2);
}
.sl-pillen::after {
  content: ""; position: absolute; left: 0; bottom: 0; height: 2px; width: calc(var(--sl-bau, 0) * 100%);
  border-radius: var(--r-pill); background: linear-gradient(90deg, var(--accent), var(--accent-small));
}
.sl-pillen > :first-child,
.sl-server__main[data-phase="2"] ~ .sl-pillen > :nth-child(2),
.sl-server__main[data-phase="3"] ~ .sl-pillen > :nth-child(3),
.sl-server__main[data-phase="4"] ~ .sl-pillen > :nth-child(4) {
  border-color: color-mix(in srgb, var(--accent) 60%, transparent); background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--ink);
}
.sl-server__main[data-phase="2"] ~ .sl-pillen > :nth-child(-n+1),
.sl-server__main[data-phase="3"] ~ .sl-pillen > :nth-child(-n+2),
.sl-server__main[data-phase="4"] ~ .sl-pillen > :nth-child(-n+3) {
  border-color: var(--line-3); background: var(--line-2); color: var(--ink-2);
}
.sl-server__main[data-phase="2"] ~ .sl-pillen > :nth-child(-n+1)::before,
.sl-server__main[data-phase="3"] ~ .sl-pillen > :nth-child(-n+2)::before,
.sl-server__main[data-phase="4"] ~ .sl-pillen > :nth-child(-n+3)::before { content: "✓" / ""; margin-right: var(--space-0); color: var(--brand-blue-ink); }
@media (prefers-reduced-motion: no-preference) {
  .sl-pillen > * { transition: background-color var(--dur-med) var(--ease-smooth), border-color var(--dur-med) var(--ease-smooth), color var(--dur-med) var(--ease-smooth); }
}
/* Trust-Center-Kasten mit Border Beam */
.sl-kasten {
  position: relative; display: inline-flex; align-items: center; padding: var(--space-0) var(--space-2);
  border: 1px solid var(--line-2); border-radius: var(--r-3); background: color-mix(in srgb, var(--ink) 3%, transparent);
}

/* ---- A5 · Ablauf: Sticky Scroll Reveal + senkrechter Tracing Beam (≥ 1168 px) ---- */
.sl-grund--ablauf { background:
  radial-gradient(45% 60% at 86% 30%, color-mix(in srgb, var(--accent) 9%, transparent), transparent 72%),
  linear-gradient(180deg, transparent 55%, color-mix(in srgb, var(--lyr-l1) 80%, transparent)); }
.sl-punktfeld {
  position: absolute; inset: 0;
  background: radial-gradient(circle at 1px 1px, var(--lyr-line-hi) 1px, transparent 1.5px) 0 0 / 16px 16px;
  -webkit-mask-image: radial-gradient(55% 65% at 72% 42%, black, transparent); mask-image: radial-gradient(55% 65% at 72% 42%, black, transparent);
}
.sl-linie-v { display: none; }
@media (min-width: 1168px) {
  .w13-flow > .w13__wrap { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: var(--space-6); align-items: start; }
  .w13-flow .w13-flow__head { position: sticky; top: calc(80px + var(--space-6)); margin-bottom: 0; }
  .w13-flow .w13-steps { grid-template-columns: minmax(0, 1fr); gap: var(--space-3); }
  .w13-flow .sl-linie { display: none; }
  .w13-flow .sl-linie-v { display: block; position: absolute; z-index: 0; left: 37px; top: 43px; bottom: var(--sl-v-ende, 43px); width: 2px; pointer-events: none; }
  .sl-linie-v svg { display: block; width: 2px; height: 100%; overflow: visible; }
  .sl-kopf-v { left: 50%; top: 100%; }
  .w13-flow .w13-step {
    display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: var(--space-3); row-gap: var(--space-0); align-items: center;
    padding: var(--space-3) var(--space-3) var(--space-3) 96px;
  }
  .w13-flow .w13-step > :not(.w13-step__n):not(.w13-step__chips) { grid-column: 1; }
  .w13-flow .w13-step__n { top: 24px; }
  .w13-flow .w13-step__chips { grid-column: 2; grid-row: 1 / span 3; margin: 0; padding: 0; justify-content: flex-end; }
  .w13-flow .w13-step.is-aktiv { border-color: color-mix(in srgb, var(--accent) 55%, transparent); background: color-mix(in srgb, var(--accent) 8%, transparent); }
}
@media (min-width: 1168px) and (prefers-reduced-motion: no-preference) {
  .w13-flow .w13-step { transition: border-color var(--dur-med) var(--ease-smooth), background-color var(--dur-med) var(--ease-smooth); }
}
@supports (animation-timeline: view()) {
  @media (min-width: 1168px) and (prefers-reduced-motion: no-preference) {
    .w13-flow.is-sicht .sl-linie-v__strahl { animation: sl-zeichnen linear both; animation-timeline: --sl-ablauf; animation-range: entry 40% exit 60%; }
    .w13-flow.is-sicht .sl-kopf-v { animation: sl-kopf-v linear both; animation-timeline: --sl-ablauf; animation-range: entry 40% exit 60%; }
  }
}
@keyframes sl-kopf-v { from { top: 0%; } to { top: 100%; } }

/* ---- A6 · Baukasten: Grund, Fuß (Stacked Waves), Orbit ---------------- */
.sl-grund--module { background:
  radial-gradient(42% 40% at 10% 12%, color-mix(in srgb, var(--accent) 10%, transparent), transparent 72%),
  radial-gradient(40% 45% at 94% 62%, color-mix(in srgb, var(--accent-2) 13%, transparent), transparent 72%); }
.sl-fuss { left: 0; right: 0; bottom: 0; width: 100%; height: clamp(48px, 6vw, 96px); }
.sl-fuss path:nth-child(1) { fill: color-mix(in srgb, var(--lyr-l1) 80%, var(--bg)); }
.sl-fuss path:nth-child(2) { fill: color-mix(in srgb, var(--lyr-l1) 55%, var(--bg)); }
.sl-fuss path:nth-child(3) { fill: color-mix(in srgb, var(--lyr-l1) 30%, var(--bg)); }
.sl-fuss path:nth-child(4) { fill: var(--bg); }
.sl-fuss__linie { fill: none; stroke: var(--accent); stroke-width: 1; opacity: .35; }
.sl-module .sl-raster { z-index: 0; }
/* Orbit: Quelle Magic UI orbiting-circles.tsx:21–47 + globals.css:343–353; Ellipsen statt Kreise,
   Winkel als registrierte Eigenschaft (je Bahn 1 Animation), Chips bleiben aufrecht. */
@property --sl-oa { syntax: '<angle>'; inherits: true; initial-value: 0deg; }
@property --sl-ob { syntax: '<angle>'; inherits: true; initial-value: 0deg; }
@keyframes sl-orb-a { to { --sl-oa: 360deg; } }
@keyframes sl-orb-b { to { --sl-ob: 360deg; } }
.sl-orbit { position: relative; }
.sl-orbit__bahnen, .sl-orbit__kern { display: none; }
/* W34 NACHLAUF 1 (Orchestrator-Entscheid): Umlauf erst ab 1380 px — dort erreicht --sl-rxa sein Maximum 430 px, und orbit.mjs belegt
   0 Chip-Kollisionen in allen 1.296 Stellungen. Darunter (und bei Reduced Motion) ruhende, umbrechende Reihe um „103 Module“. */
@media (min-width: 1380px) and (prefers-reduced-motion: no-preference) {
  .sl-orbit { height: 440px; margin-top: var(--space-4); }
  .sl-orbit__bahnen {
    display: block; position: absolute; left: 50%; top: 50%; width: 1000px; height: 420px; translate: -50% -50%;
    fill: none; stroke: var(--lyr-line-hi); stroke-width: 1; stroke-dasharray: 3 7;
  }
  .sl-orbit__kern {
    display: grid; place-items: center; position: absolute; left: 50%; top: 50%; translate: -50% -50%; width: 104px; height: 104px; box-sizing: border-box;
    border-radius: 50%; border: 1px solid color-mix(in srgb, var(--accent) 50%, transparent);
    background: radial-gradient(circle, color-mix(in srgb, var(--accent) 26%, var(--lyr-l1)), var(--lyr-l1) 72%);
    box-shadow: 0 0 64px color-mix(in srgb, var(--accent) 28%, transparent);
    font-family: var(--font-serif); font-size: var(--fs-lede); line-height: 1.2; color: var(--ink); text-align: center;
  }
  .sl-orbit__chips {
    position: absolute; inset: 0; margin: 0;
    animation: sl-orb-a 20s linear infinite, sl-orb-b 12s linear infinite reverse; animation-play-state: paused;
  }
  .sl-orbit.is-sicht .sl-orbit__chips { animation-play-state: running; }
  .sl-orbit.is-sicht:hover .sl-orbit__chips { animation-play-state: paused; }
  .sl-orbit__chips > .w13-chip {
    position: absolute; left: 50%; top: 50%; margin: 0; white-space: nowrap; will-change: transform;
    font-size: var(--fs-caption); padding: var(--space-0) var(--space-1-5); background: var(--lyr-l2);
  }
  /* W33 O (Timo 27.09.: Orbit-Chips dürfen nie über den Rand): äußere Bahn wächst mit dem Viewport — bei 1168 px ragte
     „Telefonie · sipgate · 4 Module“ bis x 1196 (Sonde 12 Winkel × 4 Breiten). Halbachse = min(430 px, 50 vw − 260 px):
     1168 → 324 px, 1280 → 380 px, ab 1380 → 430 px; Chip-Halbbreite ≤ 125 px bleibt innerhalb der Wrap-Kante. */
  .sl-orbit { --sl-rxa: min(430px, calc(50vw - 260px)); }
  .sl-orbit__bahnen { width: min(1000px, calc(100vw - 300px)); }
  .sl-orbit__chips > .sl-orbit--aussen { transform: translate(-50%, -50%) translate(calc(cos(var(--sl-oa) + var(--a)) * var(--sl-rxa, 430px)), calc(sin(var(--sl-oa) + var(--a)) * var(--sl-rya, 175px))); }
  .sl-orbit__chips > .sl-orbit--innen { transform: translate(-50%, -50%) translate(calc(cos(var(--sl-ob) + var(--a)) * var(--sl-rxb, 205px)), calc(sin(var(--sl-ob) + var(--a)) * var(--sl-ryb, 92px))); }
}

/* ---- A7 · Zahlen und Region ------------------------------------------ */
.sl-grund--region { background:
  radial-gradient(48% 55% at 82% 70%, color-mix(in srgb, var(--accent) 10%, transparent), transparent 72%),
  radial-gradient(38% 40% at 8% 18%, color-mix(in srgb, var(--accent-2) 9%, transparent), transparent 72%); }
.sl-streu { left: 0; top: -8%; width: 100%; height: 116%;
  -webkit-mask-image: linear-gradient(transparent 6%, black 22%, black 80%, transparent 96%); mask-image: linear-gradient(transparent 6%, black 22%, black 80%, transparent 96%); }
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .w13-region.is-sicht .sl-streu { animation: sl-schweben linear both; animation-timeline: view(); animation-range: cover; }
    .w13-close.is-sicht .sl-blob-close { animation: sl-schweben linear both; animation-timeline: view(); animation-range: cover; }
  }
}
@keyframes sl-schweben { from { transform: translateY(-40px); } to { transform: translateY(40px); } }
/* Quelle: Magic UI neon-gradient-card (Muster, ohne Riesen-Blur/Neonfarben) → 1-px-Verlaufskante + weicher Halo, statisch */
.sl-neon { position: relative; isolation: isolate; box-shadow: 0 12px 40px -18px color-mix(in srgb, var(--accent) 45%, transparent); }
.sl-neon::before {
  content: ""; position: absolute; inset: -1px; border-radius: inherit; padding: 1px; pointer-events: none;
  background: linear-gradient(135deg, color-mix(in srgb, var(--accent-small) 75%, transparent), transparent 38%, transparent 64%, color-mix(in srgb, var(--accent-2) 80%, transparent));
  -webkit-mask: linear-gradient(black 0 0) content-box, linear-gradient(black 0 0); -webkit-mask-composite: xor;
  mask: linear-gradient(black 0 0) content-box exclude, linear-gradient(black 0 0);
}
.luft-region > .sl-strahl { z-index: 4; }

/* ---- A8 · Abschluss: Lamp + Blob + Meteore ---------------------------- */
.sl-grund--close { background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--accent) 5%, transparent) 18%, transparent 55%); }
/* Quelle: Aceternity UI Lamp (Muster) → zwei Kegel von oben (conic-gradient), die EINE geblurte Ebene der Sektion */
.sl-lampe {
  position: absolute; left: 50%; top: 6%; width: min(1100px, 100%); height: 70%; translate: -50% 0; opacity: .85; filter: blur(36px);
  background: conic-gradient(from 0deg at 50% 0%, transparent 0 128deg, color-mix(in srgb, var(--accent) 55%, transparent) 150deg,
    transparent 172deg 188deg, color-mix(in srgb, var(--accent) 55%, transparent) 210deg, transparent 232deg 360deg);
  -webkit-mask-image: linear-gradient(transparent, black 12%, black 30%, transparent); mask-image: linear-gradient(transparent, black 12%, black 30%, transparent);
}
.sl-lampe::after {
  content: ""; position: absolute; left: 30%; right: 30%; top: 4%; height: 2px; background: var(--accent-small);
  box-shadow: 0 0 24px 6px color-mix(in srgb, var(--accent) 60%, transparent);
}
.sl-blob-close { left: 50%; top: 24%; width: min(560px, 45%); height: 60%; translate: -50% 0; opacity: .5; filter: blur(48px); }
.sl-meteore--close { z-index: auto; opacity: .8; }
.sl-meteore--close .sl-meteore__zug { top: -720px; right: -720px; }
.sl-abschluss { background: color-mix(in srgb, var(--lyr-l1) 88%, transparent); }

/* ======================================================================
   W33 START-3 (r11, 27.09.2026) — Video-Hero (V1, inline im Kopfblock),
   seitwärts laufende Sektionen (V2 Spur, V3 Einlauf, V4 Typo-Laufband),
   echtes Layering (V5 Sticky-Stapel, V6 Überlappung je Sektion).
   Timo: „seitwärts slidende Sachen … Layering … Video Hero Header …
   die Inspiration von den Seiten“. Referenz je Block im Kommentar (V7).
   Budgets: Dauer-Animationen im Ruhezustand ≤ 14 (Video zählt nicht);
   Reduced Motion = 0 laufende Animationen, kein Pin, kein Video.
   Ebenentabelle (nach index_vorW13.html:434–436, „Glow 0,05× · Ferne 0,18× ·
   Mitte 0,45× · Boden 0,9× · Vorn 1,2×“), hier vier Stufen:
     Grund 0,2× (Verlauf, Korn, Streukreise)  · Schatten --lyr-e1
     Form  0,5× (Blob, Wellen, Ringe)        · --lyr-e2
     Inhalt 0,8–1× (Karten, Text)            · --lyr-e3
     Schwebend 1,2× (Badges, Legende, Chips) · --lyr-e4
   ====================================================================== */

/* ---- V2 · Seitwärts 1: horizontale Spur ------------------------------
   Quelle: Aceternity UI Sticky Scroll (horizontal, Muster) + alte lyr-rail
   (index_vorW13.html:1033–1118) + web/lab/layering (lab-rail: Pin 100 vh,
   rail-track translate3d, Karten 64 vw) → übernommen: Pin, Spur, Einflug.
   Grundform (schmal + Reduced Motion): nativer Scroller mit Snap. */
.sl-spur__pin { position: relative; z-index: 1; }
.sl-spur__kopf { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--space-3); }
.sl-spur__titel { min-width: 0; }
.sl-spur__stand { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5); }
@media (max-width: 600px) { .sl-spur__stand { flex-wrap: nowrap; width: 100%; } .sl-spur__balken { max-width: none; } }
.sl-spur__zahl {
  display: inline-block; min-height: 32px; box-sizing: border-box; padding: var(--space-0) var(--space-1-5); white-space: nowrap;
  border: 1px solid var(--line-2); border-radius: var(--r-pill); background: color-mix(in srgb, var(--lyr-l2) 85%, transparent);
  font-family: var(--font-mono); font-size: var(--fs-small); letter-spacing: .12em; color: var(--ink-2); line-height: 22px;
}
.sl-spur__zahl b { color: var(--ink); font-weight: 600; }
.sl-spur__balken { position: relative; display: block; flex: 1 1 48px; min-width: 48px; max-width: 120px; width: 120px; height: 2px; border-radius: var(--r-pill); background: var(--line-2); }
.sl-spur__balken i {
  position: absolute; inset: 0; border-radius: inherit; transform-origin: 0 50%; transform: scaleX(.111);
  background: linear-gradient(90deg, var(--accent), var(--accent-small));
}
.sl-spur__knopf {
  display: inline-grid; place-items: center; width: 44px; height: 44px; padding: 0; box-sizing: border-box; cursor: pointer;
  border: 1px solid var(--line-2); border-radius: 50%; background: var(--lyr-l2); color: var(--ink);
  transition: border-color 200ms ease, background-color 200ms ease;
}
.sl-spur__knopf svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
@media (hover: hover) { .sl-spur__knopf:hover { border-color: var(--accent); background: var(--lyr-l3); } }
.sl-spur__knopf:focus-visible { outline: 2px solid var(--accent-small); outline-offset: 3px; }
.sl-skip:focus { left: var(--gutter); top: var(--space-2); z-index: 30; }
/* Fenster = waagerechter Scroller (Hausmuster overflow-x:auto + sichtbarer Hinweis per aria-describedby → Zähler) */
.sl-spur__fenster {
  overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scrollbar-width: none;
  margin-top: var(--space-3); padding-block: var(--space-4);
}
.sl-spur__fenster::-webkit-scrollbar { display: none; }
.sl-spur__reihe {
  display: flex; align-items: stretch; gap: var(--space-3); width: max-content; box-sizing: border-box;
  padding-inline: max(var(--gutter), calc((100% - var(--container)) / 2));
}
.sl-spur__reihe > article {
  position: relative; flex: 0 0 auto; width: min(78vw, 360px); box-sizing: border-box; min-height: 0; margin: 0;
  display: flex; flex-direction: column; overflow: visible; scroll-snap-align: center;
  padding: var(--space-5) var(--space-3) var(--space-3); border: 1px solid var(--line-2); border-radius: var(--r-5);
  background: linear-gradient(160deg, var(--lyr-l3), var(--lyr-l2) 55%, var(--lyr-l1));
  box-shadow: var(--lyr-e3), 0 24px 48px -28px rgba(0,0,0,.8);
  transition: border-color 200ms ease, box-shadow 200ms ease;
}
.sl-spur__reihe > .sl-karte-haupt { width: min(88vw, 520px); }
.sl-spur__reihe > article:focus-visible { outline: 2px solid var(--accent-small); outline-offset: 4px; }
.sl-spur__reihe > article .card__body { display: flex; flex-direction: column; flex: 1 1 auto; }
.sl-spur__reihe > .w13-mod p:not(.w13-mod__num) { flex: 1 1 auto; }
.sl-spur__reihe > .w13-mod .w13-mod__chip { align-self: flex-start; }
.sl-spur .sl-welle { max-height: 120px; }
/* V6 · Kartennummer als Badge über der Oberkante (Schwebend 1,2×, --lyr-e4) */
.sl-spur__reihe > article > :is(.w13-card__num, .w13-mod__num) {
  position: absolute; z-index: 4; top: 0; left: var(--space-3); translate: 0 -50%; margin: 0; white-space: nowrap;
  padding: var(--space-0) var(--space-1-5); border: 1px solid color-mix(in srgb, var(--accent) 55%, transparent); border-radius: var(--r-pill);
  background: color-mix(in srgb, var(--accent) 20%, var(--lyr-l2)); box-shadow: var(--lyr-e4); color: var(--ink); line-height: 1.4;
}
/* Karte 04 (Baukasten 01): blinkende Felder wie im Bento (Stand B), jetzt in der Spur */
.sl-spur__reihe > .w13-mod[data-sl-nr="04"] { isolation: isolate; }
.sl-spur__reihe > .w13-mod[data-sl-nr="04"] .sl-felder {
  display: block; position: absolute; inset: 0; z-index: -1; pointer-events: none; border-radius: inherit; contain: paint; stroke: var(--line-2);
  -webkit-mask-image: radial-gradient(70% 70% at 80% 30%, black, transparent); mask-image: radial-gradient(70% 70% at 80% 30%, black, transparent);
}
.sl-spur__reihe > .w13-mod[data-sl-nr="04"] .sl-felder svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.sl-spur__reihe > .w13-mod[data-sl-nr="04"] .sl-felder__g { position: absolute; inset: 0; opacity: .7; }
.sl-spur__reihe > .w13-mod[data-sl-nr="04"] .sl-felder__g i { position: absolute; width: 39px; height: 39px; translate: 1px 1px; background: color-mix(in srgb, var(--accent) 16%, transparent); }
/* Baukasten-Karten in der Spur: Platte mit Skelett-Zeilen (Produktfenster, Refero/Nexora-Anspruch), der Chip ragt über ihre Unterkante (V6) */
.sl-spur__reihe > .w13-mod .sl-platte {
  position: relative; display: grid; align-content: start; gap: var(--space-1); margin: var(--space-2) 0 0; padding: var(--space-2) var(--space-2) var(--space-4);
  min-height: 112px; box-sizing: border-box; border: 1px solid var(--lyr-line); border-radius: var(--r-4);
  background: radial-gradient(120% 90% at 100% 0%, color-mix(in srgb, var(--accent) 14%, transparent), transparent 60%),
    linear-gradient(160deg, color-mix(in srgb, var(--ink) 5%, transparent), color-mix(in srgb, var(--ink) 1%, transparent));
  box-shadow: var(--lyr-e2);
}
.sl-spur__reihe > .w13-mod .sl-platte i { display: block; height: 8px; border-radius: var(--r-pill); background: linear-gradient(90deg, var(--line-3), transparent); }
.sl-spur__reihe > .w13-mod .sl-platte i:nth-child(1) { width: 78%; background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 70%, transparent), transparent); }
.sl-spur__reihe > .w13-mod .sl-platte i:nth-child(2) { width: 56%; }
.sl-spur__reihe > .w13-mod .sl-platte i:nth-child(3) { width: 38%; }
.sl-spur__reihe > .w13-mod .w13-mod__chip { position: relative; z-index: 2; margin: calc(-1 * var(--space-3)) 0 0 var(--space-2); background: var(--lyr-l3); box-shadow: var(--lyr-e4); }
@media (prefers-reduced-motion: no-preference) {
  .sl-spur__reihe > .w13-mod.is-sicht .sl-felder__g--a { animation: sl-blink 7s ease-in-out infinite; }
  .sl-spur__reihe > .w13-mod.is-sicht .sl-felder__g--b { animation: sl-blink 7s ease-in-out -3.5s infinite; }
}
/* Pin-Modus: breit, hoch genug, Bewegung erlaubt. Sektion 300 vh, innen sticky 100 vh (Kopfleiste 80 px als Innenabstand). */
@media (min-width: 1168px) and (min-height: 760px) and (prefers-reduced-motion: no-preference) {
  .sl-spur { height: 300vh; box-sizing: border-box; padding-block: 0; view-timeline: --sl-spur block; }
  .sl-spur__pin {
    position: sticky; top: 0; min-height: 100vh; box-sizing: border-box; padding-top: calc(80px + var(--space-4));
    display: flex; flex-direction: column; justify-content: flex-start; padding-bottom: var(--space-4);
  }
  .sl-spur__fenster { scroll-snap-type: none; }
  .sl-spur__reihe { will-change: transform; }
  .sl-spur__reihe > article { width: 380px; will-change: transform; }
  .sl-spur__reihe > .sl-karte-haupt { width: 540px; }
}
@supports (animation-timeline: view()) {
  @media (min-width: 1168px) and (min-height: 760px) and (prefers-reduced-motion: no-preference) {
    .sl-spur.is-sicht .sl-spur__reihe { animation: sl-spur-x linear both; animation-timeline: --sl-spur; animation-range: contain 0% contain 100%; }
    .sl-spur.is-sicht .sl-spur__balken i { animation: sl-spur-p linear both; animation-timeline: --sl-spur; animation-range: contain 0% contain 100%; }
  }
}
@keyframes sl-spur-x { from { transform: translateX(0); } to { transform: translateX(var(--sl-spur-dx, 0px)); } }
@keyframes sl-spur-p { from { transform: scaleX(.111); } to { transform: scaleX(1); } }

/* ---- V3 · Seitwärts 2: Einlauf von den Seiten --------------------------
   Quelle: Skiper UI (Abschnittsübergänge mit Versatz, INSPO §5) + Framer (Sticky-
   Szenen, Bewegung erzählt) + Godly 8.4 → übernommen: Text-Spalte und Bild-Spalte
   laufen gegenläufig ein (±72 px, 600 ms, --ease-drift). Grundzustand sichtbar
   (K6-1: opacity bleibt 1, nur translate), Start erst mit .is-ein (eigener
   IntersectionObserver, −12 % unten → der Einlauf ist im Bild zu sehen). */
@media (prefers-reduced-motion: no-preference) {
  .sl-von-links.w13-rv.is-in, .sl-von-rechts.w13-rv.is-in { animation: none; }
  .sl-von-links.w13-rv.is-ein { animation: sl-ein-l 600ms var(--ease-drift) both; }
  .sl-von-rechts.w13-rv.is-ein { animation: sl-ein-r 600ms var(--ease-drift) both; }
  .w13-stat.sl-von-links.is-ein:nth-child(2) { animation-delay: 60ms; }
  .w13-stat.sl-von-links.is-ein:nth-child(3) { animation-delay: 120ms; }
  .w13-stat.sl-von-links.is-ein:nth-child(4) { animation-delay: 180ms; }
}
@keyframes sl-ein-l { from { translate: -72px 0; } }
@keyframes sl-ein-r { from { translate: 72px 0; } }

/* ---- V4 · Seitwärts 3: Typo-Laufband -----------------------------------
   Quelle: Godly 8.1/8.3 (Typo trägt, Laufband in Sektionsbreite) + Magic UI
   marquee.tsx:46–71 → Display-Größe, Serif-Kursiv/Grotesk im Wechsel, jedes
   zweite Glied Kontur, 80 s, nur im Bild. Überragt beide Kanten (V6). */
.sl-typo {
  position: relative; z-index: 2; margin-block: calc(-1 * var(--space-3)); padding-block: var(--space-2);
  contain: paint; pointer-events: none;
}
/* Kanten-Auslauf als zwei Verlaufs-Deckel statt mask-image: eine Maske über der laufenden Reihe erzwingt je Frame einen eigenen
   Render-Durchgang (Ruckel-Probe) */
.sl-typo::before, .sl-typo::after { content: ""; position: absolute; z-index: 1; top: 0; bottom: 0; width: 10%; pointer-events: none; }
.sl-typo::before { left: 0; background: linear-gradient(90deg, var(--bg), transparent); }
.sl-typo::after { right: 0; background: linear-gradient(270deg, var(--bg), transparent); }
.sl-typo__spur { display: flex; }
.sl-typo__reihe {
  display: flex; flex-wrap: wrap; align-items: baseline; column-gap: var(--space-3); box-sizing: border-box;
  padding-inline: var(--gutter);
}
.sl-typo__kopie { display: none; }
.sl-typo__g, .sl-typo__p { font-size: var(--fs-display); line-height: 1.12; letter-spacing: -.02em; white-space: nowrap; }
.sl-typo__g--serif { font-family: var(--font-serif); font-style: italic; font-weight: 500; color: var(--ink-3); }
.sl-typo__g--kontur { font-family: var(--font-sans); font-weight: 600; color: transparent; -webkit-text-stroke: 1.5px var(--ink-3); }
.sl-typo__p { font-family: var(--font-serif); color: var(--accent); }
@media (prefers-reduced-motion: no-preference) {
  .sl-typo__spur { width: max-content; animation: sl-typo 120s linear infinite; /* W34 START-5: 6 statt 4 Begriffe → 120 s, Tempo wie vorher */ animation-play-state: paused; }
  .sl-typo.is-sicht .sl-typo__spur { animation-play-state: running; }
  .sl-typo__reihe { flex-wrap: nowrap; padding-inline: 0 var(--space-3); }
  .sl-typo__kopie { display: flex; }
}
@keyframes sl-typo { to { transform: translateX(-50%); } }

/* ---- V5 · Layering 1: Sticky-Kartenstapel (Ablauf) ---------------------
   Quelle: Aceternity UI Card Stack (Muster) + alte lyr-stack
   (index_vorW13.html:694–700: „verdeckte Szene scale(.9) … brightness(.55)“) +
   web/lab/layering (lab-stack: sticky Szenen, --cv) + Skiper Stufen-Karte →
   übernommen: jede Karte klebt 24 px tiefer als die vorige, die nächste legt
   sich darüber, die verdeckte schrumpft auf .94 und dunkelt auf .72 — per
   animation-timeline der NÄCHSTEN Karte (timeline-scope), Fallback JS.
   Godly 8.7 → übernommen: große Kapitelziffer als Kontur im Kartengrund. */
@media (min-width: 1168px) and (prefers-reduced-motion: no-preference) {
  .w13-flow .w13-steps { gap: calc(var(--space-6) * 3); timeline-scope: --sl-k2, --sl-k3, --sl-k4, --sl-k5; }
  .w13-flow .w13-step {
    position: sticky; top: calc(80px + var(--space-3) + var(--sl-k, 0) * 24px); min-height: 232px; box-sizing: border-box;
    grid-template-columns: minmax(0, 1fr); align-content: center; padding: var(--space-5) var(--space-6) var(--space-5) var(--space-6);
    background: linear-gradient(160deg, var(--lyr-l3), var(--lyr-l2) 60%); border-color: var(--line-2);
    box-shadow: var(--lyr-e4), 0 -12px 40px -16px rgba(0,0,0,.7); transform-origin: 50% 0; isolation: isolate; will-change: transform;
  }
  .w13-flow .w13-step:nth-child(2) { --sl-k: 1; view-timeline: --sl-k2 block; }
  .w13-flow .w13-step:nth-child(3) { --sl-k: 2; view-timeline: --sl-k3 block; }
  .w13-flow .w13-step:nth-child(4) { --sl-k: 3; view-timeline: --sl-k4 block; }
  .w13-flow .w13-step:nth-child(5) { --sl-k: 4; view-timeline: --sl-k5 block; }
  .w13-flow .w13-step > :not(.w13-step__n):not(.w13-step__chips), .w13-flow .w13-step__chips { grid-column: 1; }
  .w13-flow .w13-step__chips { grid-row: auto; justify-content: flex-start; padding-top: var(--space-1); }
  .w13-flow .w13-step__n { top: 0; left: var(--space-6); translate: 0 -50%; box-shadow: var(--lyr-e4); }
  .w13-flow .w13-step h3 { font-size: var(--fs-h3); }
  .w13-flow .w13-step::before {
    content: attr(data-n) / ""; position: absolute; z-index: -1; right: var(--space-4); bottom: 0; pointer-events: none;
    font-family: var(--font-mono); font-size: var(--fs-numeral); line-height: 1; font-weight: 600; letter-spacing: -.04em;
    color: transparent; -webkit-text-stroke: 1px var(--line-3);
  }
  .w13-flow .w13-step.is-aktiv { background: linear-gradient(160deg, color-mix(in srgb, var(--accent) 14%, var(--lyr-l3)), var(--lyr-l2) 60%); }
  /* Tracing Beam bleibt links — jetzt in der Fuge neben dem Stapel */
  .w13-flow .sl-linie-v { left: calc(-1 * var(--space-4)); top: 0; }
}
@supports (animation-timeline: view()) and (timeline-scope: none) {
  @media (min-width: 1168px) and (prefers-reduced-motion: no-preference) {
    .w13-flow.is-sicht .w13-step:nth-child(1) { animation: sl-deck linear both; animation-timeline: --sl-k2; animation-range: cover 0% cover calc(100vh - 128px); }
    .w13-flow.is-sicht .w13-step:nth-child(2) { animation: sl-deck linear both; animation-timeline: --sl-k3; animation-range: cover 0% cover calc(100vh - 152px); }
    .w13-flow.is-sicht .w13-step:nth-child(3) { animation: sl-deck linear both; animation-timeline: --sl-k4; animation-range: cover 0% cover calc(100vh - 176px); }
    .w13-flow.is-sicht .w13-step:nth-child(4) { animation: sl-deck linear both; animation-timeline: --sl-k5; animation-range: cover 0% cover calc(100vh - 200px); }
  }
}
/* Abdunkeln auf .72 per Deckschicht (::after, --bg, Deckkraft 0 → .28) statt opacity am Element: mit Deckkraft .72 schien die
   darunterliegende Karte durch (Zwischenshot zw_b_2); filter: brightness() wäre je Frame neu gerastert (Ruckel-Probe). */
@keyframes sl-deck { from { scale: 1; } to { scale: .94; } }
@keyframes sl-deck-dunkel { from { opacity: 0; } to { opacity: .28; } }
@media (min-width: 1168px) and (prefers-reduced-motion: no-preference) {
  .w13-flow .w13-step::after { content: ""; position: absolute; inset: -1px; z-index: 2; border-radius: inherit; background: var(--bg); opacity: var(--sl-dunkel, 0); pointer-events: none; will-change: opacity; }
}
@supports (animation-timeline: view()) and (timeline-scope: none) {
  @media (min-width: 1168px) and (prefers-reduced-motion: no-preference) {
    .w13-flow.is-sicht .w13-step:nth-child(1)::after { animation: sl-deck-dunkel linear both; animation-timeline: --sl-k2; animation-range: cover 0% cover calc(100vh - 128px); }
    .w13-flow.is-sicht .w13-step:nth-child(2)::after { animation: sl-deck-dunkel linear both; animation-timeline: --sl-k3; animation-range: cover 0% cover calc(100vh - 152px); }
    .w13-flow.is-sicht .w13-step:nth-child(3)::after { animation: sl-deck-dunkel linear both; animation-timeline: --sl-k4; animation-range: cover 0% cover calc(100vh - 176px); }
    .w13-flow.is-sicht .w13-step:nth-child(4)::after { animation: sl-deck-dunkel linear both; animation-timeline: --sl-k5; animation-range: cover 0% cover calc(100vh - 200px); }
  }
}

/* ---- V6 · Layering 2: Überlappung in jeder Sektion ----------------------
   Hero: Fensterstapel (inline) · Laufband: Platte über der Hero-Kante (inline) ·
   Spur: Nummern-Badges über der Kartenkante (oben) · Server: Schritt-Pillen als
   Glasleiste über der Bild-Oberkante, Ripple hinter der Kante · Typo: überragt
   beide Kanten · Ablauf: Stapel + Nummern · Baukasten: Etikett über der
   Orbit-Platte · Region: schwebende Legende auf dem Luftbild · Abschluss:
   Eyebrow als Badge über der Kartenkante.
   Quelle: Stripe (Karten mit Randlicht) + Linear (Glas, Raster) + Manus (Halo). */
@media (min-width: 901px) {
  .sl-server__rig { padding-top: var(--space-3); }
  .sl-server__rig > .sl-pillen {
    position: absolute; z-index: 3; top: 0; left: 50%; translate: -50% 0; width: max-content; max-width: calc(100% - var(--space-4));
    padding: var(--space-1); border: 1px solid var(--line-2); border-radius: var(--r-pill);
    background: color-mix(in srgb, var(--lyr-l1) 90%, transparent); /* kein backdrop-filter: darunter zeichnet die Montage-Canvas je Scroll-Frame neu */
    box-shadow: var(--lyr-e4), 0 12px 32px -12px rgba(0,0,0,.8); pointer-events: none;
  }
  .sl-server__rig > .sl-pillen { flex-wrap: nowrap; gap: var(--space-0); }
  .sl-server__rig > .sl-pillen > * { min-height: 28px; padding: 0 var(--space-1); font-size: var(--fs-caption); white-space: nowrap; }
  .sl-server__rig > .sl-pillen::after { left: var(--space-3); right: var(--space-3); width: auto; transform-origin: 0 50%; transform: scaleX(var(--sl-bau, 0)); bottom: 0; }
}
/* Baukasten: Orbit als Platte, Etikett schwebt über der Oberkante */
.sl-orbit {
  margin-top: var(--space-5); padding: var(--space-5) var(--space-3) var(--space-3); border: 1px solid var(--line-2); border-radius: var(--r-5);
  background: radial-gradient(60% 80% at 50% 50%, color-mix(in srgb, var(--accent) 10%, var(--lyr-l1)), var(--lyr-l1) 70%);
  box-shadow: var(--lyr-e3);
}
.sl-orbit__etikett {
  position: absolute; z-index: 2; top: 0; left: var(--space-3); translate: 0 -50%; margin: 0; white-space: nowrap;
  padding: var(--space-0) var(--space-1-5); border: 1px solid color-mix(in srgb, var(--accent) 55%, transparent); border-radius: var(--r-pill);
  background: color-mix(in srgb, var(--accent) 20%, var(--lyr-l2)); box-shadow: var(--lyr-e4);
  font-family: var(--font-mono); font-size: var(--fs-small); letter-spacing: .08em; text-transform: uppercase; color: var(--ink); line-height: 1.4;
}
.sl-orbit .sl-orbit__chips { margin-top: 0; }
@media (min-width: 1380px) and (prefers-reduced-motion: no-preference) {
  .sl-orbit { height: 440px; box-sizing: border-box; margin-top: var(--space-5); }
}
@media (max-width: 1379px), (prefers-reduced-motion: reduce) {
  .sl-orbit__kern { display: flex; align-items: center; justify-content: center; width: fit-content; margin: 0 auto var(--space-2); padding: var(--space-1) var(--space-3);
    border: 1px solid color-mix(in srgb, var(--accent) 50%, transparent); border-radius: var(--r-pill);
    background: radial-gradient(circle, color-mix(in srgb, var(--accent) 26%, var(--lyr-l1)), var(--lyr-l1) 72%);
    font-family: var(--font-serif); font-size: var(--fs-lede); line-height: 1.2; color: var(--ink); }
  .sl-orbit .sl-orbit__chips { justify-content: center; }
}
/* Region: Legende schwebt auf der unteren linken Bildecke und überragt den Bildrand (nur zweispaltig) */
@media (min-width: 961px) {
  .w13-region__karte { position: relative; container-type: inline-size; }
  .w13-region__karte > .luft-legend {
    position: absolute; z-index: 5; left: calc(-1 * var(--space-3)); top: calc((100cqw - 2px) * .65 - var(--space-2)); translate: 0 -100%;
    flex-direction: column; gap: var(--space-0); margin: 0; padding: var(--space-1-5) var(--space-2); width: max-content; max-width: 60%;
    border: 1px solid var(--line-2); border-radius: var(--r-4);
    background: color-mix(in srgb, var(--lyr-l1) 70%, transparent); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
    box-shadow: var(--lyr-e4), 0 16px 40px -16px rgba(0,0,0,.85);
  }
}
/* Abschluss: Eyebrow als Badge über der Kartenkante */
.sl-abschluss > .ds-eyebrow {
  position: absolute; z-index: 2; top: 0; left: 50%; translate: -50% -50%; margin: 0; white-space: nowrap;
  padding: var(--space-1) var(--space-2); border: 1px solid color-mix(in srgb, var(--accent) 55%, transparent); border-radius: var(--r-pill);
  background: color-mix(in srgb, var(--accent) 18%, var(--lyr-l2)); box-shadow: var(--lyr-e4);
}
/* Tiefe per Parallax-Faktor (Ebenentabelle oben), nur im Bild */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .sl-server__rig.is-sicht > .sl-blob-rig { animation: sl-form-05 linear both; animation-timeline: view(); animation-range: cover; }
  }
  @media (min-width: 961px) and (prefers-reduced-motion: no-preference) {
    .w13-region.is-sicht .w13-region__karte > .luft-legend { animation: sl-schwebt-12 linear both; animation-timeline: view(); animation-range: cover; }
  }
}
@keyframes sl-form-05 { from { translate: 0 -24px; } to { translate: 0 24px; } }
@keyframes sl-schwebt-12 { from { translate: 0 calc(-100% + 12px); } to { translate: 0 calc(-100% - 12px); } }

/* ======================================================================
   W34 START-4 (29.09.2026) · N2 Hintergrund-Tiefe + N3 weitere Inspo-Animationen
   Jede Bewegung: Zweck · Auslöser · Dauer/Kurve (tokens.css) · Reduced Motion · Pause (> 5 s).
   ====================================================================== */
/* ---- N2 · drei Ebenen je Sektion (Liefert, Server, Ablauf, Baukasten, Region, Abschluss; der Hero hat seine drei Ebenen seit START-3).
   Zweck: Tiefe. Auslöser: Scrollen (animation-timeline: view(), nur solange die Sektion im Bild ist = .is-sicht).
   Hub je Ebene = Faktor × 80 px über die ganze Durchfahrt: fern 0,15 (±12 px, langsamer), mittel 0,4 (±32 px, langsamer),
   nah 0,7 (∓56 px, schneller als der Inhalt). Ohne Unterstützung/Reduced Motion: dieselben Ebenen statisch.
   Quellen: Haikei Blob (fern, eigenes SVG), Magic UI dot-pattern.tsx / Kreise (mittel), Glas-Splitter + Lichtbahn (nah);
   Tiefenschärfe: SVG-Filter #sl-dof (feGaussianBlur 10) nur auf dem kleinen Blob, kein CSS-blur auf Flächen. */
.sl-tiefe-defs { position: absolute; width: 0; height: 0; }
.sl-tiefe { position: absolute; inset: 0; z-index: 0; pointer-events: none; contain: paint; }
.sl-tiefe .sl-t { position: absolute; inset: -64px 0; }
.sl-t-fern svg { position: absolute; width: min(48vw, 640px); height: min(48vw, 640px); top: var(--sl-fy, 12%); left: var(--sl-fx, 62%);
  fill: color-mix(in srgb, var(--accent) 16%, transparent); filter: url(#sl-dof); }
.sl-t-mittel { background-image: radial-gradient(color-mix(in srgb, var(--ink) 16%, transparent) 1px, transparent 1.6px); background-size: 24px 24px;
  -webkit-mask-image: radial-gradient(ellipse 55% 45% at var(--sl-mx0, 28%) var(--sl-my0, 40%), #000 15%, transparent 70%);
  mask-image: radial-gradient(ellipse 55% 45% at var(--sl-mx0, 28%) var(--sl-my0, 40%), #000 15%, transparent 70%); }
.sl-tiefe--module .sl-t-mittel, .sl-tiefe--region .sl-t-mittel { background-image: repeating-radial-gradient(circle at var(--sl-mx0) var(--sl-my0), transparent 0 63px, color-mix(in srgb, var(--ink) 9%, transparent) 63px 64px); background-size: auto; }
.sl-t-nah i { position: absolute; display: block; }
.sl-t-nah i:first-child { left: var(--sl-n1x, 8%); top: var(--sl-n1y, 22%); width: 128px; height: 72px; rotate: -12deg; border-radius: var(--r-3);
  background: linear-gradient(135deg, rgba(255,255,255,.07), rgba(255,255,255,.01) 60%); box-shadow: inset 0 0 0 1px var(--line-2), 0 24px 48px -24px rgba(0,0,0,.6); }
.sl-t-nah i:last-child { left: var(--sl-n2x, 84%); top: var(--sl-n2y, 58%); width: 1px; height: 240px; rotate: 24deg;
  background: linear-gradient(transparent, color-mix(in srgb, var(--accent-small) 55%, transparent), transparent); }
/* Vignette an den Rändern + „Progressive Blur“ an der Unterkante als Masken-/Verlaufsvariante (backdrop-filter über laufendem Inhalt
   kostet je Frame Paint, INSPO §11 S2 „Maske reicht“) */
.sl-tiefe::before { content: ""; position: absolute; inset: auto 0 0 0; height: 96px; background: linear-gradient(transparent, color-mix(in srgb, var(--bg) 55%, transparent)); }
.sl-tiefe::after { content: ""; position: absolute; inset: 0; background: radial-gradient(ellipse 130% 95% at 50% 50%, transparent 60%, color-mix(in srgb, var(--bg) 60%, transparent) 100%); }
.sl-tiefe--liefert { --sl-fx: 58%; --sl-fy: 8%; --sl-mx0: 24%; --sl-my0: 30%; --sl-n1x: 6%; --sl-n1y: 12%; --sl-n2x: 90%; --sl-n2y: 30%; }
.sl-tiefe--server  { --sl-fx: -8%; --sl-fy: 30%; --sl-mx0: 70%; --sl-my0: 60%; --sl-n1x: 88%; --sl-n1y: 10%; --sl-n2x: 6%; --sl-n2y: 64%; }
.sl-tiefe--ablauf  { --sl-fx: 66%; --sl-fy: 40%; --sl-mx0: 20%; --sl-my0: 30%; --sl-n1x: 4%; --sl-n1y: 70%; --sl-n2x: 92%; --sl-n2y: 12%; }
.sl-tiefe--module  { --sl-fx: -12%; --sl-fy: 6%; --sl-mx0: 80%; --sl-my0: 40%; --sl-n1x: 90%; --sl-n1y: 66%; --sl-n2x: 10%; --sl-n2y: 20%; }
.sl-tiefe--region  { --sl-fx: 64%; --sl-fy: 20%; --sl-mx0: 66%; --sl-my0: 55%; --sl-n1x: 4%; --sl-n1y: 8%; --sl-n2x: 94%; --sl-n2y: 60%; }
.sl-tiefe--close   { --sl-fx: 24%; --sl-fy: 30%; --sl-mx0: 50%; --sl-my0: 50%; --sl-n1x: 8%; --sl-n1y: 60%; --sl-n2x: 88%; --sl-n2y: 14%; }
@media (max-width: 600px) { .sl-t-nah i:first-child { width: 88px; height: 48px; } .sl-t-fern svg { width: 72vw; height: 72vw; } }
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .is-sicht > .sl-tiefe > .sl-t-fern   { animation: sl-t-015 linear both; animation-timeline: view(); animation-range: cover; }
    .is-sicht > .sl-tiefe > .sl-t-mittel { animation: sl-t-04 linear both; animation-timeline: view(); animation-range: cover; }
    .is-sicht > .sl-tiefe > .sl-t-nah    { animation: sl-t-07 linear both; animation-timeline: view(); animation-range: cover; }
  }
}
@keyframes sl-t-015 { from { translate: 0 -12px; } to { translate: 0 12px; } }
@keyframes sl-t-04  { from { translate: 0 -32px; } to { translate: 0 32px; } }
@keyframes sl-t-07  { from { translate: 0 56px; } to { translate: 0 -56px; } }

/* ---- N2 · EIN Akzent: Beams with Collision (Aceternity UI, Muster) nur im Ablauf. Zweck: Blickführung zur Schrittfolge.
   Auslöser: Sektion im Bild. 2 Strahlen, 7 s / 9,5 s linear, Aufprall an der Unterkante als Ring (scale .6 → 1,8, opacity 1 → 0).
   Reduced Motion: nicht vorhanden. Pause: stoppt außerhalb des Bildes und bei Hover/Fokus in der Sektion (ESCALATE: globaler Knopf). */
.sl-beams { position: absolute; inset: auto 0 0 0; height: 360px; display: none; }
.sl-beams i { position: absolute; top: 0; width: 1px; height: 72px; background: linear-gradient(transparent, var(--accent-small)); }
.sl-beams i:first-child { left: 14%; } .sl-beams i:last-child { left: 86%; }
.sl-beams i::after { content: ""; position: absolute; left: -12px; bottom: -12px; width: 24px; height: 24px; border-radius: 50%; box-shadow: 0 0 0 1px var(--accent-small), 0 0 16px color-mix(in srgb, var(--accent-small) 60%, transparent); opacity: 0; }
@media (prefers-reduced-motion: no-preference) and (min-width: 901px) {
  .w13-flow.is-sicht .sl-beams { display: block; }
  .w13-flow.is-sicht .sl-beams i { animation: sl-beam 7s linear infinite; }
  .w13-flow.is-sicht .sl-beams i::after { animation: sl-aufprall 7s linear infinite; }
  .w13-flow.is-sicht .sl-beams i:last-child, .w13-flow.is-sicht .sl-beams i:last-child::after { animation-duration: 9.5s; animation-delay: -3s; }
  .w13-flow:is(:hover, :focus-within) .sl-beams i, .w13-flow:is(:hover, :focus-within) .sl-beams i::after { animation-play-state: paused; }
}
@keyframes sl-beam { 0% { transform: translateY(-72px); opacity: 0; } 6% { opacity: 1; } 84% { transform: translateY(288px); opacity: 1; } 86%, 100% { transform: translateY(288px); opacity: 0; } }
@keyframes sl-aufprall { 0%, 83% { opacity: 0; transform: scale(.6); } 85% { opacity: 1; } 96%, 100% { opacity: 0; transform: scale(1.8); } }

/* ---- N3-1 · Magic UI text-animate.tsx (Muster „zeichenweise einblenden“) als Masken-Wisch: Eyebrows ab Sektion 2 erscheinen einmal
   von links nach rechts. Der Textknoten bleibt ganz (kein Zerlegen in Buchstaben, Vorlesen unverändert). Auslöser: erstes Sichtbarwerden
   (start-layering.js setzt .sl-ta-bereit, dann .is-ta). 900 ms --ease-drift. Reduced Motion / ohne JS: sofort sichtbar. */
@media (prefers-reduced-motion: no-preference) {
  .sl-ta-bereit { -webkit-mask-image: linear-gradient(90deg, #000 40%, transparent 60%); mask-image: linear-gradient(90deg, #000 40%, transparent 60%);
    -webkit-mask-size: 250% 100%; mask-size: 250% 100%; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: 100% 0; mask-position: 100% 0; }
  .sl-ta-bereit.is-ta { animation: sl-ta 900ms var(--ease-drift) forwards; }
}
@keyframes sl-ta { to { -webkit-mask-position: 0 0; mask-position: 0 0; } }

/* ---- N3-2 (Textmarker unter der Startseiten-H1) entfernt in W35 A1: einzige H1-Hervorhebung ist <em> blau kursiv (styles.css H1-REZEPT). */

/* ---- N3-3 · Skiper UI Wrap-Button (Muster): „Alle Module ansehen“ — beim Hover rückt der Text nach links, ein Pfeil-Kreis läuft
   rechts ein. Breite/Höhe unverändert (Innenabstand 24|24 → 16|32, Text rückt 8 px). 250 ms --ease-drift, nur hover:hover; Fokus zeigt denselben Zustand. */
.w13-btn.sl-wrap { position: relative; transition: padding var(--dur-pop) var(--ease-drift), background 200ms ease, border-color 200ms ease, color 200ms ease; }
.sl-wrap::after { content: "→" / ""; position: absolute; right: 4px; top: 50%; width: 24px; height: 24px; border-radius: 50%;
  display: grid; place-items: center; background: currentColor; color: var(--cta-bg); font-size: var(--fs-small); line-height: 1;
  opacity: 0; transform: translate(-8px, -50%); transition: opacity var(--dur-tap) ease-out, transform var(--dur-pop) var(--ease-drift); }
.w13-btn.sl-wrap:focus-visible { padding-inline: 16px 32px; }
.sl-wrap:focus-visible::after { opacity: 1; transform: translate(0, -50%); }
@media (hover: hover) {
  .w13-btn.sl-wrap:hover { padding-inline: 16px 32px; }
  .sl-wrap:hover::after { opacity: 1; transform: translate(0, -50%); }
}

/* ---- N3-4 · Stripe-Mesh (Muster stripe.com) im Abschluss: drei weiche Farbfelder driften 30 s hin und zurück (transform, kein Repaint).
   Nur im Bild, pausiert bei Hover/Fokus in der Sektion. Reduced Motion: steht. */
.sl-mesh { position: absolute; inset: -20%; opacity: .9;
  background: radial-gradient(38% 46% at 22% 32%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 70%),
              radial-gradient(34% 42% at 78% 58%, color-mix(in srgb, var(--accent-2) 12%, transparent), transparent 70%),
              radial-gradient(30% 38% at 50% 92%, color-mix(in srgb, var(--accent-small) 10%, transparent), transparent 70%); }
@media (prefers-reduced-motion: no-preference) {
  .w13-close.is-sicht .sl-mesh { animation: sl-mesh 30s ease-in-out infinite alternate; }
  .w13-close:is(:hover, :focus-within) .sl-mesh { animation-play-state: paused; }
}
@keyframes sl-mesh { 0% { transform: translate(-4%, -2%) rotate(0deg) scale(1); } 50% { transform: translate(3%, 2%) rotate(8deg) scale(1.06); } 100% { transform: translate(-2%, 4%) rotate(-6deg) scale(1.02); } }

/* ---- N3-5 · Ken-Burns-Fahrt auf dem Luftbild: scale 1 → 1,06 über 40 s linear, einmal; Bild, Ring und Pins skalieren gemeinsam (.lr-kb),
   deshalb bleiben die Orte deckungsgleich. Läuft nur im Bild, hält bei Hover/Fokus. Reduced Motion: steht. */
.lr-kb { position: relative; transform-origin: 40% 50%; }
@media (prefers-reduced-motion: no-preference) {
  .luft-region .lr-kb { animation: sl-kb 40s linear both paused; }
  .luft-region.is-sicht .lr-kb { animation-play-state: running; }
  .luft-region.is-sicht:is(:hover, :focus-within) .lr-kb { animation-play-state: paused; }
}
@keyframes sl-kb { from { transform: scale(1); } to { transform: scale(1.06); } }

/* ---- N3-6 · Magic UI lens.tsx (Muster): Vergrößerungslinse (1,8×) über dem Server-Rig, nur Maus (hover:hover, pointer:fine), start-layering.js.
   Ein-/Ausblenden 150 ms ease-out, Position folgt direkt dem Zeiger. Reduced Motion: keine Linse. */
.sl-lens { position: absolute; left: 0; top: 0; width: 160px; height: 160px; border-radius: 50%; pointer-events: none; z-index: 4; opacity: 0;
  clip-path: circle(50%); box-shadow: inset 0 0 0 1px var(--line-3); transition: opacity var(--dur-tap) ease-out; }
.sl-lens canvas { display: block; width: 100%; height: 100%; }
.sl-lens.on { opacity: 1; }

/* ---- N3-7 · Magic UI pointer.tsx / smooth-cursor.tsx (Muster): weicher Begleitkreis über den Karten der Spur, nur Maus.
   Der System-Zeiger bleibt sichtbar (Bedienbarkeit). Nachlauf per Interpolation 0,22 je Frame, stoppt, sobald er sitzt. */
.sl-zeiger { position: fixed; left: 0; top: 0; width: 32px; height: 32px; border-radius: 50%; pointer-events: none; z-index: 15; opacity: 0;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent-small) 80%, transparent); background: color-mix(in srgb, var(--accent) 10%, transparent);
  transition: opacity var(--dur-tap) ease-out; }
.sl-zeiger.on { opacity: 1; }
/* N3-8 · Aceternity Glowing Effect auf den Zahlen-Karten: vorhandene Klasse .sl-mc (Magic Card, oben) zusätzlich an den vier .w13-stat. */
