/* ==================================================================
   SCHRIFT - lokal ausgeliefert
   Roboto Serif lag bisher als Google-Fonts-Link im <head>. Damit ging
   bei jedem Seitenaufruf die IP des Besuchers an Google - was der
   Datenschutzerklaerung widersprach, die lokale Auslieferung zusagt.
   Die Dateien liegen jetzt in assets/fonts/ (SIL Open Font License,
   Lizenztext liegt daneben).

   Variante "wght": voller Gewichtsbereich 100-900 bei 120 KB fuer
   latin + latin-ext. Die Achse "opsz" der Google-Fassung entfaellt -
   sie haette allein fuer optische Feinabstimmung die Dateigroesse
   verachtfacht. Kursive Schnitte werden nicht geladen, die Seite
   nutzt keine.

   unicode-range sorgt dafuer, dass latin-ext nur geladen wird, wenn
   ein Zeichen daraus tatsaechlich vorkommt.
   ================================================================== */
@font-face{
  font-family:"Roboto Serif";
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
  src:url(assets/fonts/roboto-serif-latin-wght-normal.woff2) format("woff2-variations");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"Roboto Serif";
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
  src:url(assets/fonts/roboto-serif-latin-ext-wght-normal.woff2) format("woff2-variations");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* ==================================================================
   FARBSYSTEM
   Alle Farben laufen ueber Tokens. :root traegt die dunkle Fassung
   (Markenzustand, Standard), [data-theme="light"] weiter unten
   ueberschreibt nur die Werte - keine Regel wird dort dupliziert.

   Zwei Tokens brauchen Erklaerung:

   --bg-rgb / --scrim-rgb  Kanaele ohne rgb(), damit sich in Verlaeufen
     rgba(var(--bg-rgb),.94) schreiben laesst. --scrim bleibt in beiden
     Themes dunkel: die Verlaufe liegen ueber Bild- und Videoflaechen,
     die bewusst dunkel bleiben.

   Bild- und Videopanels behalten im hellen Theme ihre dunkle
   Token-Umgebung (siehe "Dunkle Inseln" weiter unten). Dadurch
   funktionieren Verlaeufe, heller Text und Chips darin unveraendert,
   ohne dass eine einzige Regel doppelt gepflegt werden muss.
   ================================================================== */
:root{
  color-scheme:dark;
  --bg:#07090a;
  --bg-rgb:7,9,10;
  --bg-2:#0b0e10;
  --panel:#101417;
  --panel-2:#151a1d;
  --text:#f2f4f3;
  --lead:#d4dcde;
  --muted:#b4bec1;
  --quiet:#7f8a8e;
  --line:rgba(229,239,241,.13);
  --line-strong:rgba(229,239,241,.24);
  --cyan:#35d4ef;
  --cyan-soft:rgba(53,212,239,.13);
  --cyan-line:rgba(53,212,239,.45);
  --cyan-glow:rgba(53,212,239,.16);
  --cyan-tap:rgba(53,212,239,.18);
  --on-cyan:#041013;
  --mint:#9ce2c3;
  --mint-glow:rgba(156,226,195,.65);
  --danger:#efb8a8;

  /* Flaechen */
  --grid-line:rgba(255,255,255,.018);
  --nav-bg:rgba(7,9,10,.78);
  --nav-panel-bg:rgba(7,9,10,.97);
  --atlas-bg:linear-gradient(180deg,#080a0b,#0b0f11 45%,#080a0b);
  --surface-soft:rgba(9,12,14,.62);
  --surface-active:rgba(14,25,28,.88);
  --surface-quiet:rgba(7,9,10,.5);
  --detail-bg:rgba(7,9,10,.75);
  --detail-text:#d7dddf;
  --input-bg:#0c1012;
  /* Hinweisplakette der gesperrten Eintragung, siehe .optin-lock */
  --optin-lock-bg:rgba(10,14,16,.93);
  --optin-lock-ring:rgba(53,212,239,.14);
  --control-bg:rgba(10,14,16,.6);
  --chip-bg:rgba(6,8,9,.8);

  /* Medienflaechen: bleiben in beiden Themes dunkel */
  --media-bg:#080b0d;
  --media-bg-2:#060809;
  --media-bg-3:#090c0e;
  --hero-scrim-rgb:7,9,10;
  --scrim-rgb:7,9,10;
  --scrim-deep-rgb:5,8,9;
  --scrim-atlas-rgb:6,8,9;
  --media-filter:saturate(.74) brightness(.54);
  --media-filter-strong:saturate(.7) brightness(.46);
  --media-filter-soft:saturate(.7) brightness(.5);
  --hero-video-filter:saturate(.78) brightness(.68);
  --media-filter-bundle:saturate(.72) brightness(.7);
  --route-glow:rgba(53,212,239,.6);
  --route-track:rgba(255,255,255,.14);
  --route-ring:rgba(255,255,255,.28);
  --logo-shadow:rgba(0,0,0,.72);

  /* Das dimensionale M im Hero. Die Verlaufsstopps stehen im SVG als
     var() - sonst waere das helle Metall auf hellem Grund unsichtbar. */
  --logo-face-1:#ced2d6;
  --logo-face-2:#e3e6e9;
  --logo-face-3:#f1f4f6;
  --logo-face-4:#fafcfd;
  --logo-edge-1:#6f7478;
  --logo-edge-2:#a2a7ab;
  --logo-accent-1:#76e6ff;
  --logo-accent-2:#45cbf0;
  --logo-accent-3:#0fa3d9;
  --logo-accent-edge-1:#0d6685;
  --logo-accent-edge-2:#1d8fb4;

  --wrap:min(80rem,calc(100% - 2.5rem));
  --display:"Roboto Serif",Georgia,"Times New Roman",serif;
  --body:"Roboto Serif",Georgia,"Times New Roman",serif;
  --mono:"Roboto Serif",Georgia,"Times New Roman",serif;
}

/* ==================================================================
   HELLE FASSUNG
   Nur Token-Werte, keine dupliziertem Regeln. Der Grundton ist ein
   warmes Off-White statt reinem Weiss - die Roboto Serif steht darauf
   ruhiger, und die dunklen Medienpanels wirken weniger wie Loecher.

   Der Akzent wandert von #35d4ef auf ein dunkles Teal. Das Cyan des
   dunklen Themes hat auf hellem Grund nur rund 1,7:1 und waere als
   Textfarbe (Eyebrows, Links, Route-Label) unlesbar.
   ================================================================== */
[data-theme="light"]{
  color-scheme:light;
  --bg:#f6f6f3;
  --bg-rgb:246,246,243;
  --bg-2:#efefea;
  --panel:#ffffff;
  --panel-2:#f2f2ee;
  --text:#12171a;
  --lead:#39434a;
  /* Eine Stufe kraeftiger als der direkte Gegenpart zum dunklen Theme.
     Auf dem hellen Grund wirkten die gedaempften Toene zu zurueckhaltend;
     --muted steigt damit von 6,95:1 auf 8,95:1, --quiet von 4,82:1
     auf 6,65:1. */
  --muted:#3c464b;
  --quiet:#4f595e;
  --line:rgba(18,23,26,.14);
  --line-strong:rgba(18,23,26,.28);
  --cyan:#0a6f83;
  --cyan-soft:rgba(10,111,131,.10);
  --cyan-line:rgba(10,111,131,.42);
  --cyan-glow:rgba(10,111,131,.18);
  --cyan-tap:rgba(10,111,131,.14);
  --on-cyan:#ffffff;
  --mint:#1d7a56;
  --mint-glow:rgba(29,122,86,.32);
  --danger:#a63a1d;

  --grid-line:rgba(18,23,26,.035);
  /* .82 liess auf hellem Grund zu viel durchscheinen - die Leiste stand
     unruhig ueber dem Inhalt. Der Backdrop-Blur bleibt erhalten. */
  --nav-bg:rgba(246,246,243,.93);
  --nav-panel-bg:rgba(246,246,243,.98);
  --atlas-bg:linear-gradient(180deg,#f1f1ec,#f8f8f5 45%,#f1f1ec);
  --surface-soft:rgba(255,255,255,.72);
  --surface-active:#ffffff;
  --surface-quiet:rgba(255,255,255,.62);
  --detail-bg:rgba(255,255,255,.82);
  --detail-text:#2b3438;
  --input-bg:#ffffff;
  --optin-lock-bg:rgba(255,255,255,.95);
  --optin-lock-ring:rgba(10,111,131,.16);
  --control-bg:rgba(255,255,255,.7);

  /* Der Hero-Verlauf blendet in die Seitenfarbe aus, nicht in den
     dunklen Medien-Scrim - sonst entsteht ein grauer Schleier. */
  --hero-scrim-rgb:246,246,243;
  --logo-shadow:rgba(18,23,26,.16);

  /* Medien bleiben dunkel, aber eine Spur weniger gedrueckt: auf
     hellem Grund faellt Tiefenzeichnung staerker auf. */
  --media-filter:saturate(.8) brightness(.6);
  --media-filter-strong:saturate(.76) brightness(.52);
  --media-filter-soft:saturate(.76) brightness(.56);
  --media-filter-bundle:saturate(.78) brightness(.74);
  --hero-video-filter:saturate(.84) brightness(.76);

  --logo-face-1:#8f979c;
  --logo-face-2:#a8b0b4;
  --logo-face-3:#c2c9cd;
  --logo-face-4:#d8dee1;
  --logo-edge-1:#4a5155;
  --logo-edge-2:#6d7478;
  --logo-accent-1:#3fb6d4;
  --logo-accent-2:#1a95b5;
  --logo-accent-3:#0a6f83;
  --logo-accent-edge-1:#064a5a;
  --logo-accent-edge-2:#0d6b80;
}

/* ------------------------------------------------------------------
   Dunkle Inseln
   Bild- und Videopanels bleiben in beiden Themes dunkel. Statt jede
   Regel darin zu ueberschreiben, bekommen die vier Container die
   Token des dunklen Themes zurueck. Alles was darin liegt - Text,
   Chips, Layer-Tabs, Trennlinien, Verlaeufe - rendert damit
   automatisch wie gehabt.

   Wichtig: --bg und --panel gehoeren dazu. Im mobilen Layout rutscht
   .lab-content unter das Bild statt darauf; die Karte bleibt dann als
   Ganzes dunkel, statt hellen Text auf hellem Grund zu erzeugen.

   Ebenso wichtig - und beim ersten Anlauf uebersehen: die Insel muss
   color SELBST setzen, nicht nur das Token. color wird vererbt, und
   vererbt wird der bereits berechnete Wert von body, nicht die
   Variable. Ohne die Zeile unten blieb jedes Element ohne eigene
   color-Regel (h2, strong, die Tab-Beschriftungen) dunkel auf dunkel.
   ------------------------------------------------------------------ */
[data-theme="light"] .atlas-visual,
[data-theme="light"] .lab-stage,
[data-theme="light"] .bundle-media,
[data-theme="light"] .operator-media{
  --bg:#07090a;
  --bg-rgb:7,9,10;
  --panel:#101417;
  --panel-2:#151a1d;
  --text:#f2f4f3;
  --lead:#d4dcde;
  --muted:#b4bec1;
  --quiet:#7f8a8e;
  --line:rgba(229,239,241,.13);
  --line-strong:rgba(229,239,241,.24);
  --cyan:#35d4ef;
  --cyan-soft:rgba(53,212,239,.13);
  --cyan-line:rgba(53,212,239,.45);
  --on-cyan:#041013;
  --mint:#9ce2c3;
  --surface-soft:rgba(9,12,14,.62);
  --surface-active:rgba(14,25,28,.88);
  --surface-quiet:rgba(7,9,10,.5);
  --detail-bg:rgba(7,9,10,.75);
  --detail-text:#d7dddf;
  --chip-bg:rgba(6,8,9,.8);
  color:var(--text);
}

/* ------------------------------------------------------------------
   Typografische Untergrenze der hellen Fassung
   Auf dem hellen Grund fallen die kleinsten Beschriftungen gegen die
   grosse Display-Schrift stark ab. Angehoben werden nur die wirklich
   kleinen Elemente (Eyebrows, Kicker, Listenlabels, Fusszeile) - der
   Fliesstext bleibt, damit der bewusste Sprung zwischen Headline und
   Beitext als Gestaltungsmittel erhalten bleibt.

   Die dunklen Medienpanels sind ausgenommen: sie sehen in beiden
   Themes gleich aus und sollen es auch bleiben.
   ------------------------------------------------------------------ */
[data-theme="light"] .eyebrow{font-size:0.875rem}
[data-theme="light"] .lab-stage .eyebrow{font-size:0.75rem}   /* Insel unveraendert */
[data-theme="light"] .hero-context{font-size:0.9375rem}
[data-theme="light"] .mechanic small{font-size:0.8125rem}
[data-theme="light"] .atlas-step .num{font-size:0.875rem}
/* Nur die Desktop-Leiste. Im mobilen Drawer stehen die Links bereits
   auf 1rem - dieser Block haette das mit hoeherer Spezifitaet wieder
   heruntergezogen. Aus demselben Grund bleibt .lang-btn unangetastet:
   dort greift unter 588 px eine bewusste Verkleinerung. */
@media(min-width:1373px){
  [data-theme="light"] .nav-links{font-size:0.9375rem}
}
[data-theme="light"] .episode-tab span{font-size:0.75rem}
[data-theme="light"] .path-list span{font-size:0.8125rem}
[data-theme="light"] .path-list div{font-size:0.9375rem}
[data-theme="light"] summary{font-size:1.1875rem}
/* .interest-row bleibt bewusst bei der Groesse des dunklen Themes.
   Mit 0.875rem und fuenf Feldern reichte die Zeilenbreite nicht mehr -
   "Webinar-Updates" rutschte in eine zweite Zeile, waehrend dunkel
   einzeilig blieb. Gleiche Groesse heisst gleicher Umbruchpunkt in
   beiden Themes, auf jeder Viewportbreite. */
[data-theme="light"] .form-status{font-size:0.875rem}
[data-theme="light"] footer{font-size:0.875rem}
/* .episode-tab b bleibt bei 0.875rem: bei 8.25rem Spaltenbreite bricht
   "0DTE-Szenarien" sonst um. */

/* Der Tiefeneffekt der inaktiven Atlas-Schritte muss im hellen Theme
   flacher ausfallen. .72 ergibt dort nur rund 3,6:1 gegen das
   Off-White; .85 landet mit der kraeftigeren --muted bei rund 5,9:1. */
[data-theme="light"] .atlas-step{opacity:.85}
[data-theme="light"] .atlas-step.is-active{opacity:1}

/* Die Panels heben sich auf hellem Grund sonst nur ueber den
   Farbwechsel ab. Eine weiche Kante gibt ihnen Halt. */
[data-theme="light"] .atlas-visual,
[data-theme="light"] .lab-stage,
[data-theme="light"] .operator-media{
  box-shadow:0 1.25rem 3rem rgba(18,23,26,.14);
}
/* .bundle-media sitzt buendig neben .bundle-copy, dort wuerde ein
   Schatten die gemeinsame Kante aufbrechen. */
[data-theme="light"] .bundle{
  box-shadow:0 1.25rem 3rem rgba(18,23,26,.10);
}

html.font-fallback{--display:Georgia,"Times New Roman",serif;--body:Georgia,"Times New Roman",serif;--mono:Georgia,"Times New Roman",serif;--head:Georgia,"Times New Roman",serif}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--body);font-size:1rem;line-height:1.65;overflow-x:hidden}
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:-1;background:linear-gradient(var(--grid-line) 0.0625rem,transparent 0.0625rem),linear-gradient(90deg,var(--grid-line) 0.0625rem,transparent 0.0625rem);background-size:4rem 4rem;mask-image:linear-gradient(to bottom,black,transparent 75%)}
a{color:inherit;text-decoration:none}
button,input{font:inherit}
button{color:inherit}
img,video{display:block;max-width:100%}
:focus-visible{outline:0.125rem solid var(--cyan);outline-offset:0.25rem}
.wrap{width:var(--wrap);margin-inline:auto}
.eyebrow{font-family:var(--mono);font-size:0.75rem;line-height:1.4;text-transform:uppercase;letter-spacing:.08em;color:var(--cyan)}
.muted{color:var(--muted)}
.section{padding:7.5rem 0;border-top:0.0625rem solid var(--line)}

/* Abstand zwischen Zugang-Block und Footer halbiert (7.5rem -> 3.75rem). */
#zugang{padding-bottom:3.75rem}
.section-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(17.5rem,32.5rem);gap:3.5rem;align-items:end;margin-bottom:3.5rem}
.section-head h2{margin:0.5rem 0 0;font:700 clamp(2.125rem,4.4vw,4rem)/1.03 var(--display);letter-spacing:0}
.section-head p{margin:0;color:var(--muted);font-size:1.125rem;line-height:1.65}
.site-nav{position:fixed;left:0;right:0;top:0;z-index:40;background:var(--nav-bg);border-bottom:0.0625rem solid var(--line);backdrop-filter:blur(1.125rem)}
.nav-inner{width:var(--wrap);height:4.5rem;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:1.5rem}





.nav-links{display:flex;align-items:center;gap:1.5rem;font-size:0.875rem;color:var(--muted)}
.nav-links a:hover{color:var(--text)}
/* Stillgelegter Menueeintrag (Research Lab waehrend der Ueberarbeitung).
   Sitzt auf derselben Grundlinie wie die Links daneben, traegt aber
   keinen Hover, keinen Fokus und keine Zeigerhand. Der Punkt davor
   markiert den Zustand auch dort, wo Farbe allein nicht reicht.
   ZUM AUFHEBEN: diese Regeln koennen stehen bleiben - sie greifen nur,
   solange irgendwo ein .nav-disabled im Markup steht. */
.nav-disabled{display:inline-flex;align-items:center;gap:0.4em;
  color:var(--muted);opacity:.55;cursor:default;white-space:nowrap}
.nav-disabled::before{content:"";width:0.375rem;height:0.375rem;border-radius:50%;
  background:currentColor;opacity:.8;flex:none}
/* ===== Platz fuer die Consent-Leiste =====
   consent.js setzt am <html> die Klasse mlc-open und meldet die gemessene
   Hoehe der Leiste als --mlc-h. Die Leiste liegt fix am unteren Rand;
   ohne die beiden Regeln hier deckt sie genau das zu, was unten steht -
   im Hero die Lead-Copy und die beiden Primaerbuttons, am Seitenende den
   Fuss. scroll-padding sorgt zusaetzlich dafuer, dass Sprungmarken nicht
   hinter der Leiste landen. */
html.mlc-open{scroll-padding-bottom:calc(var(--mlc-h,0px) + 1rem)}
html.mlc-open body{padding-bottom:var(--mlc-h,0px)}
/* Ab 1065px ist der Hero ein Raster mit bodenbuendiger Textspalte. Die
   Hoehe zu kuerzen reicht nicht - ist der Inhalt hoeher als das gekuerzte
   Mass, waechst der Hero wieder und die Spalte landet erneut unter der
   Leiste. Stattdessen waechst das untere Innenmass um die Leistenhoehe:
   die Spalte wird dann unabhaengig von der Inhaltshoehe immer genau um
   diesen Betrag nach oben geschoben. */
/* Ab 1065px liegt die Leiste als schmale Karte in der rechten unteren
   Ecke (siehe consent.js). Die Textspalte des Hero ist linksbuendig und
   auf 42.5-47.5rem begrenzt - Karte und Spalte beruehren sich dort nicht,
   der Hero bleibt deshalb voellig unveraendert. Nur der Seitenfuss, der
   ueber die volle Breite laeuft, bekommt unten Platz. */
.nav-cta{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-height:2.625rem;padding:0.5625rem 1rem;border:0.0625rem solid var(--cyan);border-radius:0.375rem;background:var(--cyan);color:var(--on-cyan)!important;font-weight:600}
/* Der Hero stapelt jetzt auf jeder Breite im Fluss:
   Markenzeile (M-Logo + Portrait) -> Textspalte -> Scroll-Hinweis.
   Frueher lagen Logo und Portrait absolut hinter der Textspalte und
   waren ueber --wm-gap (ein fest eingetragener Messwert der damaligen
   Spaltenhoehe) von der Hero-Unterkante her verankert. Sobald sich die
   Hoehe der Textspalte aenderte, stimmte dieser Messwert nicht mehr und
   Wortmarke und Text liefen ueber Logo und Foto. Im Fluss kann das
   konstruktionsbedingt nicht mehr passieren - kein Messwert, kein
   z-index-Stapel, keine Ueberlagerung. */
.hero{min-height:100svh;position:relative;
  display:flex;flex-direction:column;justify-content:flex-end;
  padding:calc(7rem - 19px) 0 calc(2.75rem + 19px);isolation:isolate;
  border-bottom:0.0625rem solid var(--line)}
.hero-media{position:absolute;z-index:-2;inset:4.5rem 0 0 38%;overflow:hidden}
.hero-media video,.hero-media img{width:100%;height:100%;object-fit:cover;object-position:54% 50%;will-change:transform}
.hero-media video{filter:var(--hero-video-filter)}
.hero-media::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,var(--bg) 0%,rgba(var(--bg-rgb),.94) 14%,rgba(var(--hero-scrim-rgb),.34) 54%,rgba(var(--hero-scrim-rgb),.22) 100%),linear-gradient(0deg,var(--bg) 0%,transparent 28%,rgba(var(--hero-scrim-rgb),.22) 100%)}
/* Markenzeile: M-Logo links, Portrait rechts daneben, gemeinsame
   Unterkante - auf jeder Breite eine echte Flex-Zeile im Fluss. Sie
   laeuft auf derselben Achse wie .wrap, damit Logo, Wortmarke, Text und
   Buttons buendig links stehen. Der Abstand nach unten ist der Freiraum
   zwischen Visual und Wortmarke. */
.hero-brandrow{display:flex;align-items:flex-end;justify-content:flex-start;
  width:var(--wrap);margin:0 auto clamp(2rem,3.4vw,3.5rem);
  /* Originalabstand zwischen Logo und Foto aus der absoluten Fassung:
     dort war er als left-Offset des Portraits notiert. */
  gap:clamp(0.75rem,1.6vw,2rem)}
/* Dimensionales M als Tiefenebene in der freien Flaeche oben links.
   z-index -1 = ueber dem Hero-Video (-2), unter der Textspalte. */
.hero-logo{position:static;z-index:auto;pointer-events:none;flex:0 0 auto;
  --hero-logo-opacity:.72;
  /* Originalgroesse aus V1.1 wiederhergestellt (war zwischenzeitlich auf
     13.5vw zurueckgenommen). Logo und Foto stehen jetzt im Fluss, der
     Hero waechst dadurch nach oben - der Textblock darunter bleibt von
     der Hero-Unterkante aus gemessen unveraendert. */
  --hlogo-w:clamp(12.5rem,23vw,21rem);
  --hlogo-h:calc(var(--hlogo-w) * .947);
  width:var(--hlogo-w);
  opacity:var(--hero-logo-opacity);
  filter:drop-shadow(0 1.625rem 3.25rem var(--logo-shadow)) saturate(1.06);
  -webkit-mask-image:radial-gradient(135% 125% at 38% 34%,#000 74%,rgba(0,0,0,.82) 90%,transparent 100%);
  mask-image:radial-gradient(135% 125% at 38% 34%,#000 74%,rgba(0,0,0,.82) 90%,transparent 100%);
  will-change:transform}
.hero-logo svg{display:block;width:100%;height:auto}
/* Hero-Portrait (Markus & Bjoern). Liegt auf derselben Tiefenebene wie das
   M-Logo (z-index -1: ueber dem Hero-Video, unter der Textspalte) und
   spiegelt dessen Geometrie: --hlogo-left/--hlogo-w wiederholen die Werte
   aus .hero-logo, damit das Foto exakt rechts daneben startet. Die Hoehe
   ist die Logo-Hoehe (SVG-Seitenverhaeltnis 114:108 -> Faktor .947), also
   stehen beide auf derselben Unterkante - direkt ueber der Wortmarke.
   Das Motiv ist freigestellt (Alphakanal), deshalb braucht es keine
   Hintergrundflaeche - nur eine weiche Abblendung der Huftlinie unten,
   damit der Beschnitt in den Hero auslaeuft. */
/* position:relative statt absolut: das Foto steht als Flex-Element in der
   Markenzeile, bleibt aber Bezugsrahmen fuer Bildlink, Namenszug, CTA und
   Bogen - die liegen weiterhin absolut IM Portrait, nicht ueber fremden
   Elementen. Die Hoehe ist die Logo-Hoehe, dadurch stehen Logo und Foto
   wie bisher auf einer gemeinsamen Unterkante. */
.hero-portrait{position:relative;z-index:auto;pointer-events:none;flex:0 0 auto;
  --hlogo-w:clamp(12.5rem,23vw,21rem);
  --hportrait-h:calc(var(--hlogo-w) * .947);
  height:var(--hportrait-h);
  aspect-ratio:955 / 1187;
  opacity:.96;
  filter:drop-shadow(0 1.375rem 2.75rem var(--logo-shadow));
  -webkit-mask-image:linear-gradient(0deg,transparent 0%,rgba(0,0,0,.55) 9%,#000 22%);
  mask-image:linear-gradient(0deg,transparent 0%,rgba(0,0,0,.55) 9%,#000 22%)}
/* Tiefstand des Fotos: das Duo stand urspruenglich deutlich tiefer als
   das M-Logo, seine Unterkante lief knapp oberhalb der Wortmarke aus.
   Ein einzelner Versatz am Portrait-Container holt das zurueck - Motiv,
   Namenszug, "Lerne uns kennen!" und Bogen liegen darin und wandern
   deshalb als Gruppe mit. Bewusst transform statt margin/top: der
   Versatz bleibt ausserhalb des Layoutflusses, Markenzeile, Wortmarke
   und der gesamte Textblock darunter behalten ihre Position exakt.
   22% beziehen sich auf die Portraithoehe, der Versatz skaliert damit
   ueber alle Breakpoints mit (~92px bei 1920px); die 0,5cm sind ein
   nachtraeglicher, auf jeder Breite gleich grosser Feinversatz.
   Unterhalb 1065px steht das Foto in der gestapelten Markenzeile, dort
   bleibt es ohne Versatz. */
@media(min-width:1065px){
  .hero-portrait{transform:translateY(calc(22% + 1cm))}
}
.hero-portrait picture{display:block;height:100%}
.hero-portrait img{display:block;width:100%;height:100%;object-fit:contain;object-position:50% 100%}
/* Auf hellem Grund wirkt das dunkle Motiv sonst zu hart - minimal
   zurueckgenommen, damit es sich in die helle Flaeche einfuegt. */
[data-theme="light"] .hero-portrait{opacity:.88}
/* ===== Namen auf dem Duo-Portrait =====
   Beschriftung auf Bauchhoehe (Prozentwerte beziehen sich auf den
   Portrait-Container; der hat dieselbe aspect-ratio wie das Motiv, das
   Bild fuellt ihn also deckungsgleich). Die Schrift skaliert ueber
   clamp() mit der Viewportbreite, analog zur Portraitgroesse selbst.
   Die weiche Ausblendung des Bildes setzt erst im untersten Fuenftel an,
   die Beschriftung bleibt daher praktisch voll deckend. */
.hero-portrait-names{position:absolute;inset:0;pointer-events:none;color:#fff;
  text-shadow:0 0.0625rem 0.125rem rgba(0,0,0,.55),0 0.25rem 1rem rgba(0,0,0,.6)}
/* Die Hoehenwerte sind bewusst prozentual: der Block sitzt dadurch auf
   jeder Portraitgroesse an derselben Stelle des Motivs (Bauchhoehe,
   unterhalb der verschraenkten Arme) - ein fester cm-Wert waere bei
   schmalen Fenstern mit kleinerem Foto zu weit nach unten gerutscht. */
.hero-portrait-names .hpn-name{position:absolute;top:74%;width:46%;
  transform:translateX(-50%);text-align:center;
  font:700 clamp(0.8125rem,1.05vw,1.1875rem)/1.2 var(--display);letter-spacing:.005em}
.hero-portrait-names .hpn-left{left:27%}
.hero-portrait-names .hpn-right{left:73%}
/* Verbindet die beiden Namen mittig zwischen den Personen. */
.hero-portrait-names .hpn-amp{left:50%;width:8%;color:rgba(255,255,255,.8)}
.hero-portrait-names .hpn-role{position:absolute;top:82%;left:50%;width:100%;
  transform:translateX(-50%);text-align:center;color:rgba(255,255,255,.88);
  font:500 clamp(0.6875rem,0.82vw,0.9375rem)/1.2 var(--body);letter-spacing:.05em}
/* Helles Theme: die Schrift bleibt weiss - sie liegt auf der dunklen
   Kleidung der beiden, nicht auf der hellen Seitenflaeche. Nur der
   Schatten wird fester, damit die Kanten dort nicht ausfransen. */
[data-theme="light"] .hero-portrait-names{
  text-shadow:0 0.0625rem 0.125rem rgba(0,0,0,.72),0 0.25rem 1rem rgba(0,0,0,.5)}
.hero-copy{max-width:calc(47.5rem + 221px);padding-top:1.25rem;position:relative}
.hero-context{display:none}
.hero-context i{width:0.4375rem;height:0.4375rem;border-radius:50%;background:var(--mint);box-shadow:0 0 1.125rem var(--mint-glow)}
h1{margin:0;font:800 clamp(3.625rem,8.6vw,7.75rem)/.88 var(--display);letter-spacing:0;max-width:56.25rem;transition:opacity .14s ease}
h1 span{display:block;color:var(--cyan)}
/* Hero-Lead: zwei Absaetze mit klarer Hierarchie statt einem Fliesstext-
   block. Der Container gibt nur noch Grundfarbe, Schriftgroesse und den
   Abstand nach unten vor - die Textbreiten sitzen an den Absaetzen
   selbst, damit Intro und Note unterschiedliche Zeilenlaengen haben.
   Alle Laengen in rem, weil html{font-size:140%} die gesamte Skala
   traegt (siehe "Nativer Massstab"): 1rem = 22,4 px auf Desktop.
   46rem ~ 1030 px Intro (vier Zeilen), 44rem ~ 985 px Note (drei
   Zeilen) - gemessen bei 1920 px Viewport. */
.hero-lead{max-width:100%;margin:1.125rem 0 2rem;color:var(--lead);font-size:clamp(0.9375rem,1.02vw,1.0625rem);line-height:1.58}
.hero-lead p{margin:0 0 0.75rem}
.hero-lead p:last-child{margin-bottom:0}
/* Intro: breitere Spalte, eine Spur groesser und heller (--text statt
   --lead) - der Unterschied bleibt bewusst klein, keine Ueberschrift. */
.hero-lead .hero-intro{max-width:46rem;margin-bottom:0;color:var(--text);
  font-size:clamp(1rem,1.06vw,1.125rem);line-height:1.5}
/* Note: nur eine Spur schmaler als das Intro und bewusst schwach
   eingerueckt (0.75rem ~ 17 px) - der Absatz soll mit dem Intro einen
   Block bilden, die Hierarchie tragen Abstand und Cyan-Haarlinie. Die
   Linie sitzt auf x=0 und fluchtet mit Headline, Intro und Buttons; der
   Einzug liegt im Padding, damit .hero-actions links stehen bleibt. */
.hero-lead .hero-note{box-sizing:border-box;position:relative;
  max-width:calc(44rem + 0.75rem);margin:1.0625rem 0 0;padding-left:0.75rem}
.hero-note::before{content:"";position:absolute;left:0;top:0.34em;bottom:0.34em;
  width:0.0625rem;border-radius:0.0625rem;
  background:linear-gradient(180deg,var(--cyan-line) 0%,var(--cyan-line) 38%,transparent 100%)}
/* Hinweis zur Spezifitaet: .hero-lead p (0,1,1) wuerde eine reine
   .hero-intro / .hero-note-Regel (0,1,0) bei margin ueberstimmen -
   darum sind beide Regeln oben an .hero-lead gebunden. */
.hero-actions{display:flex;align-items:center;gap:1.25rem;flex-wrap:wrap}
/* box-sizing:border-box ist noetig, weil .btn auch auf <a>-Elementen
   sitzt (Hero-CTAs, ATAS-Link, Bundle-CTA) - anders als <button> setzt
   der Browser fuer <a> kein Border-Box von sich aus. Ohne die Zeile
   rechnete width:100% (siehe @media max-width:588px) nur die
   Content-Box, Padding und Rahmen kamen obendrauf - der Button lief
   dadurch rechts ueber seinen Container hinaus. Bei den Hero-Buttons
   fing das eigene Flex-Shrinking den Effekt zufaellig ab (die Buttons
   wurden dabei aber unbemerkt schmaeler als angegeben), beim
   Bundle-CTA und beim mobilen Menue-Button (.nav-cta) nicht - dort
   ragte der Button sichtbar ueber den rechten Rand hinaus. */
.btn{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:0.75rem;min-height:3.25rem;padding:0.8125rem 1.25rem;border-radius:0.375rem;border:0.0625rem solid transparent;font-weight:700;font-size:0.9375rem;cursor:pointer;transition:transform .2s ease,background .2s ease,border-color .2s ease}
.btn:hover{transform:translateY(-0.125rem)}
.btn-primary{background:var(--cyan);color:var(--on-cyan);box-shadow:0 0.75rem 2.5rem var(--cyan-glow)}
.btn-quiet{border-color:var(--line-strong);background:var(--surface-quiet);color:var(--text)}
/* ATAS-Logo im Button: zwei Fassungen, per data-theme umgeschaltet.
   Dunkles Theme (Standard) zeigt die helle Logofassung, [data-theme="light"]
   tauscht auf die dunkle Fassung - wie beim theme-toggle-Icon oben. */
.btn-atas-logo{height:1.125rem!important;width:auto!important;max-width:none!important;display:block!important}
.btn-atas-logo-light{display:none!important}
[data-theme="light"] .btn-atas-logo-dark{display:none!important}
[data-theme="light"] .btn-atas-logo-light{display:block!important}
.hero-mechanics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));max-width:58.125rem;margin-top:2.25rem;border-top:0.0625rem solid var(--line);border-bottom:0.0625rem solid var(--line)}
.mechanic{padding:1.125rem 1.125rem 1.125rem 0;border-right:0.0625rem solid var(--line)}
.mechanic:not(:first-child){padding-left:1.125rem}
.mechanic:last-child{border-right:0}
.mechanic b{display:block;font:600 0.9375rem/1.3 var(--display)}
.mechanic small{display:block;color:var(--quiet);font-family:var(--mono);font-size:0.6875rem;margin-top:0.3125rem}
.scroll-cue{position:absolute;right:1.75rem;bottom:2.125rem;writing-mode:vertical-rl;color:var(--quiet);font:0.6875rem var(--mono);text-transform:uppercase;letter-spacing:.1em}
.atlas{background:var(--atlas-bg)}
.atlas-layout{display:grid;grid-template-columns:minmax(18.75rem,.78fr) minmax(0,1.22fr);gap:5.5rem;align-items:start}
.atlas-steps{display:grid;gap:0}
.atlas-step{min-height:44vh;padding:2.125rem 0 2.75rem;border-top:0.0625rem solid var(--line);opacity:.42;transition:opacity .35s ease}
.atlas-step.is-active{opacity:1}
.atlas-step .num{font:0.75rem var(--mono);color:var(--cyan)}
.atlas-step h3{margin:0.75rem 0 0.75rem;font:700 clamp(1.75rem,3.2vw,2.875rem)/1.08 var(--display)}
.atlas-step p{max-width:31.25rem;margin:0;color:var(--muted);font-size:1.0625rem}
.atlas-visual{position:sticky;top:6.5rem;height:min(72vh,45rem);border:0.0625rem solid var(--line);border-radius:1rem;overflow:hidden;background:var(--media-bg)}
.atlas-visual img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:var(--media-filter);transform:scale(1.03);will-change:transform}
.atlas-visual::after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgba(var(--scrim-atlas-rgb),.9),transparent 50%),linear-gradient(90deg,rgba(var(--scrim-atlas-rgb),.28),transparent)}
.route-svg{position:absolute;inset:10% 9%;width:82%;height:80%;z-index:2;overflow:visible}
.route-bg,.route-progress{fill:none;stroke-width:2}
.route-bg{stroke:var(--route-track)}
.route-progress{stroke:var(--cyan);stroke-linecap:round;filter:drop-shadow(0 0 0.5rem var(--route-glow));stroke-dasharray:1;stroke-dashoffset:1}
.route-dot{fill:var(--media-bg);stroke:var(--route-ring);stroke-width:1.5}
.route-dot.active{fill:var(--cyan);stroke:var(--cyan)}
.route-label{position:absolute;left:2.125rem;bottom:1.875rem;z-index:3}
.route-label small{font:0.6875rem var(--mono);color:var(--cyan);text-transform:uppercase}
.route-label strong{display:block;margin-top:0.4375rem;font:700 clamp(1.5rem,2.5vw,2.375rem)/1 var(--display)}
.lab-stage{position:relative;min-height:42.5rem;border:0.0625rem solid var(--line);border-radius:1.125rem;overflow:hidden;background:var(--panel)}
/* Das Layer-Stack-Motiv bringt seine dunkle Flaeche selbst mit (schwarze
   linke Haelfte, leuchtende Ebenen rechts). Deshalb hier ein deutlich
   leichteres Media-Filter als bei den Foto-Buehnen - sonst verschwinden
   die Wellenflaechen im Schwarz - und ein Scrim, der links weiterhin
   voll deckt, rechts aber frueher auslaeuft. */
.lab-stage>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:80% 50%;filter:saturate(1.04) brightness(1)}
.lab-stage::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(var(--scrim-deep-rgb),.94) 0%,rgba(var(--scrim-deep-rgb),.7) 38%,rgba(var(--scrim-deep-rgb),0) 68%),linear-gradient(0deg,rgba(var(--scrim-deep-rgb),.55),transparent 46%)}
.lab-content{position:relative;z-index:2;width:min(32.5rem,100%);padding:3.375rem}
.lab-content h2{font:700 clamp(2.375rem,5vw,4.25rem)/1 var(--display);margin:0.625rem 0 1.125rem}
.lab-content>p{font-size:1.125rem;color:var(--muted);margin:0 0 1.875rem}
.layer-tabs{display:grid;gap:0.5rem}
.layer-tab{width:100%;display:grid;grid-template-columns:2.625rem 1fr auto;gap:0.75rem;align-items:center;text-align:left;border:0.0625rem solid var(--line);border-radius:0.5rem;background:var(--surface-soft);padding:0.875rem 1rem;cursor:pointer;min-height:3.625rem;transition:.2s ease}
.layer-tab:hover,.layer-tab[aria-selected="true"]{background:var(--surface-active);border-color:var(--cyan-line)}
.layer-tab .index{font:0.6875rem var(--mono);color:var(--cyan)}
.layer-tab strong{font-size:0.9375rem}
.layer-tab .state{font:0.6875rem var(--mono);color:var(--quiet)}
.layer-tab[aria-selected="true"] .state{color:var(--mint)}
.layer-detail{margin-top:1.25rem;padding:1.375rem;border-left:0.125rem solid var(--cyan);background:var(--detail-bg);color:var(--detail-text)}
.layer-detail b{display:block;font:600 1.125rem var(--display);margin-bottom:0.4375rem}
.episodes-shell{border-top:0.0625rem solid var(--line);border-bottom:0.0625rem solid var(--line)}
.episode-tabs{display:flex;overflow-x:auto;scrollbar-width:thin}
/* display:flex + flex-start: sonst zentriert der Button seinen Inhalt
   vertikal und die cyanfarbenen Kicker stehen bei ein- und zweizeiligen
   Titeln auf unterschiedlicher Hoehe. */
.episode-tab{flex:1 0 8.25rem;min-height:5.125rem;padding:1rem;border:0;border-right:0.0625rem solid var(--line);background:transparent;text-align:left;cursor:pointer;color:var(--quiet);display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start}
.episode-tab span{display:block;font:0.625rem var(--mono);color:var(--cyan);margin-bottom:0.3125rem}
.episode-tab b{font-size:0.875rem}
.episode-tab[aria-selected="true"]{background:var(--cyan-soft);color:var(--text)}
.episode-detail{display:grid;grid-template-columns:1.2fr .8fr;gap:3.375rem;padding:3.25rem 0}
.episode-detail h3{font:700 clamp(2rem,4vw,3.375rem)/1.05 var(--display);margin:0.5rem 0 1.125rem}
.episode-detail p{max-width:43.75rem;color:var(--muted);font-size:1.125rem}
.path-list{align-self:end;border-left:0.0625rem solid var(--line);padding-left:1.875rem}
.path-list div{display:flex;justify-content:space-between;gap:1.125rem;padding:0.75rem 0;border-bottom:0.0625rem solid var(--line);font-size:0.875rem}
.path-list span{color:var(--quiet);font-family:var(--mono);font-size:0.6875rem;text-transform:uppercase}
.glossary-layout{display:grid;grid-template-columns:.8fr 1.2fr;gap:5rem}
.glossary-layout h2{font:700 clamp(2.375rem,5vw,4.25rem)/1 var(--display);margin:0.625rem 0 1.25rem}
.glossary-index{border-top:0.0625rem solid var(--line)}
details{border-bottom:0.0625rem solid var(--line)}
summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:1.25rem;padding:1.25rem 0;cursor:pointer;font:600 1.125rem var(--display)}
summary::-webkit-details-marker{display:none}
summary::after{content:"+";color:var(--cyan);font:1.375rem var(--mono)}
details[open] summary::after{content:"–"}
details p{margin:0 0 1.375rem;color:var(--muted);max-width:45rem}
.bundle{display:grid;grid-template-columns:1.06fr .94fr;border:0.0625rem solid var(--line);border-radius:1.125rem;overflow:hidden;background:var(--panel)}
.bundle-copy{padding:4rem}
.bundle-copy h2{font:700 clamp(2.375rem,5vw,4.25rem)/1 var(--display);margin:0.625rem 0 1.25rem}
.bundle-copy>p{color:var(--muted);font-size:1.125rem}
.bundle-list{margin:1.875rem 0 2.125rem;padding:0;list-style:none;border-top:0.0625rem solid var(--line)}
.bundle-list li{display:flex;gap:0.875rem;padding:0.75rem 0;border-bottom:0.0625rem solid var(--line);font-size:0.9375rem}
.bundle-list li::before{content:"";width:0.4375rem;height:0.4375rem;margin-top:0.5625rem;border-radius:50%;background:var(--cyan);flex:0 0 auto}
.bundle-media{min-height:38.75rem;position:relative;background:var(--media-bg-2)}
.bundle-media video{width:100%;height:100%;object-fit:cover;filter:var(--media-filter-bundle)}
.bundle-media::after{content:attr(data-caption);position:absolute;left:1.375rem;bottom:1.25rem;padding:0.4375rem 0.625rem;background:var(--chip-bg);border:0.0625rem solid var(--line);font:0.625rem var(--mono);color:var(--muted);text-transform:uppercase}
.trust-optin{display:grid;grid-template-columns:23.75rem minmax(0,1fr);gap:4.5rem;align-items:stretch}

/* ProvenExpert-Siegel unter dem Founder-Video, als dritte Zeile von
   .operator-block. Eigene Spalte, beruehrt Headline und Formular nicht. */
.optin-seal{display:block;width:11rem;max-width:100%;height:auto;justify-self:center;margin-top:5rem;border-radius:0.375rem}
.operator-media{position:relative;margin:0;min-height:35.625rem;border-radius:1rem;overflow:hidden;border:0.0625rem solid var(--line);background:var(--media-bg-3)}
.operator-media video{width:100%;height:100%;object-fit:cover;object-position:50% 46%;transform:scale(1.23);filter:saturate(.7) brightness(.72);will-change:transform}
.operator-media::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(var(--scrim-rgb),.45),transparent 30%,transparent 70%,rgba(var(--scrim-rgb),.5)),linear-gradient(0deg,rgba(var(--scrim-rgb),.9),transparent 46%)}
.operator-caption{position:absolute;left:1.5rem;right:1.5rem;bottom:1.5rem;z-index:2}
.operator-caption strong{display:block;font:700 1.5rem var(--display)}
.operator-caption span{color:var(--muted);font-size:0.875rem}
/* Der Hinweis steht ausserhalb von .operator-media - also ausserhalb der
   dunklen Insel - und nimmt damit in beiden Themes die Seitenfarben an.
   grid-template-rows:1fr auto haelt die bisherige Fuellhoehe der Figur:
   sie war Grid-Item von .trust-optin mit align-items:stretch.

   Zum margin: <figure> trug bisher den Browser-Standard 1em 40px, der
   das Panel um 40 px pro Seite eingerueckt hat. Der Abstand wandert auf
   den Wrapper, die Figur steht dadurch pixelgenau wie zuvor und der
   Hinweis buendig darunter. Der Wert stammt aus dem Browser-Default,
   nicht aus diesem Stylesheet - soll das Panel spaltenbreit stehen,
   hier auf 0 setzen. */
.operator-block{display:grid;grid-template-rows:1fr auto auto;gap:0.75rem;min-width:0;margin:1em 40px}
.media-credit{margin:0;color:var(--quiet);font-size:0.75rem;line-height:1.5}
[data-theme="light"] .media-credit{font-size:0.8125rem}
.optin{align-self:center;max-width:45rem}
.optin h2{font:700 clamp(2.5rem,5vw,4.5rem)/1 var(--display);margin:0.625rem 0 1.25rem}
.optin>p{font-size:1.125rem;color:var(--muted);max-width:40.625rem}
.email-row{display:grid;grid-template-columns:1fr auto;gap:0.625rem;margin:1.875rem 0 1.125rem}
/* box-sizing:border-box: ohne diese Zeile rechnet der Browser
   width:100% nur gegen die Content-Box, Padding (2rem) und Rahmen
   kommen dann oben drauf - das Feld wurde dadurch rechts breiter als
   sein Grid-Zelle in .email-row und ragte auf schmalen Screens ueber
   den rechten Rand des Viewports hinaus (kein globaler
   box-sizing-Reset im Stylesheet, anders als bei <button>, das vom
   Browser von Haus aus Border-Box bekommt). */
.email-row input{box-sizing:border-box;min-height:3.5rem;width:100%;border:0.0625rem solid var(--line-strong);border-radius:0.375rem;background:var(--input-bg);color:var(--text);padding:0.75rem 1rem}
/* align-items:center statt des Vorgabewerts stretch: sonst dehnen sich
   die Labels auf die Hoehe ihrer Flex-Zeile, und sobald ein Feld
   umbricht, sitzen die Kaestchen der Nachbarn auf anderer Hoehe.
   white-space:nowrap haelt jede Beschriftung einzeilig - umbrochen
   wird zwischen den Feldern, nicht innerhalb. */
.interest-row{display:flex;gap:0.625rem 1.375rem;flex-wrap:wrap;align-items:center;color:var(--muted);font-size:0.8125rem}
.interest-row label{display:flex;align-items:center;gap:0.5rem;min-height:2rem;white-space:nowrap}
.interest-row input{accent-color:var(--cyan);width:1rem;height:1rem;flex:none;margin:0}
.form-status{min-height:1.5rem;margin:0.75rem 0 0;color:var(--mint);font-size:0.8125rem}
/* Die Fehlermeldung stand bisher in derselben Bestaetigungsfarbe. */
.form-status[data-state="error"]{color:var(--danger)}

/* ================================================================
   Eintragung voruebergehend gesperrt
   ----------------------------------------------------------------
   Das Formular bleibt vollstaendig stehen: gleiche Groesse, gleicher
   Platz im Layout, alle Felder lesbar. Es wird nur zurueckgenommen und
   traegt einen Hinweis mit Schloss. Zwei Gruende fuer diesen Weg statt
   Ausblenden: der Abschnitt behaelt sein Gewicht auf der Seite, und
   Besucher sehen, was sie spaeter erwartet.
   Die Bedienung sperrt ein <fieldset disabled> im Markup, nicht diese
   Regeln - CSS allein waere keine Sperre, sondern nur ein Anstrich.
   pointer-events:none haelt zusaetzlich den Mauszeiger vom Formular
   fern, damit niemand ins Leere klickt.
   ================================================================ */
.optin form.is-locked{position:relative}
.optin .optin-fields{border:0;margin:0;padding:0;min-width:0;
  opacity:.42;filter:saturate(.55);pointer-events:none;transition:opacity .2s ease}
.optin-lock{
  /* inset links und rechts auf 0 plus margin:auto - nicht left:50% mit
     transform. Sonst reicht der verfuegbare Platz nur von der Mitte bis
     zum rechten Rand, und die Plakette bricht unnoetig um. */
  position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);
  margin-inline:auto;width:max-content;
  z-index:2;display:flex;align-items:center;gap:0.75rem;
  max-width:100%;box-sizing:border-box;
  padding:0.875rem 1rem;
  border:0.0625rem solid var(--cyan);border-radius:0.5rem;
  background:var(--optin-lock-bg);
  box-shadow:0 0 0 0.25rem var(--optin-lock-ring),0 1.25rem 2.5rem rgba(0,0,0,.45);
  backdrop-filter:blur(0.375rem)}
.optin-lock-icon{flex:none;width:1.75rem;height:1.75rem;color:var(--cyan)}
.optin-lock-text{margin:0;color:var(--text);font-size:0.875rem;line-height:1.4;font-weight:600;
  text-wrap:balance}
@media(max-width:36rem){
  .optin-lock{flex-direction:column;text-align:center;gap:0.625rem;padding:1rem}
}
footer{padding:2.75rem 0;border-top:0.0625rem solid var(--line);color:var(--quiet);font-size:0.75rem}
.footer-grid{display:block}
.footer-grid p{margin:0}
/* Rechtstexte: eigener, umrandeter Block (analog zur Webinar-Unterseite),
   spannt wie dort die volle Footer-Breite statt in eine schmale Spalte
   gequetscht zu werden. */
.footer-notes{display:block}
.footer-about{color:var(--muted)}
/* Der Markenname im Footer ist bewusst eine Grafik - exakt nach dem
   Muster des ATAS-Logos im Button (.btn-atas-logo weiter oben):
   zwei Dateien, per data-theme umgeschaltet.
   Zwei Dinge machen das robust und beheben die fehlerhafte Darstellung:
   1. !important schlaegt die generische Regel img,video{display:block},
      die sonst beide Fassungen untereinander stellt.
   2. Groesse und Startzustand stehen zusaetzlich inline im Markup.
      Faellt styles.css aus oder ist gecacht, bleibt das Logo trotzdem
      textgross und nur die dunkle Fassung sichtbar - statt zweimal
      in Originalgroesse (786x96) aufzuschlagen.
   Author-!important gewinnt gegen inline style, deshalb greift der
   Theme-Wechsel unten weiterhin zuverlaessig.
   Die Hoehe haengt an der Schriftgroesse (em), damit das Logo bei jeder
   Textgroesse mitwaechst; der Baseline-Versatz gleicht die Oberlaenge
   der Wortmarke aus. */
.footer-about-logo{height:1.15em!important;width:auto!important;max-width:none!important;display:inline-block!important;vertical-align:-0.18em}
.footer-about-logo-light{display:none!important}
[data-theme="light"] .footer-about-logo-dark{display:none!important}
[data-theme="light"] .footer-about-logo-light{display:inline-block!important}
.footer-note{color:var(--muted);line-height:1.62;text-wrap:pretty}
.footer-note strong{color:var(--text);font-weight:700}
.footer-legal{
  margin-top:1.5rem;
  padding:1.375rem 1.625rem;
  border:0.0625rem solid var(--line-strong);border-radius:0.875rem;
  color:var(--muted);font-size:0.8125rem;line-height:1.68;text-wrap:pretty;
}
.footer-legal p+p{margin-top:0.75rem}
.footer-legal strong{color:var(--text);font-weight:600}
/* Links unter dem Hinweis-Block statt daneben, mit Unterstreichung
   analog zur Webinar-Unterseite. */
.footer-links{display:flex;flex-wrap:wrap;gap:1.125rem;margin-top:1.25rem;white-space:nowrap}
.footer-links a{text-decoration:underline;text-underline-offset:0.1875rem;color:var(--muted)}
.footer-links a:hover{color:var(--cyan)}
/* Trennlinie + Copyright als eigene Zeile am Fuss, wie auf der
   Webinar-Unterseite. */
.footer-bottom{margin-top:1.5rem;padding-top:1.5rem;border-top:0.0625rem solid var(--line);color:var(--quiet)}
.reveal{opacity:0;transform:translateY(1.375rem);transition:opacity .65s ease,transform .65s ease}
.reveal.in{opacity:1;transform:none}
@media(max-width:1372px){
  .nav-links a:not(.nav-cta){display:none}
  .hero-media{inset:4.5rem 0 0 26%}
  .hero-copy{max-width:calc(42.5rem + 221px)}
  /* Bis 1064px bleibt der Hero ein Raster mit bodenbuendiger Textspalte -
     die obere Haelfte ist frei. Logo und Portrait behalten deshalb ihre
     Anordnung, laufen aber etwas schmaler (20vw statt 23vw) und sind
     ueber --hportrait-wordmark hoeher verankert, damit zwischen Foto und
     Ueberschrift auch bei flachen Fenstern Luft bleibt. Frueher stand
     hier display:none - dadurch verschwanden beide schon auf
     13-Zoll-Laptops, nicht erst auf dem Handy. */
  .hero-logo{width:clamp(11.25rem,20.5vw,17.5rem);--hero-logo-opacity:.62}
  /* Nur noch die Groesse: die frueheren top/bottom-Verankerungen sind
     entfallen, seit Logo und Foto im Fluss stehen. Als relativ
     positioniertes Element wuerde .hero-portrait ein top: sonst wieder
     nach unten in die Wortmarke schieben. */
  .hero-portrait{--hlogo-w:clamp(11.25rem,20.5vw,17.5rem);opacity:.9}
  .section-head,.atlas-layout,.glossary-layout,.bundle,.trust-optin{grid-template-columns:1fr}
  .section-head{gap:1.25rem}
  .atlas-layout{gap:2.125rem}
  .atlas-visual{position:relative;top:auto;height:32.5rem;order:-1}
  .atlas-step{min-height:auto;padding:1.75rem 0}
  .episode-detail{grid-template-columns:1fr}
  .path-list{padding-left:0;border-left:0}
  .bundle-media{min-height:26.25rem}
  .trust-optin{grid-template-columns:minmax(17.5rem,23.75rem) 1fr;gap:2.5rem}
}
/* Flache Laptop-Fenster: 1366x768 laesst nach Browserleisten oft nur rund
   650px Hoehe. Logo und Foto fallen dort kleiner aus, damit die
   Markenzeile dem Text nicht zu viel Hoehe wegnimmt. Verschiebungen ueber
   top: gibt es hier nicht mehr - beide stehen im Fluss. */
@media(max-width:1372px) and (min-width:1065px) and (max-height:800px){
  .hero-logo{width:clamp(9.375rem,15vw,13rem);--hero-logo-opacity:.5}
  .hero-portrait{--hlogo-w:clamp(9.375rem,15vw,13rem);opacity:.82}
}
@media(max-width:1064px){
  :root{--wrap:min(100% - 2rem,80rem)}
  .section{padding:5.25rem 0}
  #zugang{padding-bottom:2.625rem}
  .hero{min-height:auto;padding-top:7.375rem;display:flex;flex-direction:column;align-items:stretch}
  .hero>.wrap{order:1}
  .hero-media{position:relative;inset:auto;width:calc(100% + 2rem);height:48vh;min-height:21.875rem;margin:2.125rem -1rem -3.625rem;order:3}
  .hero-media::after{background:linear-gradient(0deg,var(--bg),transparent 38%),linear-gradient(90deg,rgba(var(--hero-scrim-rgb),.3),transparent)}
  .hero-copy{padding-top:0}
  /* ===== Hero auf Tablet und Handy =====
     M-Logo und Duo-Portrait stehen hier als eigene Markenzeile ganz oben,
     zwischen Kopfzeile und Textspalte - dieselbe Anordnung wie auf dem
     Desktop (Logo links, Foto rechts daneben, gemeinsame Unterkante), nur
     im Fluss statt absolut. Der Hero stapelt danach wie gehabt:
     Markenzeile -> Text -> Videoband. */
  .hero-brandrow{
    display:flex;order:0;
    align-items:flex-end;justify-content:flex-start;
    gap:clamp(0.375rem,1.5vw,1.25rem);
    margin:0 0 clamp(1.5rem,4vw,2.75rem);
    padding-inline:clamp(0.5rem,3vw,2rem)}
  .hero-logo,.hero-portrait{
    position:static;z-index:auto;
    inset:auto;
    flex:0 0 auto;
    pointer-events:none}
  .hero-logo{
    width:clamp(9rem,44vw,20rem);
    --hero-logo-opacity:.95;
    filter:drop-shadow(0 1rem 2.5rem var(--logo-shadow)) saturate(1.06);
    /* Ohne die weiche Radialmaske: oben steht das M als eigenstaendiges
       Markenzeichen, nicht als Tiefenebene hinter Text. */
    -webkit-mask-image:none;mask-image:none}
  .hero-portrait{
    width:clamp(6.5rem,31vw,14rem);height:auto;
    aspect-ratio:955 / 1187;
    opacity:.96;
    filter:drop-shadow(0 0.875rem 2rem var(--logo-shadow));
    /* Die Fusslinie laeuft weich aus, damit der Beschnitt unten nicht
       als harte Kante auf der Hintergrundflaeche steht. */
    -webkit-mask-image:linear-gradient(0deg,transparent 0%,rgba(0,0,0,.6) 7%,#000 18%);
    mask-image:linear-gradient(0deg,transparent 0%,rgba(0,0,0,.6) 7%,#000 18%)}
  .hero-portrait picture{display:block;height:auto}
  .hero-portrait img{height:auto}
  /* In der Markenzeile ist das Portrait nur noch wenige Zentimeter breit -
     die Namen waeren dort nicht mehr lesbar und wuerden das Motiv zusetzen.
     Ausserdem steht .hero-portrait hier im Fluss (position:static), die
     absolute Beschriftung haette keinen Bezugsrahmen mehr. */
  .hero-portrait-names{display:none}
  /* Solange die Consent-Leiste steht, faellt die Markenzeile kleiner aus.
     Sie ist auf diesen Breiten das erste Element im Hero und schiebt Lead
     und CTA nach unten - genau in den Bereich, den die Leiste belegt.
     Nach dem Klick auf "Alle akzeptieren" oder "Nur notwendige" hat sie
     sofort wieder ihre volle Groesse. */
  html.mlc-open .hero-brandrow{margin-bottom:clamp(0.5rem,1.4vw,0.875rem)}
  html.mlc-open .hero-logo{width:clamp(7rem,31vw,13rem)}
  html.mlc-open .hero-portrait{width:clamp(5rem,22vw,9.25rem)}
  html.mlc-open .hero{padding-top:5.5rem}
  html.mlc-open .hero-lead{margin:1.25rem 0 1.5rem}
  /* Unter 400px ist der Schirm so schmal, dass Ueberschrift und Lead
     mehr Zeilen brauchen. Dort noch einmal ein Stueck straffer. */
  @media(max-width:400px){
    html.mlc-open .hero-brandrow{margin-bottom:0.375rem}
    html.mlc-open .hero-logo{width:27vw}
    html.mlc-open .hero-portrait{width:19vw}
    html.mlc-open .hero-lead{margin:0.875rem 0 1.125rem}
  }
  h1{font-size:clamp(3.375rem,17vw,5.25rem)}
  .hero-mechanics{grid-template-columns:1fr 1fr;margin-top:2.875rem}
  .mechanic:nth-child(2){border-right:0}
  .mechanic:nth-child(-n+2){border-bottom:0.0625rem solid var(--line)}
  .scroll-cue{display:none}
  .lab-stage{min-height:46.25rem}
  .lab-stage::after{background:linear-gradient(0deg,rgba(var(--scrim-deep-rgb),.98) 0%,rgba(var(--scrim-deep-rgb),.9) 60%,rgba(var(--scrim-deep-rgb),.2) 100%)}
  .lab-content{position:absolute;left:0;right:0;bottom:0;padding:1.75rem}
  .trust-optin{grid-template-columns:1fr}
  /* .operator-media ist hier auf 24.375rem begrenzt und linksbuendig -
     das Siegel wird deshalb rechnerisch unter dem Video zentriert, nicht
     in der vollen Spaltenbreite. */
  .optin-seal{width:9.5rem;margin-top:3.5rem;justify-self:start;margin-left:calc((min(100%,24.375rem) - 9.5rem) / 2)}
  .operator-media{min-height:31.25rem;max-width:24.375rem}
  .email-row{grid-template-columns:1fr}
  .footer-grid{display:grid}
  .footer-links{white-space:normal}
}
@media(max-width:588px){
  .nav-inner{height:4rem}
  .nav-cta{display:none}
  .hero{padding-top:6.25rem}
  .hero-actions{align-items:stretch}
  .btn{width:100%}
  .hero-mechanics{grid-template-columns:1fr}
  .mechanic,.mechanic:not(:first-child){padding:0.9375rem 0;border-right:0;border-bottom:0.0625rem solid var(--line)}
  .atlas-visual{height:26.25rem}
  .route-label{left:1.25rem;bottom:1.25rem}
  .lab-content{padding:1.375rem}
  .layer-tab{grid-template-columns:2.125rem 1fr}
  .layer-tab .state{display:none}
  .bundle-copy{padding:1.875rem 1.5rem}
}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .reveal{opacity:1;transform:none}
}
  
:root{
  --ml-brand-font:"Roboto Serif",Georgia,"Times New Roman",serif;
  --ml-brand-weight:600;
  --ml-brand-weight-xl:500;
  --ml-brand-size:1.25rem;
  --ml-brand-mark-scale:.88;
  --ml-brand-tracking:-.01em;
  --ml-brand-tracking-xl:-.022em;
  --ml-brand-accent:var(--cyan);
  --ml-brand-ctx-font:var(--body);
  --ml-brand-ctx-color:var(--muted);
}

/* ================================================================
   MarketLab Wordmark — kanonische Komponente v1
   Eine Struktur, ein Schnitt, eine "Lab"-Auszeichnung — auf allen
   vier Seiten identisch. Nur die Tokens unten werden pro Seite
   gemappt (Akzentfarbe, Sekundaerschrift).
   ================================================================ */
.ml-brand{
  display:inline-flex;
  align-items:center;
  gap:.42em;
  font-family:var(--ml-brand-font);
  font-weight:var(--ml-brand-weight);
  font-size:var(--ml-brand-size);
  line-height:1;
  letter-spacing:var(--ml-brand-tracking);
  white-space:nowrap;
  color:inherit;
  transition:opacity .14s ease;
}

.ml-brand-name{display:inline-block}
.ml-lab{
  font-style:normal;
  font-weight:inherit;
  color:var(--ml-brand-accent);
}
.ml-brand-ctx{
  align-self:center;
  font-family:var(--ml-brand-ctx-font);
  font-weight:500;
  font-size:0.65625rem;
  line-height:1;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--ml-brand-ctx-color);
}
/* XL-Variante fuer den Hero-Wordmark. Erbt die Groesse vom h1 der Seite,
   ueberschreibt nur Familie, Schnitt und Laufweite. */
.ml-wordmark{
  /* Etwas kleiner als das Basis-h1: der Hero traegt jetzt zusaetzlich die
     Positionierungszeile und vier Absaetze Text. */
  font-size:clamp(3.5rem,7.6vw,7rem);
  font-family:var(--ml-brand-font);
  font-weight:var(--ml-brand-weight-xl);
  letter-spacing:var(--ml-brand-tracking-xl);
}
.ml-wordmark .ml-lab{
  display:inline;
  font-style:normal;
  font-weight:inherit;
  color:var(--ml-brand-accent);
}
@media (max-width:1204px){
  .ml-brand-ctx{display:none}
}

.ml-brand-mark{flex:none;display:block;height:calc(var(--ml-brand-mark-scale) * 1em);width:calc(var(--ml-brand-mark-scale) * 1.0829em);overflow:visible}

/* ================================================================
   Nativer Massstab
   Alle Laengen haengen an dieser einen Zeile. 100% = Ausgangsgroesse,
   140% entspricht dem Browser-Zoom von 140 %. Prozent statt px, damit
   eine abweichende Schriftgroesse im Browser des Nutzers erhalten
   bleibt.
   ================================================================ */
html{font-size:140%}

/* ================================================================
   MOBILE-OPTIMIERUNG
   Alles unterhalb dieser Linie greift erst ab den jeweiligen
   Breakpoints. Der Desktop-Zustand (140 %) bleibt unveraendert.
   ================================================================ */

/* 1) Gestufte Grundskala.
   Die 140 % sind fuer grosse Screens gedacht. Auf einem Telefon
   wuerde dieselbe Skala jede rem-Groesse um Faktor 1,4 aufblasen
   (h1 ~76 px, Buttons ~73 px hoch). Darum wird die Skala nach
   unten gestuft zurueckgenommen. */
@media(max-width:1372px){html{font-size:125%}}
@media(max-width:1064px){html{font-size:115%}}
@media(max-width:768px){html{font-size:106%}}
@media(max-width:588px){html{font-size:100%}}

/* 2) Mobile Navigation.
   Bisher waren unter 1372 px alle Links und unter 588 px auch die
   CTA ausgeblendet - auf dem Telefon gab es damit keine Navigation
   mehr. Burger-Panel statt Totalausblendung. */
.nav-toggle{display:none}
@media(max-width:1372px){
  .nav-toggle{display:inline-flex;align-items:center;justify-content:center;
width:2.75rem;height:2.75rem;flex:0 0 auto;padding:0;
border:0.0625rem solid var(--line-strong);border-radius:0.375rem;
background:var(--control-bg);color:var(--text);cursor:pointer}
  .nav-toggle span{position:relative;display:block;width:1.125rem;height:0.09375rem;background:currentColor;transition:background .2s ease}
  .nav-toggle span::before,.nav-toggle span::after{content:"";position:absolute;left:0;width:100%;height:100%;background:currentColor;transition:transform .22s ease}
  .nav-toggle span::before{top:-0.375rem}
  .nav-toggle span::after{top:0.375rem}
  .nav-toggle[aria-expanded="true"] span{background:transparent}
  .nav-toggle[aria-expanded="true"] span::before{transform:translateY(0.375rem) rotate(45deg)}
  .nav-toggle[aria-expanded="true"] span::after{transform:translateY(-0.375rem) rotate(-45deg)}
  .nav-inner{gap:1rem}
  .nav-links{position:absolute;left:0;right:0;top:100%;display:flex;flex-direction:column;
align-items:stretch;gap:0;box-sizing:border-box;
padding:0.25rem max(1.25rem,calc((100vw - var(--wrap))/2)) 1.25rem;
background:var(--nav-panel-bg);border-bottom:0.0625rem solid var(--line);
backdrop-filter:blur(1.125rem);font-size:1rem;
opacity:0;visibility:hidden;transform:translateY(-0.5rem);
transition:opacity .2s ease,transform .2s ease,visibility .2s}
  .site-nav.is-open .nav-links{opacity:1;visibility:visible;transform:none}
  .nav-links a:not(.nav-cta){display:flex;align-items:center;min-height:3.25rem;
border-bottom:0.0625rem solid var(--line);color:var(--text)}
  .nav-cta{display:inline-flex;width:100%;margin-top:1.125rem;min-height:3rem}
}

/* 3) Tablet- und Telefon-Layout */
@media(max-width:1064px){
  body{padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}
  a,button,summary,label{-webkit-tap-highlight-color:var(--cyan-tap)}
  h1,h2,h3{overflow-wrap:break-word}
  .hero-media{height:40vh;min-height:16rem}
  .hero-lead{margin-bottom:1.75rem}
  /* Auf Tablet wird der Einzug zurueckgenommen: die Spalte ist hier
     ohnehin schmal, ein tiefer Einzug wuerde nur Zeilen brechen. Die
     Breiten laufen ueber rem und schrumpfen mit der Grundskala mit,
     die Note bleibt darum weiterhin schmaler als das Intro. Die
     Cyan-Linie bleibt, sie traegt den Absatz auch schmal noch. */
  .hero-lead .hero-note{max-width:calc(42rem + 0.75rem);padding-left:0.75rem}
  /* Lab-Stage: Bild und Text uebereinander statt Text ueber Bild.
 Der Overlay-Modus liess den Text auf schmalen Screens auf dem
 Motiv stehen und erzwang 46 rem Mindesthoehe. */
  .lab-stage{min-height:0;display:grid;grid-template-rows:auto auto}
  .lab-stage>img{position:relative;inset:auto;height:15rem;filter:var(--media-filter-soft)}
  .lab-stage::after{display:none}
  .lab-content{position:relative;left:auto;right:auto;bottom:auto;
box-sizing:border-box;width:100%;padding:2rem}
  /* Episode-Tabs: horizontales Scrollen mit Snap statt harter Kante */
  .episodes-shell{position:relative}
  .episodes-shell::after{content:"";position:absolute;top:0;right:0;width:2.5rem;height:5.125rem;
pointer-events:none;background:linear-gradient(90deg,rgba(var(--bg-rgb),0),rgba(var(--bg-rgb),.92))}
  .episode-tabs{scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .episode-tabs::-webkit-scrollbar{display:none}
  .episode-tab{flex:0 0 9rem;scroll-snap-align:start}
  .path-list{margin-top:0.5rem}
  /* Touch-Ziele auf mindestens 44 px */
  summary{min-height:3rem}
  .footer-grid{gap:1.25rem}
  .footer-links{gap:1.5rem}
  .footer-links a{display:inline-flex;align-items:center;min-height:2.75rem}
  .interest-row{gap:0.25rem 1.25rem}
  .interest-row label{min-height:2.75rem;font-size:0.875rem}
  .interest-row input{width:1.25rem;height:1.25rem}
  .email-row input{font-size:1rem;min-height:3.25rem}
  .email-row .btn{width:100%}
  .operator-media{min-height:0;aspect-ratio:4/5;max-width:26rem;width:100%}
}

@media(max-width:588px){
  .section{padding:3.75rem 0}
  #zugang{padding-bottom:1.875rem}
  .section-head{margin-bottom:2.25rem}
  .nav-inner{height:3.75rem}
  .hero{padding-top:5.75rem;padding-bottom:2.5rem}
  .hero-context{margin-bottom:1.25rem}
  .hero-media{height:34vh;min-height:13rem}
  /* 2x2 statt vier gestapelter Zeilen - spart rund eine Bildhoehe */
  .hero-mechanics{grid-template-columns:1fr 1fr;margin-top:2.25rem}
  .mechanic,.mechanic:not(:first-child){padding:0.875rem 0.875rem 0.875rem 0;
border-right:0.0625rem solid var(--line);border-bottom:0.0625rem solid var(--line)}
  .mechanic:nth-child(2n){border-right:0;padding-left:0.875rem;padding-right:0}
  .mechanic:nth-child(n+3){border-bottom:0}
  .atlas-visual{height:18rem}
  .atlas-layout{gap:1.5rem}
  .lab-stage>img{height:11rem}
  .lab-content{padding:1.5rem}
  .layer-tab{min-height:3.25rem;padding:0.75rem 0.875rem}
  .episode-tab{flex:0 0 8rem;min-height:4.5rem}
  .episode-detail{padding:2.25rem 0;gap:1.5rem}
  .bundle-copy{padding:1.75rem 1.375rem}
  .bundle-media{min-height:0;aspect-ratio:16/10}
  .operator-media{aspect-ratio:1/1}
  .operator-caption{left:1.125rem;right:1.125rem;bottom:1.125rem}
  .operator-caption strong{font-size:1.25rem}
  .glossary-layout{gap:2rem}
  details p{margin-bottom:1.125rem}
  footer{padding-bottom:max(2.125rem,env(safe-area-inset-bottom))}
}

/* 4) Sehr schmale Geraete (iPhone SE und aehnlich) */
@media(max-width:360px){
  .hero-mechanics{grid-template-columns:1fr}
  .mechanic,.mechanic:not(:first-child){border-right:0;padding-left:0}
  .mechanic:nth-child(n+3){border-bottom:0.0625rem solid var(--line)}
}

/* 5) Landscape auf Telefonen: der 100svh-Hero wuerde die Copy
   sonst aus dem Sichtfeld schieben. */
@media(max-height:520px) and (orientation:landscape){
  .hero{min-height:0;padding-top:5.5rem}
  .hero-media{height:52vh;min-height:0}
  .site-nav.is-open .nav-links{max-height:calc(100vh - 4rem);overflow-y:auto}
}

/* 6) Geraete ohne echten Hover: Hover-Transforms deaktivieren,
   damit ein Tap nicht in einem verschobenen Zustand haengen bleibt. */
@media(hover:none){
  .btn:hover{transform:none}
  .layer-tab:hover{background:var(--surface-soft);border-color:var(--line)}
  .layer-tab[aria-selected="true"]{background:var(--surface-active);border-color:var(--cyan-line)}
}

/* ================================================================
   7) Typografie-Untergrenzen
   Die clamp()-Minimalwerte stammen aus dem Desktop-Entwurf. Unterhalb
   von rund 400 px greift nicht mehr der vw-Anteil, sondern das
   Minimum - dort standen h1/h2 dann breiter als die Textspalte.
   Die Maxima bleiben unangetastet, der Desktop-Zustand aendert sich
   nicht.
   ================================================================ */
@media(max-width:588px){
  h1{font-size:clamp(2.75rem,13.5vw,4rem)}
  .section-head h2{font-size:clamp(1.75rem,7.4vw,2.5rem)}
  .lab-content h2,.glossary-layout h2,.bundle-copy h2{font-size:clamp(1.875rem,7.6vw,2.75rem)}
  .optin h2{font-size:clamp(1.875rem,7.6vw,2.75rem)}
  .atlas-step h3{font-size:clamp(1.5rem,6.2vw,2rem)}
  .episode-detail h3{font-size:clamp(1.625rem,6.6vw,2.25rem)}
  .route-label strong{font-size:clamp(1.25rem,5.4vw,1.75rem)}
  .hero-lead{font-size:clamp(0.9375rem,3.9vw,1.0625rem)}
  .hero-lead .hero-intro{max-width:100%;font-size:clamp(1rem,4.15vw,1.125rem)}
  /* Telefon: kein Einzug mehr, nur noch ein schmaler Steg neben der
     Linie, damit der Text die volle Spaltenbreite nutzen kann. */
  .hero-lead .hero-note{max-width:100%;padding-left:0.75rem;margin-top:1rem}
}
@media(max-width:360px){
  h1{font-size:clamp(2.375rem,13vw,3.25rem)}
  .lab-content h2,.glossary-layout h2,.bundle-copy h2,.optin h2{font-size:1.625rem}
}

/* ================================================================
   8) Kontrast und Fokus (WCAG 2.1 AA)
   ================================================================ */

/* Inaktive Atlas-Schritte standen auf opacity .42. Der Fliesstext
   (--muted #b4bec1) landete damit effektiv bei rund 2,7:1 gegen den
   Sektionshintergrund und lag deutlich unter der 4,5:1-Schwelle.
   .72 haelt den Tiefeneffekt und erreicht rund 5,7:1. */
.atlas-step{opacity:.72}
.atlas-step.is-active{opacity:1}

/* Der Fokusring nutzt outline-offset .25rem. In Containern mit
   overflow:hidden (Episode-Tabs, Atlas-Visual, Lab-Stage) wurde er
   dadurch abgeschnitten - dort nach innen zeichnen. */
.episode-tab:focus-visible,
.atlas-visual :focus-visible,
.lab-stage :focus-visible,
.nav-links a:focus-visible{outline:0.125rem solid var(--cyan);outline-offset:-0.125rem}

/* ================================================================
   RECHTSTEXTE (datenschutz.html)

   Sprachumschaltung ohne JavaScript: beide Fassungen stehen im
   Markup, sichtbar ist die zum lang-Attribut des <html> passende.
   Das Attribut setzt das Inline-Snippet im <head> vor dem ersten
   Paint. Faellt JavaScript komplett aus, bleibt lang="de" aus der
   Auslieferung stehen und die deutsche Fassung ist da - bei einer
   Pflichtinformation ist das der entscheidende Punkt.
   ================================================================ */
.legal-body{display:none}
html[lang="de"] .legal-body[data-lang-content="de"],
html[lang="en"] .legal-body[data-lang-content="en"]{display:block}
/* Ohne CSS (und damit ohne diese Regel) waeren beide Fassungen
   sichtbar - unschoen, aber vollstaendig. Das ist die richtige
   Richtung fuer den Fehlerfall. */

.legal{padding:9.5rem 0 6rem}
.legal-wrap{max-width:56rem}

.legal-head{padding-bottom:2.5rem;border-bottom:0.0625rem solid var(--line);margin-bottom:2.5rem}
.legal-head h1{margin:0.75rem 0 0;font:700 clamp(2.5rem,5.4vw,4rem)/1.05 var(--display);max-width:100%}
.legal-lead{margin:1.5rem 0 0;max-width:44rem;color:var(--lead);font-size:clamp(1.0625rem,1.6vw,1.3125rem);line-height:1.55}
.legal-meta{margin:1.5rem 0 0;color:var(--quiet);font-family:var(--mono);font-size:0.8125rem;
  text-transform:uppercase;letter-spacing:.06em}
/* Hinweis auf die massgebliche Sprachfassung */
.legal-authority{margin:1.25rem 0 0;padding:0.875rem 1.125rem;border-left:0.125rem solid var(--cyan);
  background:var(--detail-bg);color:var(--detail-text);font-size:0.9375rem}
.legal-authority a{text-decoration:underline;text-underline-offset:0.2em}

.legal-toc{margin-bottom:3.5rem;padding:1.75rem 1.875rem;border:0.0625rem solid var(--line);
  border-radius:0.75rem;background:var(--surface-soft)}
.legal-toc h2{margin:0 0 1rem;font:600 0.75rem var(--mono);text-transform:uppercase;
  letter-spacing:.1em;color:var(--cyan)}
.legal-toc ol{margin:0;padding-left:1.5rem;columns:2;column-gap:2.5rem;
  color:var(--muted);font-size:0.9375rem;line-height:1.9}
.legal-toc a{text-decoration:none}
.legal-toc a:hover{color:var(--text);text-decoration:underline;text-underline-offset:0.2em}

.legal-section{margin-bottom:3.25rem;scroll-margin-top:6.5rem}
.legal-section h2{display:flex;align-items:baseline;gap:0.75rem;margin:0 0 1.25rem;
  font:700 clamp(1.5rem,2.6vw,2rem)/1.2 var(--display);
  hyphens:auto}
/* Der Text neben der Nummer ist ein anonymes Flex-Element, sein Mindestmass
   ist damit das laengste Wort. "Datenschutzerklaerung" ist bei 1,5rem rund
   292px breit - unterhalb von etwa 350px Fensterbreite passt das nicht mehr
   in die Spalte und schob die Seite auf. Ab 360px abwaerts faellt die
   Ueberschrift deshalb eine Stufe kleiner aus; overflow-wrap:anywhere ist
   nur die Rueckfallebene fuer noch schmalere Geraete. Oberhalb von 360px
   bleibt das Schriftbild unveraendert. */
@media(max-width:360px){
  .legal-section h2{font-size:1.25rem;overflow-wrap:anywhere}
  .legal-num{font-size:0.75rem}
}
.legal-num{flex:none;font:0.8125rem var(--mono);color:var(--cyan);
  transform:translateY(-0.15em)}
.legal-section h3{margin:1.75rem 0 0.75rem;font:600 1.0625rem/1.45 var(--display);color:var(--text)}
.legal-section h3:first-of-type{margin-top:0}
.legal-section p{margin:0 0 1rem;color:var(--muted);font-size:1rem;line-height:1.72;
  max-width:46rem;text-wrap:pretty}
.legal-section ul{margin:0 0 1.25rem;padding-left:1.25rem;color:var(--muted);
  font-size:1rem;line-height:1.72;max-width:46rem}
.legal-section li{margin-bottom:0.375rem}
.legal-section li::marker{color:var(--cyan)}
.legal-section a{color:var(--cyan);text-decoration:underline;text-underline-offset:0.2em}
.legal-section a:hover{color:var(--text)}
.legal-section strong{color:var(--text)}

/* Der Widerspruchsabschnitt ist nach Art. 21 Abs. 4 DSGVO hervorzuheben. */
.legal-emphasis{padding:1.75rem 1.875rem;border-left:0.1875rem solid var(--cyan);
  background:var(--surface-soft);border-radius:0 0.5rem 0.5rem 0}
.legal-emphasis p{color:var(--text)}

.legal-address{margin:0 0 1.25rem;padding:1.125rem 1.375rem;border:0.0625rem solid var(--line);
  border-radius:0.5rem;background:var(--surface-soft);font-style:normal;
  color:var(--muted);font-size:0.9375rem;line-height:1.75}
.legal-address strong{display:block;margin-bottom:0.25rem;color:var(--text)}
.legal-address a{color:var(--cyan)}

/* Roboto Serif enthaelt keine griechischen Glyphen - die Familie deckt
   nur latin, latin-ext, kyrillisch und vietnamesisch ab. Das galt schon
   fuer die Google-Fassung, ist also keine Folge der lokalen Einbindung.
   Damit der griechische Behoerdenname nicht zufaellig irgendeine
   Systemschrift erwischt, steht der Fallback hier ausdruecklich. */
[lang="el"]{font-family:Georgia,"Times New Roman",serif}

/* Tabellen bekommen auf schmalen Screens einen eigenen Scrollbereich,
   statt das Layout zu sprengen. tabindex macht ihn per Tastatur
   erreichbar - sonst kaeme man ohne Maus nicht an den rechten Rand. */
.legal-table-scroll{margin:0 0 1.25rem;overflow-x:auto;-webkit-overflow-scrolling:touch}
.legal-table-scroll:focus-visible{outline:0.125rem solid var(--cyan);outline-offset:0.25rem}
.legal-table{width:100%;min-width:32rem;border-collapse:collapse;font-size:0.9375rem}
.legal-table th,.legal-table td{padding:0.75rem 1rem;text-align:left;vertical-align:top;
  border-bottom:0.0625rem solid var(--line)}
.legal-table thead th{color:var(--cyan);font:0.6875rem var(--mono);text-transform:uppercase;
  letter-spacing:.08em;border-bottom-color:var(--line-strong)}
.legal-table tbody th{color:var(--text);font-weight:600;width:38%}
.legal-table td{color:var(--muted);line-height:1.6}

.legal-contact{margin-top:4rem;padding-top:2.5rem;border-top:0.0625rem solid var(--line)}
.legal-contact h2{margin:0 0 1rem;font:700 clamp(1.5rem,2.6vw,2rem)/1.2 var(--display)}
.legal-contact p{margin:0 0 1.25rem;color:var(--muted);max-width:46rem}

/* Das Impressum ist kurz - eine schmalere Spalte steht ihm besser als
   die volle Breite der Datenschutzerklaerung. */
.legal-wrap-narrow{max-width:44rem}

/* Sprungmarke fuer Tastaturnutzer: sichtbar erst bei Fokus. */
.skip-link{position:absolute;left:0.75rem;top:-4rem;z-index:60;
  padding:0.75rem 1.125rem;border-radius:0.375rem;background:var(--cyan);
  color:var(--on-cyan);font-size:0.875rem;font-weight:700;
  transition:top .18s ease}
.skip-link:focus-visible{top:0.75rem;outline:0.125rem solid var(--text);outline-offset:0.125rem}

@media(max-width:1064px){
  .legal{padding:7.5rem 0 4rem}
  .legal-toc ol{columns:1}
}
@media(max-width:588px){
  .legal{padding:6rem 0 3rem}
  .legal-toc{padding:1.25rem 1.375rem}
  .legal-emphasis{padding:1.25rem 1.375rem}
  .legal-section{margin-bottom:2.5rem}
  .legal-address{padding:1rem 1.125rem}
}

/* Papierfassung: Navigation, Schalter und Fusszeilen-Marketing weg,
   Linkziele ausschreiben. Rechtstexte werden ausgedruckt. */
@media print{
  .site-nav,.skip-link,.legal-toc,footer,.theme-toggle,.lang-switch{display:none!important}
  .legal{padding:0}
  .legal-wrap{max-width:none}
  .legal-section{page-break-inside:avoid}
  .legal-section a[href^="http"]::after{content:" (" attr(href) ")";font-size:.85em;word-break:break-all}
}

/* Sichtbar nur fuer Screenreader. Ersetzt die bisherige
   Inline-Positionierung am Formularlabel. */
.sr-only{position:absolute!important;width:0.0625rem;height:0.0625rem;
  padding:0;margin:-0.0625rem;overflow:hidden;white-space:nowrap;
  clip:rect(0 0 0 0);clip-path:inset(50%);border:0}

/* ================================================================
   9) Sprachumschalter DE / EN
   .nav-side buendelt Navigation, Sprachschalter und Burger-Button,
   damit die Leiste weiterhin nur zwei Flex-Kinder hat (Marke links,
   Rest rechts). .nav-side bleibt bewusst unpositioniert - das
   Mobil-Panel von .nav-links haengt am fixierten .site-nav.
   ================================================================ */
.nav-side{display:flex;align-items:center;gap:1.5rem}

.lang-switch{display:inline-flex;flex:0 0 auto;align-items:stretch;
  border:0.0625rem solid var(--line-strong);border-radius:0.375rem;
  overflow:hidden;background:var(--control-bg)}
.lang-btn{display:inline-flex;align-items:center;justify-content:center;
  min-width:2.5rem;min-height:2.375rem;padding:0 0.5rem;border:0;
  background:transparent;color:var(--quiet);cursor:pointer;
  font-family:var(--mono);font-size:0.75rem;line-height:1;
  letter-spacing:.06em;transition:color .2s ease,background .2s ease}
.lang-btn + .lang-btn{border-left:0.0625rem solid var(--line)}
.lang-btn:hover{color:var(--text)}
.lang-btn[aria-pressed="true"]{background:var(--cyan-soft);color:var(--cyan)}
/* Der Rahmen schneidet den Fokusring mit outline-offset ab. */
.lang-btn:focus-visible{outline:0.125rem solid var(--cyan);outline-offset:-0.125rem}

@media(max-width:1372px){
  /* Der Schalter bleibt neben dem Burger sichtbar - Sprache waehlen
     soll nicht erst das Oeffnen des Menues voraussetzen. */
  .nav-side{gap:0.625rem}
}
@media(max-width:588px){
  .lang-btn{min-width:2.25rem;min-height:2.75rem;font-size:0.6875rem}
}
@media(hover:none){
  .lang-btn:hover{color:var(--quiet)}
  .lang-btn[aria-pressed="true"]:hover{color:var(--cyan)}
}

/* ================================================================
   10) Umschalter hell / dunkel
   Ein Button statt eines Segmentpaars: bei vier Elementen in der
   Leiste (Marke, Sprache, Theme, Burger) wird es sonst auf 360 px
   zu eng. Der Zustand steht im aria-label, das mit der Sprache
   mitwandert.
   ================================================================ */
.theme-toggle{display:inline-flex;align-items:center;justify-content:center;
  flex:0 0 auto;width:2.75rem;height:2.75rem;padding:0;
  border:0.0625rem solid var(--line-strong);border-radius:0.375rem;
  background:var(--control-bg);color:var(--muted);cursor:pointer;
  transition:color .2s ease,border-color .2s ease}
.theme-toggle:hover{color:var(--text);border-color:var(--cyan-line)}
.theme-toggle:focus-visible{outline:0.125rem solid var(--cyan);outline-offset:-0.125rem}
.theme-toggle svg{display:block}
/* Dunkles Theme zeigt die Sonne (Ziel: hell), helles den Mond. */
.theme-toggle .icon-moon{display:none}
[data-theme="light"] .theme-toggle .icon-moon{display:block}
[data-theme="light"] .theme-toggle .icon-sun{display:none}

@media(max-width:588px){
  .theme-toggle{width:2.5rem;height:2.75rem}
}
@media(hover:none){
  .theme-toggle:hover{color:var(--muted);border-color:var(--line-strong)}
}
/* Beim Wechsel nicht hart umspringen. Bei reduzierter Bewegung
   greift der globale Transition-Stopp weiter unten. */
body,.site-nav,.bundle,.layer-tab,.email-row input,.theme-toggle,.lang-switch{
  transition:background-color .25s ease,border-color .25s ease,color .25s ease}


/* ================================================================
   11) Typografie-Helfer & Szenario-Karten
   ================================================================ */
.block{display:block}

.scenario-grid{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:0.875rem;
  margin-top:1rem;
}
.scenario-pill{
  display:flex;
  flex-direction:column;
  padding:1rem 1.125rem;
  border:0.0625rem solid var(--line);
  border-radius:0.625rem;
  background:var(--surface-soft);
  cursor:pointer;
  transition:border-color .18s ease,background-color .18s ease,transform .18s ease,box-shadow .18s ease;
  text-align:left;
  outline:none;
}
.scenario-pill:hover,.scenario-pill:focus-visible,.scenario-pill.is-active{
  background:var(--surface-active);
  border-color:var(--cyan);
  transform:translateY(-2px);
  box-shadow:0 6px 20px -4px var(--cyan-glow);
}
.scenario-pill-top{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:0.5rem;
  margin-bottom:0.375rem;
}
.scenario-pill-top strong{
  font:600 0.9375rem var(--display);
  color:var(--text);
}
.scenario-pill-badge{
  font:0.625rem var(--mono);
  color:var(--cyan);
  text-transform:uppercase;
  padding:0.15rem 0.45rem;
  border-radius:999px;
  background:var(--cyan-soft);
  border:0.0625rem solid var(--cyan-line);
}
.scenario-pill p{
  margin:0;
  font-size:0.8125rem;
  color:var(--muted);
  line-height:1.45;
}

/* ================================================================
   12) Über-uns & Social-Proof-Komponenten (ueber-uns.html)
   ================================================================ */
.about-hero{
  padding:8.5rem 0 3.5rem;
  text-align:center;
}
.about-hero h1{
  font:700 clamp(2.375rem,5vw,4.25rem)/1.08 var(--display);
  /* Die globale h1-Regel begrenzt auf 56.25rem, gleicht die Raender
     aber nicht aus. Auf der zentrierten Ueber-uns-Seite sass die
     Ueberschrift dadurch linksbuendig im Wrap, waehrend Eyebrow und
     Lead mittig standen. Volle Breite + auto-Raender korrigiert das. */
  max-width:100%;
  margin:0.75rem auto 1.25rem;
}
/* Die beiden Zeilen der Ueberschrift sind eigene <span>, damit sie
   einzeln uebersetzbar sind. Die globale Regel h1 span faerbt Spans
   cyan (Hero der Startseite) - hier soll die Farbe erhalten bleiben. */
.about-hero h1 span{display:block;color:inherit}
.about-hero .lead{
  max-width:48rem;
  margin:0 auto;
  font-size:clamp(1.0625rem,1.3vw,1.3125rem);
  color:var(--lead);
  line-height:1.65;
}

.trust-banner{
  display:grid;
  grid-template-columns:auto minmax(0,1fr) auto;
  align-items:center;
  gap:1.25rem 2rem;
  padding:1.5rem 2.25rem;
  margin:2.5rem auto 0;
  max-width:50rem;
  border:0.0625rem solid var(--line-strong);
  border-radius:1rem;
  background:var(--panel);
  box-shadow:0 12px 32px -12px rgba(0,0,0,.4);
}
/* Trennstrich zwischen Score und Beschriftung - haelt die drei
   Bereiche optisch auseinander, ohne zusaetzliches Markup. */
.trust-score-label{
  padding-left:2rem;
  border-left:0.0625rem solid var(--line);
}
.trust-score-badge{
  display:inline-flex;
  align-items:center;
  white-space:nowrap;
  gap:0.75rem;
  font-size:1.5rem;
  font-weight:700;
  color:var(--text);
}
.trust-stars{color:#f59e0b;letter-spacing:0.1em;font-size:1.25rem}
.trust-score-label{font-size:0.875rem;color:var(--muted);text-align:left;line-height:1.5}
.trust-score-label strong{color:var(--text);font-weight:600;display:block}

/* ProvenExpert-Siegel im Trust-Banner: ersetzt den fruehereren Textbutton,
   behaelt dessen Grid-Platz (dritte Spalte) und die Verlinkung. */
.provenexpert-seal{
  display:block;
  flex:0 0 auto;
  line-height:0;
  border-radius:0.5rem;
  text-decoration:none!important;
  transition:transform .18s ease,box-shadow .18s ease;
}
.provenexpert-seal img{display:block;width:8rem;max-width:100%;height:auto;border-radius:0.5rem}
.provenexpert-seal:hover{transform:translateY(-2px);box-shadow:0 10px 24px -10px rgba(0,0,0,.5)}
.provenexpert-seal:focus-visible{outline:0.125rem solid var(--cyan);outline-offset:0.25rem}

.provenexpert-link{
  display:inline-flex;
  align-items:center;
  flex:0 0 auto;
  white-space:nowrap;
  gap:0.5rem;
  padding:0.625rem 1.25rem;
  border:0.0625rem solid var(--cyan-line);
  border-radius:999px;
  background:var(--cyan-soft);
  color:var(--cyan);
  font:600 0.8125rem var(--mono);
  text-transform:uppercase;
  letter-spacing:0.04em;
  text-decoration:none!important;
  transition:all .18s ease;
}
.provenexpert-link:hover{
  background:var(--cyan);
  color:var(--on-cyan);
  border-color:var(--cyan);
  transform:translateY(-1px);
}

.founder-grid{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:2rem;
  margin:3.5rem 0;
}
.founder-card{
  display:flex;
  flex-direction:column;
  padding:2.25rem;
  border:0.0625rem solid var(--line);
  border-radius:1rem;
  background:var(--panel);
  position:relative;
  overflow:hidden;
}
.founder-card::before{
  content:"";
  position:absolute;
  top:0;left:0;right:0;
  height:0.1875rem;
  background:linear-gradient(90deg,var(--cyan),transparent);
}
.founder-card-head{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:1rem;
  margin-bottom:1.25rem;
}
.founder-role{
  font:0.6875rem var(--mono);
  color:var(--cyan);
  text-transform:uppercase;
  letter-spacing:0.08em;
  margin-bottom:0.25rem;
}
.founder-name{
  font:700 1.625rem var(--display);
  color:var(--text);
}
/* Firmenname steht bei beiden Karten einheitlich in einer eigenen Zeile
   unter dem Vornamen, unabhaengig von der Textlaenge. */
.founder-name .founder-org{display:block}
/* Portraet zwischen Name und Bewertung. Die Quelldateien sind bereits
   quadratisch zugeschnitten, deshalb schneidet object-fit:cover in einem
   quadratischen Rahmen nichts weg und verzerrt nichts - das Seitenver-
   haeltnis bleibt exakt 1:1. */
.founder-portrait{
  flex:0 0 auto;
  width:5.25rem;
  height:5.25rem;
  border-radius:50%;
  object-fit:cover;
  border:0.0625rem solid var(--line-strong);
  background:#fff;
  margin-left:auto;
}

.founder-rating{
  display:inline-flex;
  flex-direction:column;
  align-items:flex-end;
  font-size:0.75rem;
  color:var(--muted);
  white-space:nowrap;
}
.founder-rating strong{
  color:var(--text);
  font-size:1.0625rem;
}
.founder-focus{
  margin:1rem 0;
  padding:0.875rem 1rem;
  border-radius:0.5rem;
  background:var(--surface-soft);
  border-left:0.1875rem solid var(--cyan);
  font-size:0.875rem;
  color:var(--lead);
  line-height:1.5;
}
.founder-card p{
  color:var(--muted);
  font-size:0.9375rem;
  line-height:1.65;
  margin-bottom:1rem;
}
.founder-card-footer{
  margin-top:auto;
  padding-top:1.25rem;
  border-top:0.0625rem solid var(--line);
}

.story-section{
  padding:3.5rem 0;
}
.story-block{
  max-width:52rem;
  margin:0 auto;
}
.story-block h2{
  font:700 clamp(1.875rem,3.5vw,2.75rem)/1.15 var(--display);
  margin-bottom:1.5rem;
}
.story-block p{
  font-size:1.0625rem;
  line-height:1.75;
  color:var(--lead);
  margin-bottom:1.5rem;
}
.story-quote{
  padding:1.5rem 1.75rem;
  border-left:0.25rem solid var(--cyan);
  background:var(--surface-soft);
  border-radius:0 0.75rem 0.75rem 0;
  margin:2rem 0;
  font:italic 1.125rem/1.6 var(--display);
  color:var(--text);
}

@media(max-width:1064px){
  .founder-grid{grid-template-columns:1fr;gap:1.5rem}
  .about-hero{padding:7.5rem 0 3rem}
  .trust-banner{grid-template-columns:1fr;justify-items:center;text-align:center;gap:1.25rem;padding:1.75rem 1.5rem}
  .provenexpert-seal img{width:7rem}
  .trust-score-label{text-align:center;padding-left:0;padding-top:1.25rem;border-left:0;border-top:0.0625rem solid var(--line);width:100%}
}
@media(max-width:588px){
  .scenario-grid{grid-template-columns:1fr}
  .founder-card{padding:1.5rem}
  .founder-card-head{flex-direction:column}
  /* Portraet zwischen Name und Bewertung. Die Quelldateien sind bereits
   quadratisch zugeschnitten, deshalb schneidet object-fit:cover in einem
   quadratischen Rahmen nichts weg und verzerrt nichts - das Seitenver-
   haeltnis bleibt exakt 1:1. */
.founder-portrait{
  flex:0 0 auto;
  width:5.25rem;
  height:5.25rem;
  border-radius:50%;
  object-fit:cover;
  border:0.0625rem solid var(--line-strong);
  background:#fff;
  margin-left:auto;
}

.founder-rating{align-items:flex-start;margin-top:0.5rem}
}


/* ================================================================
   OPT-IN: Unterkante der Textspalte auf Video-Unterkante
   ================================================================
   Zweispaltig lag .optin vertikal zentriert in der Zeile - und die
   Zeile ist so hoch wie die gesamte linke Spalte (Video + Hinweis +
   Siegel). Dadurch rutschte der Block deutlich unter das Video.

   Loesung ohne Markup-Aenderung: .operator-block wird per
   display:contents aufgeloest, seine drei Kinder werden selbst zu
   Grid-Items der linken Spalte (Zeile 1-3). .optin sitzt dann in
   Zeile 1 neben dem Video und wird mit align-self:end an dessen
   Unterkante gezogen. Die vormaligen Blockabstaende (margin:1em 40px,
   gap:0.75rem) wandern auf die Kinder bzw. auf row-gap, damit die
   Optik der linken Spalte unveraendert bleibt.
   Nur ab zwei Spalten aktiv - unter 1065px bleibt der einspaltige
   Stapel wie gehabt. */
@media(min-width:1065px){
  .trust-optin{row-gap:0.75rem}
  .operator-block{display:contents}
  .operator-media{grid-column:1;grid-row:1;margin:1em 40px 0}
  .media-credit{grid-column:1;grid-row:2;margin:0 40px}
  .optin-seal{grid-column:1;grid-row:3;margin:5rem 40px 1em}
  .optin{grid-column:2;grid-row:1;align-self:end}
}

/* ===== Hero-Portrait: Bildlink und CTA "Lerne uns kennen!" =====
   Das Duo-Portrait fuehrt zur Seite "Ueber uns". Der Container selbst
   bleibt pointer-events:none (Tiefenebene, z-index -1) - nur der Link
   und der Button nehmen Klicks an und werden dafuer ueber die Textspalte
   gehoben. Groesse und Position der beiden Elemente haengen allein am
   Portrait-Container, deshalb skalieren sie auf jeder Breite mit dem
   Motiv mit und es sind keine Aenderungen an den bestehenden Hero-
   Regeln noetig. */
/* Bisher lag das Portrait auf z-index:-1 und bildete damit einen eigenen
   Stapelkontext - Kinder konnten die Textspalte nicht erreichen und waren
   weder sichtbar noch klickbar. z-index:auto loest den Stapelkontext auf,
   ohne die Malreihenfolge zu aendern: das Portrait steht weiterhin ueber
   dem Hero-Video (-2) und dem M-Logo (-1) und - da es im Markup vor der
   Textspalte steht - weiterhin unter .hero-copy. Nur Link und CTA heben
   sich mit eigenem z-index heraus. */
/* ===== Zwei Korrekturen am bestehenden Hero =====
   1. Waagerechter Ueberlauf auf schmalen Geraeten
   .hero-media ist unter 1065px absichtlich 2rem breiter als der Hero und
   haengt mit -1rem an beiden Seiten heraus, damit das Videoband randlos
   wirkt. Der Hero ist dort aber ohnehin schon volle Fensterbreite, der
   Ueberhang von 1rem rechts erzeugt deshalb nur eine Scrollbreite - die
   Seite liess sich um 16px zur Seite wischen. overflow-x:clip schneidet
   genau diesen Ueberhang ab; das Band bleibt randlos, weil es die volle
   Breite ja bereits fuellt. clip (nicht hidden) legt dabei keinen
   Scrollcontainer an, position:sticky im Hero bliebe also intakt. */
@media(max-width:1064px){
  .hero{overflow-x:clip}
}

/* 2. Namensauszeichnung auf flachen Laptopfenstern
   Die Schriftgroessen der Namen haengen an vw, die Portraitgroesse aber
   an --hlogo-w. Zwischen 1065px und 1372px Breite bei flachem Fenster
   faellt --hlogo-w auf 14vw statt 23vw - das Foto schrumpft dort also
   deutlich staerker als die Schrift, wodurch "Markus" und "Bjoern"
   zusammenstiessen und "Die Systemarchitekten" zweizeilig ueber den
   Bildrand lief. min() deckelt beide Groessen zusaetzlich an der
   Portraitbreite, sodass die Beschriftung in jeder Groesse dieselbe
   Proportion zum Motiv behaelt. Auf dem Desktop greift weiterhin der
   bisherige clamp-Wert, dort aendert sich nichts.
   Das max() darum herum ist eine Lesbarkeitsgrenze: rein proportional
   waere die Rollenzeile auf flachen Fenstern nur noch gut 6px hoch.
   Die Untergrenzen sind so gewaehlt, dass die Zeilen auch beim kleinsten
   Portrait noch vollstaendig innerhalb des Motivs stehen. */
.hero-portrait-names .hpn-name{
  white-space:nowrap;
  font-size:min(clamp(0.8125rem,1.05vw,1.1875rem), calc(var(--hlogo-w) * 0.046))}
.hero-portrait-names .hpn-role{
  white-space:nowrap;
  font-size:min(clamp(0.6875rem,0.82vw,0.9375rem), calc(var(--hlogo-w) * 0.0335))}
/* Auf flachen Laptopfenstern faellt das Portrait auf rund 145px Breite -
   praktisch dieselbe Groesse wie in der mobilen Markenzeile, wo die
   Beschriftung aus genau diesem Grund schon bisher entfaellt. Proportional
   richtig waere die Rollenzeile dort nur noch gut 6px hoch; statt sie
   unleserlich zu setzen, wird sie wie im mobilen Fall ausgeblendet. */
@media(max-width:1372px) and (min-width:1065px) and (max-height:800px){
  .hero-portrait-names{display:none}
}

.hero-portrait{z-index:auto;opacity:1;filter:none;
  -webkit-mask-image:none;mask-image:none}
[data-theme="light"] .hero-portrait{opacity:1}
/* Die abgenommenen Eigenschaften sitzen jetzt eine Ebene tiefer, in
   derselben Reihenfolge und mit denselben Werten wie zuvor - inklusive
   der Breakpoint-Abstufungen. Bild und Namensauszeichnung liegen darin,
   ihr Aussehen bleibt damit unveraendert. */
.hero-portrait-visual{position:absolute;inset:0;
  opacity:.96;
  filter:drop-shadow(0 1.375rem 2.75rem var(--logo-shadow));
  -webkit-mask-image:linear-gradient(0deg,transparent 0%,rgba(0,0,0,.55) 9%,#000 22%);
  mask-image:linear-gradient(0deg,transparent 0%,rgba(0,0,0,.55) 9%,#000 22%)}
[data-theme="light"] .hero-portrait-visual{opacity:.88}
@media(max-width:1372px){
  .hero-portrait-visual{opacity:.9}
}
@media(max-width:1372px) and (min-width:1065px) and (max-height:800px){
  .hero-portrait-visual{opacity:.82}
}
@media(max-width:1064px){
  /* In der Markenzeile steht das Portrait im Fluss; die Bildebene laeuft
     dort mit und bestimmt die Hoehe des Containers. */
  .hero-portrait-visual{position:static;
    opacity:.96;
    filter:drop-shadow(0 0.875rem 2rem var(--logo-shadow));
    -webkit-mask-image:linear-gradient(0deg,transparent 0%,rgba(0,0,0,.6) 7%,#000 18%);
    mask-image:linear-gradient(0deg,transparent 0%,rgba(0,0,0,.6) 7%,#000 18%)}
}
/* Die unteren 10 % bleiben frei: dort laeuft das Motiv ohnehin weich aus
   und auf dem Desktop beginnt darunter die Wortmarke - der Link soll ihre
   Textauswahl nicht abfangen. */
.hero-portrait-link{position:absolute;inset:0 0 10% 0;z-index:2;
  pointer-events:auto;cursor:pointer;
  border-radius:0.5rem;
  -webkit-tap-highlight-color:transparent}
.hero-portrait-link:focus-visible{outline:0.125rem solid var(--cyan);outline-offset:0.25rem}
/* Das Motiv reagiert dezent auf Hover/Fokus des Links - kein Layoutsprung,
   nur eine leichte Anhebung der Deckkraft. */
.hero-portrait:has(.hero-portrait-link:hover) picture,
.hero-portrait:has(.hero-portrait-link:focus-visible) picture{filter:brightness(1.06)}
.hero-portrait picture{transition:filter .2s ease}

/* Gemeinsame Masse fuer Button und Bogen. --cta-shift ist ein Prozentsatz
   der Portraitbreite, nicht der Fensterbreite: dadurch ist der Versatz auf
   jeder Breite gleich proportional zum Foto - auf flachen Laptopfenstern,
   wo das Portrait deutlich kleiner ausfaellt, rutschte ein vw-Wert sonst
   zu weit ins Motiv hinein. */
.hero-portrait{
  --cta-shift:6%;
  --cta-font:clamp(0.75rem,0.85vw,0.875rem);
  --arrow-w:clamp(3.5rem,5.4vw,5.5rem)}
.hero-portrait-cta{position:absolute;z-index:2;
  left:calc(100% - var(--cta-shift));
  top:5%;bottom:auto;
  pointer-events:auto;
  display:inline-flex;align-items:center;white-space:nowrap;
  padding:0.5rem 0.875rem;border-radius:0.375rem;
  background:var(--cyan);color:var(--on-cyan);
  font:700 var(--cta-font)/1.1 var(--body);
  text-decoration:none;
  box-shadow:0 0.5rem 1.5rem var(--cyan-glow);
  transition:transform .2s ease,filter .2s ease}
.hero-portrait-cta:hover{transform:translateY(-0.125rem);filter:brightness(1.05)}
.hero-portrait-cta:focus-visible{outline:0.125rem solid var(--cyan);outline-offset:0.25rem}

/* Der Bogen setzt unter dem Button an und zeigt nach unten links auf die
   beiden Personen. Er sitzt im Portrait-Container und skaliert deshalb
   mit dem Motiv; sein Kasten ragt bewusst ueber die Bildkante, damit die
   Spitze auf den Personen landet. */
/* Der Bogen setzt exakt unter dem "e" von "Lerne" an. Dessen Mitte liegt
   2,13em hinter der linken Buttonkante (gemessen an der Schriftart des
   Buttons), und der Bogen beginnt im viewBox-Raster bei 87,7 % seiner
   Breite - beides zusammen ergibt den Wert unten. Er verschiebt sich
   dadurch automatisch mit dem Button mit. */
.hero-portrait-arrow{position:absolute;z-index:2;pointer-events:none;
  left:calc(100% - var(--cta-shift) + 2.13 * var(--cta-font) - 0.877 * var(--arrow-w));
  top:15%;
  width:var(--arrow-w);height:auto;aspect-ratio:100 / 120;
  color:var(--cyan);
  filter:drop-shadow(0 0.125rem 0.5rem rgba(0,0,0,.45))}

@media(max-width:1064px){
  /* Unterhalb dieser Breite steht der Button unter dem Foto. Der Bogen
     bleibt sichtbar, wird aber um 180 Grad gedreht: sein Ansatz sitzt
     dadurch unten links direkt ueber dem Button, die Spitze zeigt nach
     oben rechts auf die beiden Personen. Bezugsrahmen ist wie beim Button
     der Portrait-Container, der Bogen skaliert also mit dem Foto mit. */
  .hero-portrait-arrow{display:block;
    left:auto;right:clamp(1rem,14%,5rem);
    top:auto;bottom:clamp(0.125rem,1%,0.75rem);
    width:clamp(2.75rem,13vw,4.25rem);
    transform:scaleY(-1)}
}
@media(max-width:1064px){
  /* In der Markenzeile steht das Portrait im Fluss - der Container wird
     hier zum Bezugsrahmen fuer Link und Button. Neben dem Foto bleibt auf
     diesen Breiten kein Platz mehr fuer eine Schaltflaeche (Logo + Foto
     fuellen die Zeile fast aus), deshalb setzt sich der CTA direkt unter
     das Foto und bleibt buendig zu dessen linker Kante. Die Markenzeile
     bekommt dafuer genau die Hoehe des Buttons als zusaetzlichen
     Innenabstand - der Textblock darunter rutscht dadurch nicht in den
     Button hinein. */
  .hero-portrait{position:relative}
  .hero-brandrow{padding-bottom:clamp(2rem,7vw,2.5rem)}
  .hero-portrait-cta{left:0;bottom:auto;top:calc(100% + clamp(0.375rem,1.5vw,0.625rem));
    padding:0.4375rem 0.75rem;font-size:clamp(0.6875rem,2.6vw,0.8125rem)}
  /* Der Button bleibt optisch kompakt - seine Tippflaeche waechst aber auf
     die empfohlenen 44px Mindesthoehe. Das Pseudoelement liegt im Anker,
     Tipper darauf loesen also denselben Link aus. */
  .hero-portrait-cta::after{content:"";position:absolute;
    left:0;right:0;top:50%;transform:translateY(-50%);
    height:max(100%,2.75rem)}
}
@media(max-width:400px){
  .hero-portrait-cta{padding:0.375rem 0.5rem;font-size:0.6875rem}
}

/* ==================================================================
   Kopfzeile: Platz fuer den siebten Menuepunkt
   ------------------------------------------------------------------
   Die waagerechte Navigation gilt erst ab 1373px; darunter uebernimmt
   das Burger-Panel. Mit "Research Lab" als siebtem Eintrag reichte der
   Zwischenraum von 1.5rem im Band 1373-1470px nicht mehr: "Research
   Lab" und "Ueber uns" brachen auf zwei Zeilen um und die Leiste lief
   ueber .nav-inner hinaus.
   Zwei Stellschrauben, beide nur oberhalb des Umbruchpunkts: die
   Eintraege bleiben einzeilig, und die drei Zwischenraeume gehen von
   1.5rem auf 1rem. Das Mobil-Panel bleibt unberuehrt, weil es
   ausschliesslich unterhalb von 1373px existiert.
   Geprueft ohne Umbruch und ohne Ueberlauf von 1373px bis 1920px,
   in heller und dunkler Fassung. Die helle Fassung setzt die
   Navigation eine Stufe groesser (siehe @media min-width:1373px
   weiter oben) und ist damit der engere Fall.
   ================================================================== */
@media(min-width:1373px){
  .nav-links a{white-space:nowrap}
  .nav-links{gap:1rem}
  .nav-side{gap:1rem}
  .nav-inner{gap:1rem}
}

/* Die helle Fassung setzt die Navigation eine Stufe groesser (0.9375rem,
   siehe @media min-width:1373px weiter oben). Mit sieben Eintraegen
   reicht das im unteren Band nicht, dort lief die Leiste auch mit 1rem
   Zwischenraum noch ueber. Die helle Fassung laeuft darum bis 1479px
   auf derselben Stufe wie die dunkle; darueber gilt die groessere
   Schrift unveraendert weiter.
   Die Grenze lag frueher bei 1439px. Seit der Menuepunkt "Folgen"
   "Schritte" heisst und der stillgelegte Eintrag einen Punkt traegt,
   braucht die Leiste mehr Platz: gemessen 1387,6px bei 1384px Breite,
   also 3,6px zu viel. Ab 1480px stehen 1424px zur Verfuegung, das
   traegt mit 36px Reserve. */
@media(min-width:1373px) and (max-width:1479px){
  [data-theme="light"] .nav-links{font-size:0.875rem}
}

/* Unmittelbar oberhalb des Umbruchpunkts bleibt es auch mit 1rem knapp.
   Im Browser gemessen: bei 1373px stehen 1317px zur Verfuegung, die
   englische Fassung braucht 1350px - die Leiste lief dort ueber
   .nav-inner hinaus. Die volle Einheit traegt erst ab 1406px, darum
   endet das Band bei 1405px. Die deutsche Fassung war nie betroffen,
   die Regel greift aber sprachunabhaengig, weil der Umschalter zur
   Laufzeit wirkt.
   Der Bedarf enthaelt den stillgelegten Eintrag "Research Lab", der
   durch Punkt und Abstand rund 13px breiter ist als der Link zuvor.
   Faellt die Sperre weg, sinkt der Bedarf wieder auf 1333,8px und das
   Band koennte bei 1392px enden - noetig ist das nicht, die Regel
   schadet in den 13 Pixeln dazwischen nicht.
   Dasselbe Band ist im Research Lab abgesichert
   (research-lab/research_lab_v1_7.css). */
@media(min-width:1373px) and (max-width:1405px){
  .nav-links{gap:0.75rem}
}
