/* =========================================================
   LUKEN — Recording, Mixing & Mastering
   Vanilla CSS, keine Abhängigkeiten.

   FARBEN
   Zwei Ebenen, die sich unabhängig umschalten lassen:
     data-theme  = "dark" | "light"     (Grundhelligkeit)
     data-accent = "mono" | "brass" | "ice" | "violet"
   Beides steckt der Umschalter oben rechts auf <html>.
   ========================================================= */

/* ---------------- Grundton dunkel ---------------- */
:root{
  --bg:#09090b;
  --bg2:#0d0d10;
  --surface:#121215;
  --surface2:#18181d;
  --line:#212127;
  --line2:#33333d;
  --text:#f2f2f0;
  --muted:#9a9aa2;
  --dim:#7d7d87;
  --navbg:rgba(9,9,11,.86);
  --danger:#ff7b7e;
  --grain:.42;
  --shadow:0 24px 56px rgba(0,0,0,.55);

  --r:12px;
  --r-sm:8px;
  --ease:cubic-bezier(.2,.9,.3,1);
  --pad:clamp(20px,5vw,80px);
  --secpad:clamp(58px,7.5vw,104px);   /* Innenabstand der Abschnitte */
  /* Höhe der Kopfleiste. Muss auf ALLEN Seiten gleich sein, sonst
     sitzt das Logo je nach Seite ein paar Pixel höher oder tiefer.
     78 px ist die Höhe, die die Startseite von sich aus hat. */
  --navh:78px;
  --maxw:1280px;
  /* Die eine Kante, an der ALLES ausgerichtet ist.
     Abschnitte mit eigenem Hintergrund (.sec--alt, Footer, CTA)
     laufen über die volle Breite; ihr Inhalt muss deshalb um die
     Seitenränder schmaler sein, sonst steht er weiter links als
     der Inhalt der normalen Abschnitte. */
  --inner:calc(var(--maxw) - var(--pad) * 2);
}

/* ---------------- Grundton hell ----------------
   Warmes Papierweiß statt Reinweiß — wirkt weicher
   und lässt die Akzentfarben ruhiger aussehen.       */
:root[data-theme="light"]{
  --bg:#faf9f7;
  --bg2:#f2f1ed;
  --surface:#ffffff;
  --surface2:#f7f6f3;
  --line:#e6e4df;
  --line2:#cbc8c0;
  --text:#121116;
  --muted:#5c5a63;
  --dim:#6d6b74;
  --navbg:rgba(250,249,247,.9);
  --danger:#b3242a;
  --grain:.22;
  --shadow:0 20px 46px rgba(28,24,20,.11);
}

/* ---------------- Paletten ----------------
   Aktiv ist "brass" (Messing) — festgelegt im <script> im Kopf
   jeder HTML-Datei: d.setAttribute('data-accent','brass').
   Zum Wechseln dort das Wort austauschen: mono | brass | ice | violet.
------------------------------------------------- */
/* Monochrom */
:root[data-accent="mono"]{
  --accent:#f5f5f3; --accent-big:#f5f5f3; --accent-hi:#ffffff; --on-accent:#0a0a0b;
  --accent-dim:rgba(245,245,243,.10); --glow:rgba(255,255,255,.07);
}
:root[data-theme="light"][data-accent="mono"]{
  --accent:#14131a; --accent-big:#14131a; --accent-hi:#000000; --on-accent:#ffffff;
  --accent-dim:rgba(20,19,26,.07); --glow:rgba(20,19,26,.05);
}
/* Messing
   --accent     kleine Texte, Rahmen, Symbole (muss 4,5:1 haben)
   --accent-big GROSSE Schrift: Überschriften, Preise, Kennzahlen.
                Dort reicht 3:1, deshalb im hellen Design ein
                deutlich wärmeres, helleres Gold. */
:root[data-accent="brass"]{
  --accent:#d9a441; --accent-hi:#e8b95e; --on-accent:#1a1305;
  --accent-big:#d9a441;
  --accent-dim:rgba(217,164,65,.13); --glow:rgba(217,164,65,.10);
}
:root[data-theme="light"][data-accent="brass"]{
  --accent:#8a6316; --accent-hi:#6f4f0f; --on-accent:#ffffff;
  --accent-big:#ab7c14;
  --accent-dim:rgba(171,124,20,.12); --glow:rgba(171,124,20,.05);
}
/* Eisblau */
:root[data-accent="ice"]{
  --accent:#6ba8ff; --accent-big:#6ba8ff; --accent-hi:#8bbcff; --on-accent:#04101f;
  --accent-dim:rgba(107,168,255,.13); --glow:rgba(107,168,255,.10);
}
:root[data-theme="light"][data-accent="ice"]{
  --accent:#1257c4; --accent-big:#1257c4; --accent-hi:#0d449e; --on-accent:#ffffff;
  --accent-dim:rgba(18,87,196,.10); --glow:rgba(18,87,196,.07);
}
/* Violett */
:root[data-accent="violet"]{
  --accent:#9b7bff; --accent-big:#9b7bff; --accent-hi:#b198ff; --on-accent:#0c0620;
  --accent-dim:rgba(155,123,255,.13); --glow:rgba(155,123,255,.10);
}
:root[data-theme="light"][data-accent="violet"]{
  --accent:#5b37c4; --accent-big:#5b37c4; --accent-hi:#48299e; --on-accent:#ffffff;
  --accent-dim:rgba(91,55,196,.10); --glow:rgba(91,55,196,.07);
}

*{margin:0;padding:0;box-sizing:border-box}
html{
  scroll-behavior:smooth;-webkit-text-size-adjust:100%;
  /* Platz für die Bildlaufleiste IMMER freihalten. Sonst ist eine
     kurze Seite ein paar Pixel breiter als eine lange — und das
     Logo oben links steht auf jeder Seite woanders. */
  scrollbar-gutter:stable;
  /* Seitwärts darf die Seite NIE wandern. body{overflow-x:hidden}
     allein reicht auf dem iPhone nicht: dort scrollt das html-Element,
     und das ausgeblendete Menü (position:fixed, translateX(100%))
     zieht die Seite trotzdem nach rechts. Ergebnis: man will nach
     unten wischen und schiebt die Seite seitlich weg.
     hidden zuerst als Rückfall, clip danach — clip macht kein
     Scroll-Element und lässt den Kalender (position:fixed) in Ruhe. */
  overflow-x:hidden;
  overflow-x:clip;
  overscroll-behavior-x:none;
}
/* Ankersprung: der Innenabstand des Abschnitts wird abgezogen,
   damit man auf der ÜBERSCHRIFT landet und nicht auf der leeren
   Fläche darüber. 78 px ist die Höhe der Kopfleiste plus Luft. */
.sec{scroll-margin-top:calc(78px - var(--secpad))}
.hero{scroll-margin-top:78px}

/* Autoren-Regeln wie .btn{display:inline-flex} schlagen die
   Browser-Regel für [hidden] — deshalb hier erzwingen. */
[hidden]{display:none!important}

body{
  background:var(--bg);color:var(--text);
  font-family:'Switzer',system-ui,sans-serif;
  font-size:17px;line-height:1.65;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
  overflow-x:clip;
  overscroll-behavior-x:none;
}

/* Farbwechsel weich überblenden */
body,.nav,.sec--alt,.strip,.footer,.close,
.pick__box,.specbox,.summary,.est,.seg>span,
.fld input,.fld select,.fld textarea,.qty{
  transition:background-color .4s var(--ease),border-color .4s var(--ease),color .4s var(--ease);
}

a{color:inherit;text-decoration:none}
h1,h2,h3{font-family:'Switzer',system-ui,sans-serif;letter-spacing:-.035em;line-height:1.04}

.mono{font-family:'Fragment Mono',ui-monospace,monospace;font-size:.71rem;letter-spacing:.14em;text-transform:uppercase}
.tag,.label{color:var(--accent);display:block;margin-bottom:20px}

.skip{position:absolute;left:-9999px;top:0;background:var(--accent);color:var(--on-accent);padding:12px 20px;z-index:2000}
.skip:focus{left:12px;top:12px}

.grain{
  position:fixed;inset:0;z-index:1;pointer-events:none;opacity:var(--grain);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.055'/%3E%3C/svg%3E");
}

/* ---------------- Buttons ---------------- */
.btn{
  position:relative;overflow:hidden;
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  padding:14px 28px;border-radius:999px;border:1px solid transparent;cursor:pointer;
  font-family:'Switzer',system-ui,sans-serif;font-size:.94rem;font-weight:500;letter-spacing:-.01em;
  transition:background .25s var(--ease),color .25s,border-color .25s,transform .3s var(--ease),box-shadow .3s;
}
.btn--accent{background:var(--accent);color:var(--on-accent)}
.btn--accent:hover{background:var(--accent-hi);transform:translateY(-2px);box-shadow:0 14px 34px var(--accent-dim)}
.btn--line,.btn--ghost{border-color:var(--line2);color:var(--text);background:transparent}
.btn--line:hover,.btn--ghost:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-2px)}
.btn--sm{padding:10px 20px;font-size:.87rem}
.btn--lg{padding:17px 34px;font-size:1rem}
.btn--full{width:100%}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}
/* Lichtstreif beim Überfahren */
.btn--accent::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.28) 50%,transparent 65%);
  transform:translateX(-120%);transition:transform .7s var(--ease);
}
.btn--accent:hover::after{transform:translateX(120%)}

/* ---------------- Nav ---------------- */
/* Höhe bewusst KONSTANT — sonst springt das Logo beim Scrollen und
   beim Seitenwechsel um ein paar Pixel. Beim Scrollen ändert sich
   nur Hintergrund und Trennlinie, nie die Abstände. */
.nav{
  position:fixed;inset:0 0 auto 0;z-index:900;
  display:flex;align-items:center;justify-content:space-between;
  /* FESTE HÖHE, sonst springt das Logo beim Seitenwechsel.
     Auf der Startseite stehen rechts die runden Schalter (36 px) und
     der Knopf "Projekt einschicken" — die Leiste wurde dadurch 78 px
     hoch. Auf den Unterseiten steht dort nur ein Textlink, also war
     sie 59 px hoch und das Logo saß 9 px weiter oben. */
  min-height:var(--navh);
  /* Auf breiten Schirmen läuft die Leiste über die volle Breite,
     das Logo soll aber auf derselben Kante stehen wie der
     Seiteninhalt. 50% ist die halbe Leistenbreite — das rechnet
     die Bildlaufleiste automatisch mit heraus. */
  padding:15px max(var(--pad), calc(50% - var(--inner) / 2));
  border-bottom:1px solid transparent;
  transition:background .35s var(--ease),border-color .35s,transform .45s var(--ease);
}
.nav.scrolled,.nav--solid{
  background:var(--navbg);backdrop-filter:blur(16px);
  border-bottom-color:var(--line);
}
/* SOLANGE DAS MENÜ OFFEN IST: kein backdrop-filter, kein transform.
   Beides macht .nav zum Bezugsrahmen für alles, was darin
   position:fixed ist — und das Menü liegt darin. Sobald man auch nur
   ein Stück gescrollt hatte, bekam .nav die Klasse "scrolled" und
   damit den Weichzeichner; das Menü richtete sich dann nicht mehr am
   Fenster aus, sondern an der 88 px hohen Leiste und landete
   unsichtbar rechts daneben. Genau das war auf dem iPhone kaputt.
   Der Weichzeichner fehlt beim offenen Menü nicht: das Menü deckt
   den Bildschirm ohnehin ab. */
.nav.menu-open{
  backdrop-filter:none;-webkit-backdrop-filter:none;
  transform:none;
}
.nav--solid{position:sticky}
/* beim Runterscrollen wegblenden, beim Hochscrollen zurück */
.nav.hide{transform:translateY(-110%)}

.brand{display:inline-flex;align-items:center;gap:11px}
.brand__mark{display:flex;align-items:flex-end;gap:2.5px;height:16px}
.brand__mark i{width:3.5px;border-radius:2px;background:var(--accent);transform-origin:bottom;animation:vu 1.3s ease-in-out infinite}
.brand__mark i:nth-child(1){height:45%;animation-delay:0s}
.brand__mark i:nth-child(2){height:100%;animation-delay:.2s}
.brand__mark i:nth-child(3){height:70%;animation-delay:.4s}
@keyframes vu{0%,100%{transform:scaleY(.3)}50%{transform:scaleY(1)}}
.brand__name{font-family:'Switzer',system-ui,sans-serif;font-weight:600;font-size:1.06rem;letter-spacing:-.025em}

.nav__right{display:flex;align-items:center;gap:22px}
.nav__links{display:flex;align-items:center;gap:30px}
.nav__links a{position:relative;font-size:.94rem;color:var(--muted);transition:color .2s}
.nav__links a:hover{color:var(--text)}
/* Unterstrich wächst aus der Mitte */
.nav__links a:not(.btn)::after{
  content:'';position:absolute;left:50%;right:50%;bottom:-5px;height:1px;
  background:var(--accent);transition:left .3s var(--ease),right .3s var(--ease);
}
.nav__links a:not(.btn):hover::after{left:0;right:0}
.nav__links .btn--accent{color:var(--on-accent)}

/* Umschalter */
.ctrl{display:flex;align-items:center;gap:6px}
.ctrl__btn{
  display:grid;place-items:center;height:36px;min-width:36px;padding:0 9px;
  background:none;border:1px solid var(--line);border-radius:999px;cursor:pointer;
  color:var(--muted);transition:color .25s,border-color .25s,transform .25s var(--ease);
}
.ctrl__btn:hover{color:var(--accent);border-color:var(--accent);transform:translateY(-1px)}
.ctrl__btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.ctrl__btn svg{width:16px;height:16px;fill:currentColor}
/* Im Sprachknopf steht nur die Flagge — die Beschriftung
   trägt das aria-label. */
.ctrl__lang{display:inline-flex;align-items:center;justify-content:center;padding:0 9px}
/* Flaggen — sichtbar ist die Sprache, in der die Seite GERADE
   steht: auf Deutsch die deutsche, auf Englisch die britische. */
.flag{display:block;width:19px;height:13px;border-radius:2px;overflow:hidden;flex:0 0 auto}
.flag svg{display:block;width:100%;height:100%}
:root[lang="de"] .flag--en,
:root[lang="en"] .flag--de{display:none}
.ico-sun{display:none}
:root[data-theme="light"] .ico-sun{display:block}
:root[data-theme="light"] .ico-moon{display:none}

.burger{display:none;flex-direction:column;gap:6px;background:none;border:0;cursor:pointer;padding:6px}
.burger span{width:23px;height:1.5px;background:var(--text);transition:.3s var(--ease)}
.burger.on span:nth-child(1){transform:translateY(3.75px) rotate(45deg)}
.burger.on span:nth-child(2){transform:translateY(-3.75px) rotate(-45deg)}

/* ---------------- Hero ----------------
   Bewusst schlank: Kennzeichen, Name, ein Satz, ein Button. */
.hero{
  position:relative;min-height:100svh;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:120px var(--pad) 90px;overflow:hidden;
}
.hero__glow{
  position:absolute;top:50%;left:50%;translate:-50% -50%;
  width:min(1100px,125vw);height:min(700px,80vh);pointer-events:none;
  background:radial-gradient(ellipse at center,var(--glow),transparent 68%);
  filter:blur(40px);transition:transform .6s var(--ease);
}
.hero__eyebrow{
  position:relative;color:var(--muted);
  font-size:clamp(.82rem,1.35vw,1.05rem);letter-spacing:.22em;
  margin-bottom:clamp(24px,4vh,42px);
}
/* Gold wie im Vorschaubild. Bewusst --accent und NICHT --accent-big:
   die Zeile ist nur 13–17 px groß, zählt also nicht als "große
   Schrift" — da gilt 4,5:1. --accent-big käme im Hellmodus nur auf
   3,45:1 und wäre auf Weiß schlecht zu lesen. Mit --accent sind es
   8,85:1 (dunkel) bzw. 5,01:1 (hell). */
.hero__eyebrow--gold{color:var(--accent)}
.hero__word{
  position:relative;
  font-size:clamp(3.6rem,16vw,12rem);font-weight:800;
  letter-spacing:-.055em;line-height:.86;text-transform:uppercase;
}
.hero__claim{
  position:relative;color:var(--muted);
  font-size:clamp(1.05rem,1.8vw,1.35rem);margin-top:clamp(20px,3.5vh,34px);
}
.hero__cta{
  position:relative;margin-top:clamp(30px,5vh,52px);
  display:flex;align-items:center;justify-content:center;gap:26px;flex-wrap:wrap;
}
.hero__scroll{color:var(--dim);animation:bob 2.6s ease-in-out infinite;transition:color .25s}
.hero__scroll:hover{color:var(--accent)}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}

.wave{
  position:absolute;left:0;right:0;bottom:0;
  display:flex;align-items:flex-end;gap:3px;height:74px;opacity:.32;padding:0 2px;
}
.wave i{
  flex:1;border-radius:2px 2px 0 0;transform-origin:bottom;
  background:linear-gradient(180deg,var(--accent),transparent);
  transition:height .1s linear;
}

/* Einblenden beim Laden */
.an{opacity:0;transform:translateY(20px);animation:rise .95s var(--ease) forwards;animation-delay:var(--d,0s)}
@keyframes rise{to{opacity:1;transform:none}}
.hero>.an:nth-child(2){--d:.08s}
.hero>.an:nth-child(3){--d:.18s}
.hero>.an:nth-child(4){--d:.30s}
.hero>.an:nth-child(5){--d:.40s}

/* ---------------- Laufband ---------------- */
.strip{border-block:1px solid var(--line);background:var(--bg2);padding:19px 0;overflow:hidden}
.strip__track{display:flex;align-items:center;gap:34px;white-space:nowrap;width:max-content;animation:slide 48s linear infinite}
.strip__track span{
  font-family:'Switzer',system-ui,sans-serif;font-size:clamp(1rem,1.7vw,1.32rem);font-weight:500;
  color:var(--dim);letter-spacing:-.02em;transition:color .3s;
}
.strip:hover .strip__track{animation-play-state:paused}
.strip:hover .strip__track span{color:var(--muted)}
.strip__track i{color:var(--accent);font-size:.45rem;font-style:normal;opacity:.6}
@keyframes slide{to{transform:translateX(-50%)}}

/* ---------------- Abschnitte ---------------- */
.sec{
  position:relative;z-index:2;
  max-width:var(--maxw);margin-inline:auto;
  padding:var(--secpad) var(--pad);
}
.sec--alt{max-width:none;background:var(--bg2);border-block:1px solid var(--line)}
.sec--page{padding-top:clamp(48px,7vw,80px)}
.sec--alt>*{max-width:var(--inner);margin-inline:auto}

.sh{
  display:grid;grid-template-columns:1fr minmax(0,34ch);
  gap:0 clamp(24px,5vw,60px);align-items:end;
  margin-bottom:clamp(30px,3.8vw,52px);
}
/* Kopfzeile mit Weiterführung rechts. Bewusst ein Textlink und
   kein Knopf — der Weg zu allen Releases ist die letzte Karte
   der Schiene, das hier ist nur die Abkürzung dorthin. */
.sh--action{grid-template-columns:1fr auto;align-items:baseline}
.sh__all{
  display:inline-flex;align-items:baseline;gap:6px;justify-self:end;
  color:var(--muted);font-size:.95rem;white-space:nowrap;
  padding-bottom:2px;border-bottom:1px solid var(--line2);
  transition:color .25s,border-color .25s;
}
.sh__all:hover{color:var(--accent);border-color:var(--accent)}
.sh__h,.close__h,.submit__title{
  font-family:'Switzer',system-ui,sans-serif;
  font-weight:600;letter-spacing:-.045em;
}
.sh__h{
  font-size:clamp(2.4rem,5.6vw,4.4rem);line-height:1;
  color:var(--accent-big);
}
.sh__note{color:var(--muted);font-size:.97rem;padding-bottom:.6em}

/* ---------------- Auszeichnungen (muso.ai) ----------------
   Stehen im About-Abschnitt unter dem Text, nicht als eigener
   Abschnitt — sonst nehmen sie zu viel Raum ein. */
.creds{
  display:grid;grid-template-columns:1fr 1fr;
  gap:11px;margin-top:clamp(26px,3vw,36px);
}
.cred{
  display:flex;flex-direction:column;gap:5px;
  padding:16px 18px;
  border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);
  transition:border-color .3s,background .3s,transform .3s var(--ease);
}
.cred:hover{border-color:var(--accent);background:var(--surface2);transform:translateY(-2px)}
.cred__rank{
  font-family:'Switzer',system-ui,sans-serif;
  font-size:1.35rem;font-weight:700;
  letter-spacing:-.04em;line-height:1;color:var(--accent-big);
}
.cred__what{color:var(--muted);font-size:.88rem;line-height:1.35}
.cred__src{grid-column:1/-1;color:var(--dim);margin-top:2px}
.cred__src a{color:var(--muted);border-bottom:1px solid var(--line2);transition:color .2s,border-color .2s}
.cred__src a:hover{color:var(--accent);border-color:var(--accent)}

/* ---------------- Releases ---------------- */
.releases{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,2.6vw,36px)}
/* Damit eine Karte mit langen Songtiteln ihre Spalte nicht
   aufbläht — sonst werden die Cover unterschiedlich groß. */
.releases > .rel{min-width:0;display:flex;flex-direction:column}
/* Die Abspiel-Zeile hängt unten fest. Sonst steht sie bei einem
   zweizeiligen Titel tiefer als daneben und die Knöpfe einer
   Reihe stehen auf unterschiedlicher Höhe. */
.rel__rows{margin-top:auto;padding-top:15px}

/* ---- Waagerechte Schiene (Startseite) ----
   Eine Zeile, rund drei Karten sichtbar, der Rest läuft
   nach rechts weiter. Die Schiene ragt bewusst in die
   Seitenränder hinein — dort liegt der weiche Verlauf,
   damit man sieht, dass es weitergeht. */
.rail{position:relative;margin-inline:calc(var(--pad) * -1)}

.releases--rail{
  display:flex;gap:clamp(18px,2vw,26px);
  /* NUR waagerecht scrollen. Ohne das overflow-y:hidden macht der
     Browser die Schiene auch senkrecht scrollbar — dann schiebt man
     auf dem Handy die Karten hoch und runter, statt die Seite zu
     scrollen. */
  overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;
  padding:4px var(--pad) 10px;
  /* mandatory statt proximity: der Wisch landet immer auf einer
     Karte, nie zwischen zweien. */
  scroll-snap-type:x mandatory;scroll-padding-inline:var(--pad);
  scrollbar-width:none;-ms-overflow-style:none;
}
.releases--rail::-webkit-scrollbar{display:none}
.releases--rail > .rel{
  /* min-width:0 ist wichtig: sonst wächst eine Karte über die
     eingestellte Breite hinaus, sobald ihr Inhalt breiter ist
     (lange Songtitel bei Alben) — dann wären die Cover
     unterschiedlich groß. */
  flex:0 0 clamp(255px,26vw,330px);min-width:0;
  scroll-snap-align:start;
}
.releases--rail > .rel:last-child{scroll-snap-align:end}
/* In der Schiene nur einblenden, nicht hochschieben — das
   Hochschieben würde am oberen Rand abgeschnitten. */
.releases--rail .rv{transform:none}

/* Letzte Karte der Schiene: Weg zu allen Releases. Sie sieht aus
   wie eine Karte, ist aber leer — dadurch endet die Reihe klar
   und der Weg weiter ist genau dort, wo man ihn sucht. */
.rel--more{display:flex;flex-direction:column;text-decoration:none}
.rel--more__box{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:6px;text-align:center;
  width:100%;aspect-ratio:1;border-radius:var(--r);
  border:1px dashed var(--line2);background:var(--surface);
  transition:border-color .3s,background .3s,transform .3s var(--ease);
}
.rel--more:hover .rel--more__box{
  border-color:var(--accent);background:var(--surface2);transform:translateY(-3px);
}
.rel--more__n{
  font-family:'Switzer',system-ui,sans-serif;
  font-size:clamp(2.4rem,4vw,3.4rem);font-weight:700;
  letter-spacing:-.05em;line-height:1;color:var(--accent-big);
}
.rel--more__t{color:var(--muted);font-size:.95rem}
.rel--more__go{color:var(--text);margin-top:14px;transition:color .25s}
.rel--more:hover .rel--more__go{color:var(--accent)}

/* Der Schleier an den Rändern. Erscheint nur zu der Seite,
   zu der man auch wirklich weiterscrollen kann. */
.rail::before,.rail::after{
  content:'';position:absolute;top:0;bottom:0;z-index:3;
  width:clamp(28px,7vw,110px);pointer-events:none;
  opacity:0;transition:opacity .45s var(--ease);
  backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);
}
.rail::before{
  left:0;
  background:linear-gradient(90deg,var(--bg) 18%,rgba(0,0,0,0));
  -webkit-mask-image:linear-gradient(90deg,#000 42%,rgba(0,0,0,0));
          mask-image:linear-gradient(90deg,#000 42%,rgba(0,0,0,0));
}
.rail::after{
  right:0;
  background:linear-gradient(270deg,var(--bg) 18%,rgba(0,0,0,0));
  -webkit-mask-image:linear-gradient(270deg,#000 42%,rgba(0,0,0,0));
          mask-image:linear-gradient(270deg,#000 42%,rgba(0,0,0,0));
}
.rail.can-left::before,.rail.can-right::after{opacity:1}

/* Pfeile — liegen über dem Cover, kommen beim Überfahren */
.rail__nav{
  position:absolute;top:clamp(70px,11vw,140px);z-index:4;
  width:44px;height:44px;border-radius:50%;
  display:grid;place-items:center;cursor:pointer;
  border:1px solid var(--line2);background:var(--navbg);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  color:var(--text);box-shadow:var(--shadow);
  opacity:0;transform:scale(.85);pointer-events:none;
  transition:opacity .3s,transform .3s var(--ease),border-color .3s;
}
.rail__nav svg{width:20px;height:20px;fill:currentColor}
.rail__nav--l{left:calc(var(--pad) - 22px)}
.rail__nav--r{right:calc(var(--pad) - 22px)}
.rail.can-left:hover .rail__nav--l,
.rail.can-right:hover .rail__nav--r,
.rail__nav:focus-visible{opacity:1;transform:scale(1);pointer-events:auto}
.rail__nav:hover{border-color:var(--accent);color:var(--accent)}
/* Auf Touch-Geräten wischt man ohnehin */
@media (hover:none){.rail__nav{display:none}}

.rel__cover{
  position:relative;display:block;width:100%;aspect-ratio:1;
  padding:0;border:0;background:none;cursor:pointer;overflow:hidden;
  border-radius:var(--r);
}
.rel__cover img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .6s var(--ease),filter .4s;
}
.rel__cover:hover img{transform:scale(1.04)}
.rel__cover::after{
  content:'';position:absolute;inset:0;background:rgba(6,6,8,.35);
  opacity:0;transition:opacity .35s;
}
.rel__cover:hover::after{opacity:1}
.rel__pl{
  position:absolute;inset:0;margin:auto;width:60px;height:60px;border-radius:50%;
  background:var(--accent);color:var(--on-accent);display:grid;place-items:center;
  opacity:0;transform:scale(.8);transition:.4s var(--ease);z-index:2;
}
.rel__cover:hover .rel__pl{opacity:1;transform:scale(1)}
.rel__pl svg{width:22px;height:22px;fill:currentColor;margin-left:2px}

.rel__title{
  font-family:'Switzer',system-ui,sans-serif;font-size:clamp(1.25rem,1.9vw,1.7rem);font-weight:600;
  letter-spacing:-.035em;margin-top:9px;line-height:1.12;
  /* Titel ohne Leerzeichen wie NOTHING2DOUZE würden sonst
     seitlich aus der Karte laufen. */
  overflow-wrap:anywhere;
}
.rel__artist{color:var(--muted);font-size:.95rem;margin-top:4px}

/* ---- Single / Full Album ----
   Bewusst anders als Titel und Artist: klein, in Versalien,
   in der Monospace-Schrift. Und untereinander klar getrennt —
   das Album ist gefüllt, die Single nur umrandet. */
.rel__tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}
.rel__kind{
  font-family:'Fragment Mono',ui-monospace,monospace;font-size:.63rem;font-weight:400;
  text-transform:uppercase;letter-spacing:.15em;line-height:1;
  padding:6px 9px 5px;border-radius:4px;white-space:nowrap;
}
.rel__kind--album{
  background:var(--accent);color:var(--on-accent);
}
.rel__kind--single{
  border:1px solid var(--line2);color:var(--dim);padding:5px 8px 4px;
}
.rel__kind--tag{
  border:1px solid var(--accent);color:var(--accent);padding:5px 8px 4px;
}

/* Track-Zeilen — IMMER eine Zeile. Bei Alben stehen die
   beiden Songs nebeneinander, sonst wird das Raster
   ungleichmäßig hoch. */
.rel__rows{display:flex;flex-direction:row;gap:8px}
.rel__row{
  display:flex;align-items:center;gap:9px;flex:1 1 0;min-width:0;
  /* Feste Mindesthöhe: bei Alben ist das Symbol kleiner, ohne das
     hier stünde die Zeile ein paar Pixel tiefer als daneben. */
  min-height:45px;
  padding:9px 11px;background:none;cursor:pointer;font:inherit;color:inherit;text-align:left;
  border:1px solid var(--line);border-radius:var(--r-sm);
  transition:border-color .3s,background .3s;
}
.rel__row:hover{border-color:var(--accent);background:var(--surface)}
.rel__row.is-on{border-color:var(--accent);background:var(--accent-dim)}
.rel__ico{
  flex:0 0 auto;width:25px;height:25px;border-radius:6px;display:grid;place-items:center;
  border:1px solid var(--accent);color:var(--accent);transition:background .3s,color .3s;
}
.rel__row:hover .rel__ico,.rel__row.is-on .rel__ico{background:var(--accent);color:var(--on-accent)}
.rel__ico svg{width:11px;height:11px;fill:currentColor;margin-left:1px}
.rel__rt{flex:1;min-width:0;font-size:.87rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rel__rt--all{display:none}   /* nur auf schmalen Schirmen, siehe unten */
/* Bei Alben teilen sich zwei Zeilen die Breite — dort etwas
   enger, damit vom Songtitel mehr lesbar bleibt. */
.rel__rows--2 .rel__row{padding:9px 8px;gap:7px}
.rel__rows--2 .rel__ico{width:21px;height:21px;border-radius:5px}
.rel__rows--2 .rel__rt{font-size:.82rem}
/* Läuft der Song, tritt der Pegel an die Stelle des Play-Symbols,
   statt daneben — sonst bliebe für den Titel kaum Platz. */
.rel__rows--2 .rel__row.is-on .rel__ico{display:none}
.rel__rows--2 .rel__row.is-on .rel__eq{order:-1;margin-left:4px}
/* Pegel nur in der gerade laufenden Zeile */
.rel__eq{display:none;align-items:flex-end;gap:2.5px;height:14px;flex:0 0 auto}
.rel__row.is-on .rel__eq{display:flex}
.rel__eq i{width:3px;background:var(--accent);border-radius:1px;transform-origin:bottom;animation:vu .9s ease-in-out infinite}
.rel__eq i:nth-child(1){height:55%}
.rel__eq i:nth-child(2){height:100%;animation-delay:.16s}
.rel__eq i:nth-child(3){height:70%;animation-delay:.32s}

.rel__live{margin-top:16px;animation:fadein .4s var(--ease)}
.rel__live iframe{display:block;width:100%;height:80px;border:0;border-radius:var(--r-sm)}

.releases__more{margin-top:clamp(36px,5vw,60px)}

/* Laufendes Release: Cover bekommt einen Rahmen */
.rel.is-current .rel__cover{box-shadow:0 0 0 2px var(--accent)}

/* ---------------- Player-Leiste ---------------- */
.pl{
  position:fixed;left:0;right:0;bottom:0;z-index:940;
  background:var(--navbg);backdrop-filter:blur(20px);
  border-top:1px solid var(--line);
  transform:translateY(110%);transition:transform .45s var(--ease);
}
.pl.is-on{transform:none}

/* Fortschritt sitzt als schmale Leiste ganz oben */
.pl__seek{position:relative;height:4px;background:var(--line);cursor:pointer;touch-action:none}
.pl__seek::before{content:'';position:absolute;inset:-9px 0;}
.pl__fill{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--accent);pointer-events:none}
.pl__fill b{
  position:absolute;right:-6px;top:50%;translate:0 -50%;
  width:12px;height:12px;border-radius:50%;background:var(--accent);
  opacity:0;transition:opacity .2s;
}
.pl__seek:hover .pl__fill b{opacity:1}
.pl__buf{position:absolute;inset:0}

/* 1fr auto 1fr — die beiden Außenspalten sind immer gleich breit,
   dadurch sitzt die Bedienung exakt in der Mitte der Leiste,
   egal wie lang der Songtitel links ist. */
.pl__row{
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;
  grid-template-areas:"left ctrls right";
  gap:clamp(12px,2vw,20px);
  /* Die Leiste läuft bewusst über die volle Fensterbreite und
     folgt nicht dem Inhaltsraster — sie gehört zur Bedienung,
     nicht zum Seiteninhalt. Dadurch sitzt Play in der Mitte des
     Fensters und Schließen am äußersten rechten Rand. */
  padding:11px var(--pad);
}
.pl__left{grid-area:left;min-width:0}
.pl__ctrls{grid-area:ctrls;justify-self:center}
.pl__right{grid-area:right}
.pl__left{display:flex;align-items:center;gap:12px;min-width:0}
.pl__right{display:flex;align-items:center;gap:10px;min-width:0;justify-content:flex-end}
.pl__art{width:46px;height:46px;border-radius:8px;object-fit:cover;flex:0 0 auto;background:var(--surface)}
.pl__meta{min-width:0;flex:1}
.pl__t{display:block;font-family:'Switzer',system-ui,sans-serif;font-size:.95rem;font-weight:500;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl__a{display:block;color:var(--muted);font-size:.84rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.pl__ctrls{display:flex;align-items:center;gap:6px;flex:0 0 auto}
.pl__b{
  display:grid;place-items:center;width:38px;height:38px;border-radius:50%;
  background:none;border:0;cursor:pointer;color:var(--muted);
  transition:color .2s,background .2s,transform .2s var(--ease);
}
.pl__b:hover{color:var(--text);background:var(--surface2)}
.pl__b:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pl__b svg{width:18px;height:18px;fill:currentColor}
.pl__b--main{
  width:46px;height:46px;background:var(--accent);color:var(--on-accent);
}
.pl__b--main:hover{background:var(--accent-hi);color:var(--on-accent);transform:scale(1.05)}
.pl__b--main svg{width:20px;height:20px}

.pl__time{color:var(--dim);flex:0 0 auto;font-size:.68rem;letter-spacing:.06em}

/* Der Regler darf schrumpfen — sonst schiebt sich die rechte
   Gruppe bei mittlerer Fensterbreite über die Bedienung. */
.pl__vol{display:flex;align-items:center;gap:6px;flex:0 1 auto;min-width:0}
/* Kann der Browser die Lautstärke gar nicht setzen (iPhone: nur über
   die Hardwaretasten), wird der Regler ausgeblendet — ein Regler, der
   nichts bewirkt, ist schlimmer als keiner. Setzt script.js. */
.pl--novol .pl__vol input{display:none}
.pl__vol input{
  -webkit-appearance:none;appearance:none;flex:0 1 84px;width:84px;min-width:40px;
  height:4px;border-radius:2px;
  background:var(--line);cursor:pointer;
}
.pl__vol input::-webkit-slider-thumb{
  -webkit-appearance:none;width:12px;height:12px;border-radius:50%;
  background:var(--accent);cursor:pointer;
}
.pl__vol input::-moz-range-thumb{width:12px;height:12px;border:0;border-radius:50%;background:var(--accent);cursor:pointer}

/* Schließen soll man auf Anhieb erkennen: eigener Rahmen,
   abgesetzt durch einen Strich, mit Wort daneben, und beim
   Überfahren wird es rot. */
.pl__x{
  width:34px;height:34px;border-radius:50%;flex:0 0 auto;
  border:1px solid var(--line2);color:var(--muted);
  margin-left:8px;position:relative;
  /* Sitzt weiter außen als der übrige Inhalt — bis auf 24 px an
     den Fensterrand, ohne dass die Bedienung aus der Mitte rutscht
     (die Rasterspalten bleiben davon unberührt). */
  margin-right:calc(-1 * max(0px, var(--pad) - 24px));
  transition:color .2s,border-color .2s,background .2s;
}
.pl__x::before{
  content:'';position:absolute;left:-9px;top:5px;bottom:5px;
  width:1px;background:var(--line);
}
.pl__x svg{width:13px;height:13px}
.pl__x:hover{border-color:var(--danger);color:var(--danger);background:transparent}

/* Platz schaffen, damit der Footer nicht unter der Leiste klebt */
body:has(.pl.is-on){padding-bottom:76px}

/* ---------------- Preise ----------------
   Karten zum Aufklappen: oben Name, Lieferzeit und Preis,
   darunter auf Klick die Einzelheiten. */
.rates{display:flex;flex-direction:column;gap:clamp(12px,1.4vw,16px)}
.rate{
  border:1px solid var(--line);border-radius:var(--r);
  background:var(--surface);
  transition:border-color .3s,background .3s;
}
.rate:hover{border-color:var(--line2)}
.rate.is-open{border-color:var(--accent)}

.rate__row{
  width:100%;display:grid;
  grid-template-columns:1fr auto 20px;
  grid-template-areas:
    "name  price chev"
    "meta  price chev";
  gap:6px clamp(18px,2.6vw,36px);text-align:left;
  background:none;border:0;color:inherit;font:inherit;
  padding:clamp(22px,2.5vw,30px) clamp(20px,2.4vw,32px);cursor:pointer;
}
.rate__row:hover .rate__name{color:var(--accent)}
.rate__name{
  grid-area:name;align-self:end;
  font-family:'Switzer',system-ui,sans-serif;
  font-size:clamp(1.3rem,2vw,1.8rem);font-weight:600;
  letter-spacing:-.04em;line-height:1.15;transition:color .25s;
}
/* Ein Satz zur Leistung — deshalb normale Schrift und keine
   gesperrten Versalien, das ließe sich schlecht lesen. */
.rate__meta{
  grid-area:meta;align-self:start;color:var(--muted);
  font-family:'Switzer',system-ui,sans-serif;font-size:.93rem;
  letter-spacing:normal;text-transform:none;line-height:1.45;max-width:52ch;
}
.rate__price{
  grid-area:price;align-self:center;
  font-family:'Switzer',system-ui,sans-serif;
  font-size:clamp(1.8rem,2.8vw,2.4rem);
  font-weight:700;letter-spacing:-.045em;white-space:nowrap;line-height:1;
}
.rate__price em{
  color:var(--dim);font-style:normal;font-weight:400;margin-left:6px;
  font-size:.8rem;letter-spacing:0;
}
.rate__chev{
  grid-area:chev;align-self:center;justify-self:end;
  width:11px;height:11px;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);
  transform:rotate(45deg);transition:transform .35s var(--ease),border-color .25s;
}
.rate.is-open .rate__chev{transform:rotate(-135deg);border-color:var(--accent)}

.rate__more{display:grid;grid-template-rows:0fr;transition:grid-template-rows .42s var(--ease)}
.rate.is-open .rate__more{grid-template-rows:1fr}
.rate__inner{overflow:hidden}
.rate__inner>*{margin:0 clamp(20px,2.4vw,32px) 24px}
/* Die Trennlinie gehört über den AUSGEKLAPPTEN Inhalt — nicht über
   einen Knopf. Bei "Noch unsicher?" steht der Knopf ganz oben; dort
   lief die Linie quer über die Pille und die 24 px Innenabstand
   haben sie zusätzlich in die Länge gezogen. */
.rate__inner>*:first-child:not(.btn){padding-top:24px;border-top:1px solid var(--line)}
.rate__inner>.btn:first-child{margin-top:26px}
.rate__inner>*:last-child{margin-bottom:clamp(22px,2.5vw,30px)}
.rate__desc{color:var(--muted);font-size:.97rem;max-width:60ch}

/* Beschriftung links und erste Zeile rechts bekommen DIESELBE
   Zeilenhöhe (28 px). Dadurch stehen beide auf einer Linie, obwohl
   die Schriftgrößen unterschiedlich sind — jeder Text sitzt mittig
   in seinem gleich hohen Zeilenkasten.
   Mit baseline-Ausrichtung säße die kleine Beschriftung dagegen am
   unteren Rand der großen Zeile und wirkte abgesackt. */
.deliv>div{display:grid;grid-template-columns:140px 1fr;gap:20px;padding:14px 0;border-top:1px solid var(--line);align-items:start}
.deliv dt{color:var(--dim);line-height:28px}
.deliv dd{font-size:.95rem;color:var(--muted);line-height:28px}
/* Die Lieferzeit soll man erfassen, ohne den Satz zu lesen —
   deshalb steht sie allein in der ersten Zeile, der Zusatz
   kleiner darunter. */
.deliv__lead{display:block;color:var(--text);font-size:1.05rem;font-weight:600;line-height:28px;margin-bottom:4px}
.deliv__note{display:block;font-size:.9rem;color:var(--dim);line-height:1.55}
/* Zweiter Hinweis bekommt einen eigenen Absatz */
.deliv__note+.deliv__note{margin-top:9px}
.deliv strong{color:var(--text);font-weight:600}

.incl{list-style:none;display:flex;flex-direction:column;gap:9px}
.incl li{display:flex;gap:11px;align-items:flex-start;color:var(--muted);font-size:.94rem}
/* Feste Breite und zentriert — sonst startet der Text je nach
   Zeichen (Haken oder Unendlich) an einer anderen Stelle. */
.incl li::before{
  content:'✓';color:var(--accent);font-weight:700;
  flex:0 0 18px;width:18px;text-align:center;line-height:1.5;
}
/* Revisionen bis zur Abnahme sind unbegrenzt */
.incl li.incl--inf::before{content:'∞';font-size:1.5em;line-height:.95;font-weight:400}

/* ---------------- Ablauf ---------------- */
.chain{list-style:none;position:relative;padding-left:32px;max-width:70ch}
.chain::before{content:'';position:absolute;left:4px;top:8px;bottom:8px;width:1px;background:linear-gradient(180deg,var(--accent),var(--line) 62%)}
.node{position:relative;padding-bottom:44px}
.node:last-child{padding-bottom:0}
.node__dot{position:absolute;left:-32px;top:5px;width:9px;height:9px;border-radius:50%;background:var(--bg);border:1.5px solid var(--accent)}
.node.in .node__dot{animation:ping .8s var(--ease)}
@keyframes ping{0%{box-shadow:0 0 0 0 var(--accent-dim)}100%{box-shadow:0 0 0 12px transparent}}
.node__idx{color:var(--accent);margin-bottom:11px;display:block}
.node__h{font-size:1.26rem;font-weight:500;margin-bottom:9px}
.node__p{color:var(--muted);font-size:.97rem}

/* ---------------- Studio ---------------- */
.studio{display:grid;grid-template-columns:1.15fr 1fr;gap:clamp(34px,5vw,70px);align-items:start}
.lead{font-family:'Switzer',system-ui,sans-serif;font-size:clamp(1.18rem,1.9vw,1.45rem);font-weight:400;line-height:1.42;letter-spacing:-.028em;margin-bottom:24px}
.studio__text p{color:var(--muted);margin-bottom:17px}
.kit{border-top:1px solid var(--line)}
.kit>div{display:grid;grid-template-columns:118px 1fr;gap:18px;padding:15px 0;border-bottom:1px solid var(--line);transition:padding-left .3s var(--ease)}
.kit>div:hover{padding-left:8px}
.kit dt{color:var(--accent);padding-top:2px}
.kit dd{color:var(--muted);font-size:.94rem}

/* ---------------- FAQ ---------------- */
.faq{border-top:1px solid var(--line);max-width:80ch}
.qa{border-bottom:1px solid var(--line)}
.qa summary{
  list-style:none;cursor:pointer;padding:24px 40px 24px 0;position:relative;
  font-family:'Switzer',system-ui,sans-serif;font-size:1.08rem;font-weight:500;letter-spacing:-.025em;
  transition:color .25s,padding-left .3s var(--ease);
}
.qa summary::-webkit-details-marker{display:none}
.qa summary:hover{color:var(--accent);padding-left:10px}
.qa summary::after{
  content:'';position:absolute;right:6px;top:50%;width:10px;height:10px;
  border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);
  transform:translateY(-70%) rotate(45deg);transition:transform .3s var(--ease),border-color .25s;
}
.qa[open] summary{color:var(--accent)}
.qa[open] summary::after{transform:translateY(-30%) rotate(-135deg);border-color:var(--accent)}
.qa p{color:var(--muted);font-size:.97rem;padding:0 40px 26px 0;max-width:70ch;animation:fadein .35s var(--ease)}

/* ---------------- Abschluss ---------------- */
.close{
  position:relative;z-index:2;border-top:1px solid var(--line);
  padding:clamp(64px,8.5vw,116px) var(--pad);
  background:radial-gradient(ellipse 70% 140% at 50% 100%,var(--glow),transparent 68%);
}
.close__inner{max-width:var(--inner);margin-inline:auto}
.close__h{font-size:clamp(2.2rem,5.2vw,4rem);line-height:1}
.close__p{color:var(--muted);margin:22px 0 38px;max-width:44ch}

/* ---------------- Footer ---------------- */
.footer{position:relative;z-index:2;border-top:1px solid var(--line);background:var(--bg2);padding:clamp(50px,7vw,80px) var(--pad) 28px}
.footer__grid{
  max-width:var(--inner);margin:0 auto clamp(40px,6vw,64px);
  display:grid;grid-template-columns:1.6fr repeat(3,1fr);gap:clamp(26px,4vw,50px);
}
.footer__blurb{color:var(--muted);font-size:.93rem;margin-top:16px;max-width:32ch}
.footer__col{display:flex;flex-direction:column;gap:11px}
.footer__ct{color:var(--dim);margin-bottom:5px}
.footer__col a{color:var(--muted);font-size:.94rem;transition:color .2s,transform .2s var(--ease)}
.footer__col a:hover{color:var(--accent);transform:translateX(3px)}
.footer__bot{
  max-width:var(--inner);margin-inline:auto;padding-top:24px;border-top:1px solid var(--line);
  display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;color:var(--dim);
}
.footer__bot a:hover{color:var(--accent)}

/* =========================================================
   FORMULAR UND RECHTLICHES
   ========================================================= */
.page-submit{background:var(--bg)}
.submit{position:relative;z-index:2;max-width:1040px;margin-inline:auto;padding:clamp(46px,7vw,80px) var(--pad) 90px}
.submit__intro{margin-bottom:clamp(34px,5vw,50px)}
.submit__title{font-size:clamp(2rem,4.4vw,3.1rem);line-height:1.02;color:var(--accent-big)}
.submit__lead{color:var(--muted);margin-top:20px;max-width:52ch;font-size:1.02rem}

.prog{margin-bottom:38px}
.prog__bar{height:2px;background:var(--line);border-radius:2px;overflow:hidden}
.prog__bar span{display:block;height:100%;width:25%;background:var(--accent);transition:width .5s var(--ease)}
.prog__steps{list-style:none;display:flex;justify-content:space-between;gap:8px;margin-top:14px}
.prog__steps li{color:var(--dim);transition:color .3s}
.prog__steps li.is-active{color:var(--accent)}
.prog__steps li.is-done{color:var(--muted)}

/* Die Mindesthöhe der Schritte 2 bis 4 setzt script.js zur
   Laufzeit auf die Höhe des längsten — sonst wandern die Knöpfe
   darunter bei jedem "Weiter" ein Stück. */
.wizard{display:flex;flex-direction:column}
.wizard>.step-panel{flex:1 1 auto}
.step-panel{border:0;display:none}
.step-panel.is-active{display:block;animation:fadein .42s var(--ease)}
@keyframes fadein{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.step-panel__title{font-family:'Switzer',system-ui,sans-serif;font-size:clamp(1.4rem,3vw,1.95rem);font-weight:600;letter-spacing:-.035em;margin-bottom:26px;padding:0}

/* Zwei Spalten: vier Leistungen ergeben ein sauberes 2x2.
   grid-auto-rows:1fr macht beide Reihen gleich hoch. */
.picks{display:grid;grid-template-columns:1fr 1fr;gap:12px;grid-auto-rows:1fr}
.pick{display:flex}
/* Alle Karten gleich groß: feste Zahl an Spalten und
   grid-auto-rows:1fr, damit auch die zweite Reihe dieselbe Höhe
   bekommt. Innen überall derselbe Aufbau — Name, Preis, ein Satz —
   sonst rutscht der Preis bei langen Namen in die nächste Zeile. */
.pick{display:flex;cursor:pointer}
.pick input{position:absolute;opacity:0;width:0;height:0}
.pick__box{
  display:flex;flex-direction:column;gap:7px;width:100%;
  padding:22px 24px;border:1px solid var(--line);border-radius:var(--r);
  background:var(--surface);transition:border-color .25s,background .25s;
}
.pick:hover .pick__box{border-color:var(--line2)}
.pick input:checked + .pick__box{border-color:var(--accent);background:var(--surface2)}
.pick input:focus-visible + .pick__box{outline:2px solid var(--accent);outline-offset:2px}
.pick__name{
  font-family:'Switzer',system-ui,sans-serif;font-size:1.15rem;font-weight:600;
  letter-spacing:-.03em;line-height:1.2;
}
.pick__price{display:block;color:var(--accent)}
.pick__desc{display:block;color:var(--muted);font-size:.92rem;line-height:1.45;margin-top:3px}

/* Konfigurator */
/* Der Abstand steht in einer Variablen, weil ZWEI Dinge ihn brauchen:
   die Trennlinie über den Optionen und der Preiskasten rechts. Beide
   sollen oben auf einer Linie liegen — mit zwei getrennten Werten
   wandern sie beim nächsten Umbau auseinander. */
:root{--optsgap:30px}
.opts{margin-top:var(--optsgap);padding-top:28px;border-top:1px solid var(--line);animation:fadein .42s var(--ease)}
.opts__head{color:var(--accent);margin-bottom:22px}

/* Rechte Spalte in Schritt 1: Preis läuft beim Scrollen mit,
   darunter was ohnehin dabei ist. */
/* margin-top schiebt den Kasten auf dieselbe Höhe wie die Trennlinie
   links — sonst steht er 30 px darüber und die Spalten wirken versetzt. */
.side{position:sticky;top:96px;margin-top:var(--optsgap);display:flex;flex-direction:column;gap:16px}
/* In der schmalen Spalte untereinander statt nebeneinander */
.side .est{margin:0;flex-direction:column;align-items:flex-start;gap:14px}
.side .est__n{text-align:left;max-width:none}
.side .est__v{font-size:2.4rem}
.side__incl{
  border:1px solid var(--line);border-radius:var(--r);
  background:var(--surface);padding:20px 22px;
}
.side__h{color:var(--dim);margin-bottom:14px}
.opts .incl{margin-bottom:30px}
.opts__go{color:var(--muted);font-size:.95rem;margin:4px 0 22px;max-width:52ch}
/* Deutlich getrennt statt bloß untereinander: mehr Luft und eine
   feine Linie. Vorher liefen die Auswahlgruppen optisch ineinander
   und man musste die Beschriftungen lesen, um zu sehen, wo eine
   Frage aufhört und die nächste anfängt. */
.optgrp{margin-bottom:30px;padding-bottom:30px;border-bottom:1px solid var(--line);min-width:0}
.optgrp:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}
.optgrp__label{color:var(--muted);display:block;margin-bottom:14px}

.qty{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:999px;background:var(--surface);overflow:hidden}
/* Kompakt gehalten: daneben stehen noch Rabattschalter und Hilfe */
.qty button{width:38px;height:44px;background:none;border:0;cursor:pointer;color:var(--muted);font-size:1.2rem;line-height:1;transition:background .2s,color .2s}
.qty button:hover{background:var(--surface2);color:var(--accent)}
.qty input{
  width:46px;height:44px;text-align:center;background:none;border:0;
  color:var(--text);font-family:'Switzer',system-ui,sans-serif;font-size:1.05rem;font-weight:600;-moz-appearance:textfield;
}
.qty input::-webkit-outer-spin-button,.qty input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.qty input:focus{outline:none}

/* Eine Spalte, volle Breite: alle Auswahlknöpfe gleich breit,
   Beschriftung links, Aufpreis rechts. Nebeneinander wären sie
   so schmal, dass die Texte drei Zeilen brauchen. */
/* ---- Songzahl und Mengenrabatt in einer Zeile ---- */
.qtyrow{display:flex;align-items:center;gap:9px;flex-wrap:wrap;position:relative}

.disc{display:flex;cursor:pointer}
.disc input{position:absolute;opacity:0;width:0;height:0}
.disc__box{
  display:flex;align-items:center;gap:8px;height:44px;
  padding:0 15px;border:1px solid var(--line);border-radius:999px;
  background:var(--surface);color:var(--muted);font-size:.88rem;white-space:nowrap;
  transition:border-color .25s,background .25s,color .25s;
}
/* Kästchen links im Knopf */
.disc__box::before{
  content:'';flex:0 0 auto;width:16px;height:16px;border-radius:5px;
  border:1.5px solid var(--line2);
  background:no-repeat center/11px 11px;
  transition:background-color .2s,border-color .2s;
}
.disc:hover .disc__box{border-color:var(--line2);color:var(--text)}
.disc input:checked + .disc__box{border-color:var(--accent);background:var(--accent-dim);color:var(--accent)}
.disc input:checked + .disc__box::before{
  border-color:var(--accent);background-color:var(--accent);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6.2 11.8 2.9 8.5l1.2-1.2 2.1 2.1 5.7-5.7 1.2 1.2z' fill='%23000'/%3E%3C/svg%3E");
}
.disc input:focus-visible + .disc__box{outline:2px solid var(--accent);outline-offset:2px}
.disc input:disabled + .disc__box{opacity:.5;cursor:not-allowed}
.disc.is-off{cursor:not-allowed}
.disc__p{font-family:'Fragment Mono',ui-monospace,monospace;font-size:.72rem;font-style:normal;letter-spacing:.06em}

/* Fragezeichen mit Erklärung */
.hlp{
  width:26px;height:26px;flex:0 0 auto;border-radius:50%;cursor:pointer;
  border:1px solid var(--line2);background:none;color:var(--muted);
  font-family:'Switzer',system-ui,sans-serif;font-size:.82rem;line-height:1;
  transition:border-color .2s,color .2s;
}
.hlp:hover,.hlp[aria-expanded="true"]{border-color:var(--accent);color:var(--accent)}
.hlp__box{
  position:absolute;top:calc(100% + 10px);left:0;z-index:70;
  width:min(340px,100%);
  padding:16px 18px;border:1px solid var(--line2);border-radius:var(--r);
  background:var(--surface);box-shadow:var(--shadow);
  animation:fadein .18s var(--ease);
}
.hlp__box p{color:var(--muted);font-size:.88rem;line-height:1.55}
.hlp__box p + p{margin-top:10px}

.segs{display:flex;flex-direction:column;gap:8px}
.seg{cursor:pointer}
.seg input{position:absolute;opacity:0;width:0;height:0}
.seg>span{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  height:100%;
  padding:13px 18px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);color:var(--muted);font-size:.93rem;line-height:1.35;
  transition:border-color .25s,background .25s,color .25s;
}
.seg:hover>span{border-color:var(--line2);color:var(--text)}
.seg input:checked+span{border-color:var(--accent);background:var(--accent-dim);color:var(--accent)}
.seg input:focus-visible+span{outline:2px solid var(--accent);outline-offset:2px}
/* Der Aufpreis steht rechts am Rand des Knopfes */
.seg__add{
  font-family:'Fragment Mono',ui-monospace,monospace;font-size:.72rem;font-style:normal;
  letter-spacing:.06em;opacity:.85;white-space:nowrap;flex:0 0 auto;margin-left:auto;
}

.est{
  margin-top:30px;padding:22px 24px;
  border:1px solid var(--line);border-left:2px solid var(--accent);border-radius:var(--r);
  background:var(--surface);
  display:flex;justify-content:space-between;align-items:flex-end;gap:22px;flex-wrap:wrap;
}
.est__k{color:var(--accent);margin-bottom:8px}
.est__v{font-family:'Switzer',system-ui,sans-serif;font-size:2rem;font-weight:600;letter-spacing:-.04em;line-height:1}
.est__sub{color:var(--dim);margin-top:9px}
/* Abgezogener Mengenrabatt unter dem Preis */
.est__cut{color:var(--accent);margin-top:6px}
.est__v s{color:var(--dim);font-weight:400;font-size:.55em;margin-right:8px;text-decoration-thickness:1px}
.est__n{color:var(--dim);font-size:.82rem;line-height:1.5;max-width:34ch;text-align:right}

.row{display:grid;grid-template-columns:1fr 1fr;gap:20px}
/* Zwei ungleiche Spalten: links die Eingaben, rechts der Kasten
   mit Vorgaben bzw. der Zusammenfassung. */
.split{display:grid;grid-template-columns:1fr minmax(0,340px);gap:clamp(22px,3vw,38px);align-items:start}
/* Hinweis unter der Deadline, wenn dadurch Express nötig wird */
.hint.is-warn{color:var(--accent)}
/* Der Kasten rechts bleibt beim Scrollen stehen.
   WICHTIG ist die Höhenbegrenzung: Ist ein sticky-Element höher als
   der Platz zwischen top und Fensterunterkante, kann es gar nicht
   kleben — es wandert dann ganz nach oben aus dem Bild. Genau das
   passierte mit "Bitte so anliefern" (537 px) auf Bildschirmen unter
   rund 640 px Höhe. Jetzt wird der Kasten notfalls innen scrollbar. */
.split .summary,.split .specbox{
  margin:0;position:sticky;top:96px;
  max-height:calc(100vh - 120px);
  overflow:auto;overscroll-behavior:contain;
}
.fld{display:flex;flex-direction:column;gap:9px;margin-bottom:22px}
/* Zwei Zeilen Platz für die Beschriftung — sonst stehen die Felder
   einer Reihe versetzt, sobald eine Beschriftung umbricht.
   Gilt auch für .fld__lbl: der Kalenderknopf hat keine <label>,
   sonst säße er höher als das Feld daneben. */
.row .fld label,.row .fld .fld__lbl{min-height:2.6em;display:flex;align-items:flex-end}
/* .check ist ausgenommen: dort muss die Zeilenhöhe aus .check gelten,
   sonst sitzt das Kästchen nicht auf der Mitte der ersten Zeile. */
.fld label:not(.check),.fld__lbl{color:var(--muted);line-height:1.3}
.fld .opt{text-transform:none;letter-spacing:0;color:var(--dim)}
.fld input,.fld select,.fld textarea{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:14px 16px;color:var(--text);font-family:'Switzer',system-ui,sans-serif;font-size:1rem;
  transition:border-color .25s,background .25s;resize:vertical;width:100%;
}
.fld input:focus,.fld select:focus,.fld textarea:focus{outline:none;border-color:var(--accent);background:var(--surface2)}
.fld input::placeholder,.fld textarea::placeholder{color:var(--dim)}
/* Datums- und Zeitfelder: der native Kalender folgt dem Design
   nur, wenn color-scheme passt — sonst poppt ein weißer Kalender
   auf der dunklen Seite auf. */
input[type=date],input[type=time]{color-scheme:dark}
:root[data-theme="light"] input[type=date],
:root[data-theme="light"] input[type=time]{color-scheme:light}

/* Auch das Datumsfeld im Konfigurator sieht aus wie die übrigen
   Felder — vorher stand dort das rohe Browser-Feld. */
/* ---- Eigener Kalender ----
   Das Datumsfeld des Browsers klappt ein Fenster auf, das sich
   nicht gestalten lässt. Deshalb hier ein eigener Kalender in
   der Formensprache der Seite. */
.optgrp--date{position:relative}
.dp__trigger{
  display:inline-flex;align-items:center;justify-content:space-between;gap:14px;
  min-width:230px;
  background:var(--surface);border:1px solid var(--line2);
  border-radius:var(--r-sm);padding:12px 16px;cursor:pointer;
  color:var(--text);font-family:'Switzer',system-ui,sans-serif;font-size:.95rem;
  transition:border-color .25s,background .25s;
}
.dp__trigger:hover{border-color:var(--accent)}
.dp__trigger[aria-expanded="true"]{border-color:var(--accent);background:var(--surface2)}
.dp__trigger svg{width:16px;height:16px;fill:var(--dim);flex:0 0 auto}
.dp__trigger:hover svg{fill:var(--accent)}
.dp__val.is-empty{color:var(--dim)}

/* Fest am Fenster statt am Elternelement — sonst schneidet der
   Body den Kalender unten ab (er ist wegen overflow-x:hidden ein
   eigener Scrollbereich). Die Koordinaten setzt script.js. */
.dp{
  position:fixed;z-index:980;width:min(320px,92vw);
  overflow:auto;overscroll-behavior:contain;
  background:var(--surface);border:1px solid var(--line2);
  border-radius:var(--r);box-shadow:var(--shadow);
  padding:16px;animation:fadein .18s var(--ease);
  /* Muss das Fenster innen scrollen, soll die Leiste schmal und
     dunkel sein — die weiße Standardleiste des Systems zerreißt
     das Bild. */
  scrollbar-width:thin;scrollbar-color:var(--line2) transparent;
}
.dp::-webkit-scrollbar{width:8px;height:8px}
.dp::-webkit-scrollbar-track{background:transparent}
.dp::-webkit-scrollbar-thumb{background:var(--line2);border-radius:99px}
.dp::-webkit-scrollbar-thumb:hover{background:var(--dim)}

.dp__head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.dp__month{
  font-family:'Switzer',system-ui,sans-serif;font-size:1rem;font-weight:600;
  letter-spacing:-.02em;text-transform:capitalize;
}
.dp__nav{
  width:30px;height:30px;border-radius:50%;flex:0 0 auto;
  border:1px solid var(--line);background:none;color:var(--muted);
  font-size:1.15rem;line-height:1;cursor:pointer;
  transition:border-color .2s,color .2s;
}
.dp__nav:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
.dp__nav:disabled{opacity:.3;cursor:not-allowed}

.dp__wd,.dp__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.dp__wd{margin-bottom:6px}
.dp__wd span{
  text-align:center;color:var(--dim);
  font-family:'Fragment Mono',ui-monospace,monospace;font-size:.62rem;letter-spacing:.06em;
}
.dp__d{
  aspect-ratio:1;border:0;border-radius:8px;background:none;cursor:pointer;
  color:var(--text);font-family:'Switzer',system-ui,sans-serif;font-size:.88rem;
  transition:background .2s,color .2s;
}
.dp__d:hover:not(:disabled){background:var(--accent-dim);color:var(--accent)}
.dp__d:disabled{color:var(--dim);opacity:.35;cursor:not-allowed}
.dp__d.is-today:not(.is-sel){box-shadow:inset 0 0 0 1px var(--line2)}
.dp__d.is-sel{background:var(--accent);color:var(--on-accent);font-weight:600}

.dp__foot{margin-top:12px;padding-top:12px;border-top:1px solid var(--line);text-align:right}
.dp__clear{
  background:none;border:0;cursor:pointer;color:var(--muted);
  font-family:'Fragment Mono',ui-monospace,monospace;
  font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;
  transition:color .2s;
}
.dp__clear:hover{color:var(--accent)}

.optgrp--date .hint{display:block;margin-top:11px;max-width:46ch}
/* Der Kalenderknopf muss beim Fehler mit rot werden — das versteckte
   Feld dahinter hat ja keinen Rahmen, den man sehen könnte. */
.fld.bad input,.fld.bad textarea,.fld.bad .dp__trigger{border-color:#e2615c}
.hint{color:var(--dim);text-transform:none;letter-spacing:.02em;font-size:.72rem;line-height:1.55}
.err{color:#ef8a86;font-size:.85rem;min-height:1.1em}

/* Startzeit-Auswahl: liegt im selben Fenster wie der Kalender,
   nur mit einem Raster aus Zeitblöcken statt Tagen. */
.tp{
  padding:12px;
  /* Bewusst niedriger als der Kalender: sonst klebt das Fenster bei
     vielen Startzeiten am oberen Bildschirmrand und steht weit weg
     von dem Feld, zu dem es gehört. Lieber innen scrollen. */
  max-height:min(330px,60vh);
}
/* Eine Zeit pro Zeile: Beginn links, Ende rechts. Nebeneinander
   war es zwar kompakter, aber schlechter zu lesen — man sucht die
   Uhrzeit, und untereinander läuft der Blick eine Spalte runter. */
.tp__grid{
  display:flex;flex-direction:column;gap:5px;
  /* 100% statt fester Breite: sobald innen gescrollt wird, nimmt die
     Bildlaufleiste Platz weg — bei fester Breite entstand dadurch
     zusätzlich eine waagerechte Leiste am unteren Rand. */
  width:100%;
}
.tp__t{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:10px 13px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);cursor:pointer;text-align:left;
  transition:border-color .2s,background .2s,color .2s;
}
.tp__t:hover{border-color:var(--accent);background:var(--surface2)}
.tp__t.is-sel{border-color:var(--accent);background:var(--accent-dim)}
.tp__von{
  font-family:'Fragment Mono',ui-monospace,monospace;font-size:.92rem;
  color:var(--text);letter-spacing:.02em;
}
.tp__t.is-sel .tp__von{color:var(--accent)}
.tp__bis{
  font-family:'Fragment Mono',ui-monospace,monospace;font-size:.7rem;
  color:var(--dim);letter-spacing:.04em;white-space:nowrap;
}
.dp__trigger:disabled{opacity:.55;cursor:not-allowed}
.dp__trigger:disabled:hover{border-color:var(--line)}

/* Upload in Lukens Dropbox: Knopf, gewünschter Dateiname, Hinweis */
.drop{
  display:flex;flex-direction:column;align-items:flex-start;gap:12px;
  border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);padding:20px 22px;
}
.drop__t{color:var(--muted);font-size:.9rem;line-height:1.4}
/* Gleicher Abstand über und unter dem Haken. Die 9px darüber kommen
   aus dem gap des .fld, darunter steht sonst nur die leere
   Fehlerzeile — das sah unten doppelt so luftig aus. */
.drop__ok{margin:5px 0 0}
.drop__f{
  align-self:stretch;
  color:var(--accent);font-size:.8rem;text-transform:none;letter-spacing:.04em;
  background:var(--bg2);border:1px dashed var(--line2);border-radius:var(--r-sm);
  padding:11px 13px;
  /* Lange Namen dürfen den Kasten nicht sprengen. */
  overflow-wrap:anywhere;
}

.specbox{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:24px 26px;margin-bottom:22px}
.specbox__head{color:var(--accent);margin-bottom:15px}
.specbox__list{list-style:none;display:flex;flex-direction:column;gap:11px}
.specbox__list li{position:relative;padding-left:20px;color:var(--muted);font-size:.93rem}
.specbox__list li::before{content:'';position:absolute;left:0;top:.62em;width:5px;height:5px;background:var(--accent);border-radius:50%}
.specbox__list strong{color:var(--text);font-weight:500}
.specbox__list em{font-family:'Fragment Mono',ui-monospace,monospace;font-style:normal;font-size:.85em;color:var(--text)}
/* Bestätigung steht direkt unter den Vorgaben, nicht davor */
.specbox__ok{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}

.check{
  display:flex;gap:13px;align-items:flex-start;cursor:pointer;
  margin-bottom:6px;font-size:.93rem;line-height:1.45;color:var(--muted);
}
.check input{
  appearance:none;flex:0 0 20px;width:20px;height:20px;
  /* padding:0 ist PFLICHT: .fld input setzt 14px/16px Innenabstand für
     die Textfelder. Steht ein Kästchen in einem .fld, wurde daraus
     sonst ein 34 x 30 großes Rechteck statt eines Quadrats. */
  padding:0;
  /* Auf die Mitte der ERSTEN Textzeile setzen, nicht auf die Mitte
     des ganzen (womöglich mehrzeiligen) Textes. */
  margin-top:calc((1.45em - 20px) / 2);
  border:1px solid var(--line2);border-radius:5px;background:var(--surface);
  cursor:pointer;transition:.2s;position:relative;
}
.check input:checked{background:var(--accent);border-color:var(--accent)}
.check input:checked::after{content:'✓';position:absolute;inset:0;display:grid;place-items:center;color:var(--on-accent);font-size:.78rem;font-weight:700}
.check a{color:var(--accent);text-decoration:underline}

.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.summary{border:1px solid var(--line);border-left:2px solid var(--accent);border-radius:var(--r);background:var(--surface);padding:22px 24px;margin:26px 0 22px}
.summary h4{font-family:'Fragment Mono',ui-monospace,monospace;font-size:.71rem;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);font-weight:400;margin-bottom:15px}
.summary dl{display:grid;grid-template-columns:auto 1fr;gap:9px 20px;font-size:.93rem}
.summary dt{color:var(--muted)}
.summary dd{text-align:right;word-break:break-word}
/* Der Preis steht ganz unten und deutlich abgesetzt */
.summary__total{
  display:flex;align-items:baseline;justify-content:space-between;gap:16px;
  margin-top:20px;padding-top:18px;border-top:1px solid var(--line2);
}
.summary__total span{color:var(--dim)}
.summary__total strong{
  font-family:'Switzer',system-ui,sans-serif;font-size:1.9rem;font-weight:700;
  letter-spacing:-.045em;line-height:1;color:var(--accent-big);
}

.wizard__nav{display:flex;gap:12px;margin-top:32px;padding-top:26px;border-top:1px solid var(--line)}
.wizard__nav .btn{flex:1}
#btnBack{flex:0 0 auto}
.formnote{margin-top:18px;text-align:center;color:var(--muted);min-height:1.2em;text-transform:none;letter-spacing:.02em;font-size:.8rem}
.formnote.bad{color:#ef8a86}

/* Der Bestätigungsbildschirm stand sehr weit unten — man musste erst
   scrollen, um "Anfrage raus" überhaupt zu sehen. Jetzt beginnt er
   direkt unter der Kopfleiste. */
.done{text-align:center;padding:clamp(26px,4vw,48px) 0 clamp(40px,6vw,70px)}
.done__mark{width:68px;height:68px;margin:0 auto 34px;border-radius:50%;border:1px solid var(--accent);color:var(--accent);display:grid;place-items:center;font-size:1.8rem;animation:pop .55s var(--ease)}
@keyframes pop{from{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}
.done__title{font-size:clamp(1.8rem,4vw,2.7rem);font-weight:700;letter-spacing:-.042em}
.done__text{color:var(--muted);margin:16px auto 32px;max-width:44ch}
/* Mehr Luft zwischen dem Kasten und der Überschrift darüber */
.done .pay{margin:40px auto 36px}
.done__title+.pay{margin-top:44px}

/* =========================================================
   STUDIOZEIT BUCHEN
   ========================================================= */
.book{position:relative;z-index:2;max-width:1120px;margin-inline:auto;padding:clamp(46px,7vw,80px) var(--pad) 90px}
.book__intro{margin-bottom:clamp(34px,5vw,52px);max-width:640px}
.book__grid{display:grid;grid-template-columns:1fr 360px;gap:clamp(28px,4vw,52px);align-items:start}

.bsec{padding-bottom:clamp(30px,4vw,44px);margin-bottom:clamp(30px,4vw,44px);border-bottom:1px solid var(--line)}
.bsec:last-of-type{border-bottom:0}
.bsec__h{font-family:'Switzer',system-ui,sans-serif;font-size:1.2rem;font-weight:600;letter-spacing:-.03em;margin-bottom:24px}
.bsec__p{color:var(--muted);font-size:.95rem;margin:-12px 0 22px}
.bsec .optgrp__label{margin-bottom:12px}

/* Öffnungszeiten-Tabelle */
.hours{margin-top:26px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:18px 20px}
.hours__h{color:var(--accent);margin-bottom:12px}
.hours__row{display:flex;justify-content:space-between;gap:16px;padding:6px 0;color:var(--muted);font-size:.9rem}
.hours__row span:last-child{color:var(--text)}

/* Regeln */
.rules{list-style:none;counter-reset:r;display:flex;flex-direction:column;gap:18px;margin-bottom:28px}
.rules li{counter-increment:r;position:relative;padding-left:42px}
.rules li::before{
  content:counter(r);position:absolute;left:0;top:1px;
  width:27px;height:27px;border-radius:50%;
  border:1px solid var(--accent);color:var(--accent);
  display:grid;place-items:center;
  font-family:'Fragment Mono',ui-monospace,monospace;font-size:.72rem;
}
.rules strong{display:block;font-weight:600;font-size:.99rem;margin-bottom:4px;letter-spacing:-.01em}
.rules span{display:block;color:var(--muted);font-size:.93rem;line-height:1.6}

/* Übersicht */
.book__side{position:sticky;top:96px}
.sum{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:24px 24px 22px;box-shadow:var(--shadow)}
.sum__h{color:var(--accent);margin-bottom:18px}
.sum__list{display:flex;flex-direction:column;gap:11px;padding-bottom:18px;border-bottom:1px solid var(--line)}
.sum__list>div{display:flex;justify-content:space-between;gap:14px;align-items:baseline}
.sum__list dt{color:var(--muted);font-size:.9rem;flex:0 0 auto}
.sum__list dd{font-size:.93rem;text-align:right}
.sum__total{display:flex;justify-content:space-between;align-items:baseline;gap:14px;padding:16px 0}
.sum__total span{color:var(--muted);font-size:.93rem}
.sum__total strong{font-family:'Switzer',system-ui,sans-serif;font-size:1.45rem;font-weight:600;letter-spacing:-.04em}
.sum__dep{
  border:1px solid var(--accent);border-radius:var(--r-sm);background:var(--accent-dim);
  padding:15px 17px;display:flex;justify-content:space-between;align-items:flex-end;gap:14px;flex-wrap:wrap;
}
.sum__dep .mono{color:var(--accent);margin-bottom:5px}
.sum__depv{font-family:'Switzer',system-ui,sans-serif;font-size:1.6rem;font-weight:600;letter-spacing:-.04em;line-height:1}
.sum__rest{color:var(--muted);font-size:.8rem}
.sum__note{color:var(--dim);font-size:.79rem;line-height:1.55;margin-top:14px}

/* Bestätigung mit Anzahlungs-Aufforderung */
.pay{
  max-width:52ch;margin:0 auto 34px;padding:26px 28px;
  border:1px solid var(--accent);border-radius:var(--r);background:var(--accent-dim);text-align:left;
}
/* Bestätigungsseite nach der Buchung — linksbündig und in klaren
   Blöcken. Mittig zentrierter Fließtext über mehrere Zeilen liest
   sich schlecht. */
.pay{text-align:left;max-width:52ch;margin:0 auto}
.pay__h{
  font-family:'Fragment Mono',ui-monospace,monospace;
  font-size:.71rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--accent);margin-bottom:18px;
}
.pay__b{color:var(--text);font-size:1rem;line-height:1.6;margin-bottom:18px}
.pay__b + .pay__b{color:var(--muted);font-size:.95rem}
.pay__amount{
  font-family:'Switzer',system-ui,sans-serif;font-size:clamp(2rem,5vw,2.8rem);font-weight:700;
  letter-spacing:-.045em;line-height:1;color:var(--accent);
  display:block;margin:4px 0 22px;
}
.pay .btn{margin-bottom:22px}
.pay__rule{
  color:var(--dim);font-size:.85rem;line-height:1.6;
  padding-top:20px;border-top:1px solid var(--line);
}

.legal{margin-top:42px;max-width:62ch}
.legal h2{font-size:1.12rem;font-weight:600;margin:36px 0 12px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.legal h2:first-child{margin-top:0}
.legal p{color:var(--muted);font-size:.96rem;margin-bottom:14px}
.legal a{color:var(--accent);text-decoration:underline}
.legal em{color:var(--dim)}
.legal__hint{
  margin-top:42px;padding:18px 20px;border:1px solid var(--line);border-left:2px solid var(--accent);
  border-radius:var(--r);background:var(--surface);color:var(--muted);
  text-transform:none;letter-spacing:.02em;font-size:.78rem;line-height:1.6;
}

/* ---------------- Einblenden beim Scrollen ---------------- */
.rv{
  opacity:0;transform:translateY(26px);
  transition:opacity .8s var(--ease),transform .8s var(--ease);
  transition-delay:calc(var(--i,0)*70ms);
}
.rv.in{opacity:1;transform:none}

/* ---------------- Responsive ---------------- */
@media (max-width:1000px){
  .sh{grid-template-columns:1fr;align-items:start;gap:18px}
  .sh--action{gap:16px}
  .sh__all{justify-self:start}
  .sh__note{padding-bottom:0;max-width:52ch}
  .studio{grid-template-columns:1fr}
  .releases{grid-template-columns:repeat(2,1fr)}
  .footer__grid{grid-template-columns:1fr 1fr}

  /* Die Nav-Leiste wird schon hier zum Menü — darunter
     stoßen Logo und Links sonst aneinander. */
  .burger{display:flex;z-index:960}
  .nav__links{
    position:fixed;inset:0 0 0 auto;width:min(80vw,310px);
    flex-direction:column;align-items:flex-start;justify-content:center;gap:24px;
    padding:44px;background:var(--surface);border-left:1px solid var(--line);
    /* Geschlossen wird das Menü auch unsichtbar geschaltet. Sonst
       hängt es weiter rechts neben der Seite, ist per Tab erreichbar
       und schiebt die Seite auf dem iPhone in die Breite. */
    transform:translateX(100%);visibility:hidden;
    transition:transform .4s var(--ease),visibility 0s linear .4s;
    /* Wischt man im offenen Menü, soll sich das Scrollen nicht auf
       die Seite dahinter übertragen. */
    overscroll-behavior:contain;overflow-y:auto;
  }
  .nav__links.open{transform:none;visibility:visible;transition-delay:0s,0s}
  .nav__links a{font-size:1.15rem}
  .nav__links a:not(.btn)::after{display:none}
  .nav__links--static{position:static;width:auto;flex-direction:row;padding:0;background:none;border:0;transform:none;visibility:visible}
  .nav--solid .burger{display:none}
  .nav__right{gap:10px}
  .ctrl{z-index:960}
}
@media (max-width:820px){
  /* Auf dem Handy fehlt der Knopf "Projekt einschicken" in der
     Leiste, deshalb ist sie dort von Haus aus niedriger. */
  :root{--navh:67px}

  /* Auf dem Handy bekommt die Lieferzeit eine eigene Zeile über
     die volle Breite — daneben blieben nur ein paar Zeichen. */
  .rate__row{
    grid-template-columns:1fr auto 16px;
    grid-template-areas:
      "name price chev"
      "meta meta  meta";
    gap:10px 14px;
  }
  .rate__name{align-self:center;font-size:1.3rem}
  .rate__price{align-self:center;text-align:right}
  .rate__chev{align-self:center}
  .deliv>div{grid-template-columns:1fr;gap:4px}

  .row{grid-template-columns:1fr}
  .creds__grid{grid-template-columns:1fr}
  .picks{grid-template-columns:1fr;grid-auto-rows:auto}
  .split{grid-template-columns:1fr}
  .split .summary,.split .specbox{position:static;margin-top:8px}
  /* Einspaltig steht der Preiskasten unter den Optionen — dort gibt
     es nichts mehr auszurichten, und der Abstand käme zum Raster-
     Abstand noch obendrauf. */
  .side{position:static;margin-top:0}
  /* Das RASTER auf work.html: zwei Spalten statt einer — eine
     Karte über die volle Handybreite ist zu wuchtig.
     Die Schiene auf der Startseite ist hier ausgenommen, dort
     sind die Karten breiter und es passt alles. */
  .releases:not(.releases--rail){grid-template-columns:repeat(2,1fr);gap:18px}
  .releases:not(.releases--rail) .rel__title{font-size:1.05rem;margin-top:7px}
  .releases:not(.releases--rail) .rel__artist{font-size:.85rem}
  .releases:not(.releases--rail) .rel__tags{margin-top:12px}
  .releases:not(.releases--rail) .rel__rows{padding-top:11px}
  /* Zwei Songtitel nebeneinander passen in die halbe Breite nicht
     mehr: ein Knopf für das ganze Album, Song 2 läuft danach
     von selbst weiter. */
  .releases:not(.releases--rail) .rel__rows--2 .rel__row:not(:first-child){display:none}
  .releases:not(.releases--rail) .rel__rows--2 .rel__rt--one{display:none}
  .releases:not(.releases--rail) .rel__rows--2 .rel__rt--all{display:block}
  .releases:not(.releases--rail) .rel__rows--2 .rel__row{padding:9px 11px;gap:9px}
  .releases:not(.releases--rail) .rel__rows--2 .rel__ico{width:25px;height:25px;border-radius:6px}
  .releases:not(.releases--rail) .rel__rows--2 .rel__rt{font-size:.87rem}
  .releases:not(.releases--rail) .rel__rows--2 .rel__row.is-on .rel__ico{display:grid}
  .releases:not(.releases--rail) .rel__rows--2 .rel__row.is-on .rel__eq{order:0;margin-left:0}
  /* Auf dem Handy ist kein Platz für den Schieberegler — der
     Stummschalter bleibt aber, der funktioniert überall. */
  .pl__vol input{display:none}
  .pl__time{display:none}
  .pl__row{gap:10px;padding-inline:16px}
  .pl__art{width:40px;height:40px}
  .pl__x{margin-left:4px;margin-right:-6px}
  .pl__x::before{left:-5px}
  .book__grid{grid-template-columns:1fr}
  .book__side{position:static;order:-1}
  .est{flex-direction:column;align-items:flex-start;gap:14px}
  .est__n{text-align:left;max-width:none}
  .prog__steps li{font-size:.6rem;letter-spacing:.07em}
  .wizard__nav{flex-direction:column-reverse}
  #btnBack{flex:1}
}
@media (max-width:640px){
  /* Auf dem Handy reicht das Logo als Weg zurück — der
     Textlink daneben macht die Leiste nur voll. */
  .nav__links--static{display:none}
}

@media (max-width:560px){
  body{font-size:16px}

  /* Auf dem Handy passen Titel und Bedienung nicht nebeneinander,
     ohne dass der Titel zu "WE…" zusammenschrumpft. Deshalb zwei
     Zeilen: oben der Song, darunter die Bedienung — die bleibt
     dadurch mittig, wie gewünscht. */
  .pl__row{
    grid-template-columns:1fr auto 1fr;
    grid-template-areas:
      "left left  left"
      ".    ctrls right";
    row-gap:9px;padding-block:10px;
  }
  .pl__t{font-size:.9rem}
  body:has(.pl.is-on){padding-bottom:130px}
  .hero__cta{flex-direction:column;gap:18px}
  .hero__cta .btn{width:100%}
  .footer__grid{grid-template-columns:1fr;gap:32px}
  .kit>div{grid-template-columns:1fr;gap:4px}
  .summary dl{grid-template-columns:1fr;gap:2px 0}
  .summary dd{text-align:left;color:var(--text);margin-bottom:8px}
  .prog__steps li:not(.is-active){opacity:.5}
}

@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition-duration:.01ms!important}
  html{scroll-behavior:auto}
  .rv,.an{opacity:1;transform:none}
  .nav.hide{transform:none}
}
