/*
 * Nakos Athletik Center — design system v2
 *
 * Applies high-end-visual-design principles (Double Bezel,
 * Editorial Split, Eyebrow pills, magnetic buttons, macro whitespace,
 * custom cubic-béziers) — but with strictly UNIFORM grids so cards
 * stay flush, and a calibrated type scale so body text remains
 * readable. Supports a dark and a light theme; theme is applied via
 * a `data-theme` attribute on <html>, switched at runtime, persisted
 * in localStorage and pre-applied inline before paint (no FOUC).
 */

/* =====================================================
 * Fonts
 * ===================================================== */
@import url('https://api.fontshare.com/v2/css?f[]=clash-display@300,400,500,600&f[]=plus-jakarta-sans@300,400,500,600,700&display=swap');

/* =====================================================
 * Theme tokens
 * ===================================================== */
:root {
    /* Brand-stable values (don't change between themes) */
    --c-accent-pure: #bbb081;

    /* Motion */
    --ease-out-quart: cubic-bezier(0.32, 0.72, 0, 1);
    --ease-out-expo:  cubic-bezier(0.16, 1, 0.3, 1);
    --ease-spring:    cubic-bezier(0.34, 1.32, 0.64, 1);

    --t-snap:  180ms;
    --t-quick: 320ms;
    --t-base:  520ms;
    --t-slow:  820ms;

    /* Type scale */
    --fs-eyebrow: 0.72rem;
    --fs-meta:    0.84rem;
    --fs-body:    1.0625rem;
    --fs-lead:    clamp(1.125rem, 0.95rem + 0.55vw, 1.28rem);
    --fs-h3:      clamp(1.3rem, 1.05rem + 0.8vw, 1.7rem);
    --fs-h2:      clamp(1.85rem, 1.4rem + 2vw, 3rem);
    --fs-h1:      clamp(2.4rem, 1.7rem + 3.2vw, 4rem);
    --fs-display: clamp(2.8rem, 2rem + 4.5vw, 5.4rem);

    /* Radii */
    --r-xs: 8px;
    --r-sm: 12px;
    --r-md: 16px;
    --r-lg: 20px;
    --r-xl: 26px;
    --r-2xl: 32px;
    --r-pill: 999px;

    /* Spatial */
    --section-py: clamp(5.5rem, 10vw, 10rem);
    --container: 1280px;
    --container-narrow: 960px;
    --gutter: clamp(1.25rem, 3vw, 2.5rem);

    /* ---- DARK theme defaults ---- */
    color-scheme: dark;

    --c-bg-0: #0a0c11;
    --c-bg-1: #131720;
    --c-bg-2: #1c2230;
    --c-bg-3: #232a39;

    --c-text-0: #f4f3eb;
    --c-text-1: #c8ccd5;
    --c-text-2: #969aa3;
    --c-text-3: #62666f;

    --c-accent: #bbb081;
    --c-accent-bright: #d4c896;
    --c-accent-text: #c8bd8b;

    --c-hairline:         rgb(255 255 255 / 0.07);
    --c-hairline-strong:  rgb(255 255 255 / 0.12);
    --c-hairline-accent:  rgb(187 176 129 / 0.32);

    --c-surface-tint:     rgb(255 255 255 / 0.03);
    --c-surface-tint-2:   rgb(255 255 255 / 0.05);

    --bezel-grad: linear-gradient(140deg, rgb(255 255 255 / 0.08), rgb(255 255 255 / 0.01) 60%);
    --bezel-accent-grad: linear-gradient(140deg, rgb(187 176 129 / 0.4), rgb(187 176 129 / 0.04) 60%);
    --bezel-inner-hi: inset 0 1px 0 0 rgb(255 255 255 / 0.06);

    --shadow-card: 0 24px 60px -28px rgb(0 0 0 / 0.6), 0 6px 18px -10px rgb(0 0 0 / 0.4);
    --shadow-float: 0 32px 80px -30px rgb(0 0 0 / 0.7), 0 12px 24px -12px rgb(0 0 0 / 0.5);
    --shadow-glow-gold: 0 30px 80px -32px rgb(187 176 129 / 0.25);

    --grain-opacity: 0.04;
    --mesh-opacity: 0.22;
}

[data-theme="light"] {
    color-scheme: light;

    --c-bg-0: #faf8f1;
    --c-bg-1: #ffffff;
    --c-bg-2: #f1ede2;
    --c-bg-3: #e8e3d4;

    --c-text-0: #0f1115;
    --c-text-1: #3a3d44;
    --c-text-2: #6a6e77;
    --c-text-3: #969aa3;

    --c-accent: #bbb081;
    --c-accent-bright: #a59573;
    --c-accent-text: #756a45;

    --c-hairline:         rgb(15 17 21 / 0.08);
    --c-hairline-strong:  rgb(15 17 21 / 0.14);
    --c-hairline-accent:  rgb(117 106 69 / 0.28);

    --c-surface-tint:     rgb(15 17 21 / 0.025);
    --c-surface-tint-2:   rgb(15 17 21 / 0.05);

    --bezel-grad: linear-gradient(140deg, rgb(15 17 21 / 0.05), rgb(15 17 21 / 0.005) 60%);
    --bezel-accent-grad: linear-gradient(140deg, rgb(187 176 129 / 0.32), rgb(187 176 129 / 0.04) 60%);
    --bezel-inner-hi: inset 0 1px 0 0 rgb(255 255 255 / 0.8);

    --shadow-card: 0 24px 50px -28px rgb(15 17 21 / 0.18), 0 4px 14px -8px rgb(15 17 21 / 0.1);
    --shadow-float: 0 32px 80px -30px rgb(15 17 21 / 0.22), 0 12px 24px -12px rgb(15 17 21 / 0.12);
    --shadow-glow-gold: 0 30px 80px -32px rgb(187 176 129 / 0.35);

    --grain-opacity: 0.025;
    --mesh-opacity: 0.18;
}

/* =====================================================
 * Reset
 * ===================================================== */
*,
*::before,
*::after { box-sizing: border-box; }

html {
    -webkit-text-size-adjust: 100%;
    scroll-behavior: smooth;
    scroll-padding-top: clamp(5rem, 7vw, 7rem);
}

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    *,
    *::before,
    *::after {
        animation-duration: 0.001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.001ms !important;
    }
}

body {
    margin: 0;
    padding: 0;
    min-height: 100dvh;
    background: var(--c-bg-0);
    color: var(--c-text-1);
    font-family: 'Plus Jakarta Sans', system-ui, -apple-system, 'Segoe UI', sans-serif;
    font-size: var(--fs-body);
    line-height: 1.7;
    font-weight: 400;
    /* tabular-nums: every digit takes the same width so prices, times,
       countdowns + table values line up cleanly. Doesn't affect letters. */
    font-feature-settings: 'ss01', 'cv11';
    font-variant-numeric: tabular-nums;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
    overflow-x: clip;
    transition: background var(--t-base) var(--ease-out-quart), color var(--t-base) var(--ease-out-quart);
}

img, svg, video {
    display: block;
    max-width: 100%;
    height: auto;
}

button, input, textarea, select {
    font: inherit;
    color: inherit;
}

button { background: none; border: 0; cursor: pointer; }
a { color: inherit; text-decoration: none; }

/* Plain text shows the default arrow cursor, not the I-beam. Interactive
   elements get the pointer; text fields keep the text caret. On touch
   devices we also kill the grey tap-flash for a cleaner feel. */
html { -webkit-tap-highlight-color: transparent; }
body { cursor: default; }

/* App-feel: no text selection or right-click on the chrome. Editable
   fields stay fully selectable so typing + copy/paste inside forms
   continues to work everywhere. */
html, body {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
input,
textarea,
select,
[contenteditable="true"],
[contenteditable=""] {
    -webkit-user-select: text;
    -moz-user-select: text;
    -ms-user-select: text;
    user-select: text;
}

/* No drag-and-drop on links or images — feels native, prevents the
   accidental "ghost image" tooltip and the iOS long-press preview on
   anchors / pictures. JS in app.js handles the dragstart event for
   browsers that ignore the CSS property. */
a, img, picture, svg {
    -webkit-user-drag: none;
    -khtml-user-drag: none;
    -moz-user-drag: none;
    -o-user-drag: none;
    user-drag: none;
    -webkit-touch-callout: none;
}

/* =====================================================
 * Scrollbar styling — all scrollable areas except the
 * document body (which stays the OS-native scrollbar so
 * the page chrome keeps its familiar feel). Thin,
 * brand-tinted thumb on transparent track.
 * ===================================================== */
*:not(body):not(html) {
    scrollbar-width: thin;
    scrollbar-color: var(--c-hairline-strong) transparent;
}
*:not(body):not(html)::-webkit-scrollbar {
    width: 8px;
    height: 8px;
}
*:not(body):not(html)::-webkit-scrollbar-track { background: transparent; }
*:not(body):not(html)::-webkit-scrollbar-thumb {
    background: var(--c-hairline-strong);
    border-radius: 999px;
    border: 2px solid transparent;
    background-clip: padding-box;
}
*:not(body):not(html)::-webkit-scrollbar-thumb:hover {
    background: var(--c-accent);
    background-clip: padding-box;
    border: 2px solid transparent;
}
*:not(body):not(html)::-webkit-scrollbar-corner { background: transparent; }
a[href],
button,
label,
summary,
[role="button"],
.btn,
.theme-toggle { cursor: pointer; }
button:disabled,
.btn:disabled,
[disabled] { cursor: not-allowed; }
input:not([type="checkbox"]):not([type="radio"]):not([type="button"]):not([type="submit"]):not([type="reset"]),
textarea,
[contenteditable="true"] { cursor: text; }

/* The HTML `hidden` attribute must always win over component display
   rules (flex/grid/inline-flex) — JS toggles `hidden` to show/hide the
   consent options, summary rows, modal buttons, etc. */
[hidden] { display: none !important; }

::selection { background: rgb(187 176 129 / 0.35); color: var(--c-text-0); }

/* =====================================================
 * Ambient mesh + grain
 * ===================================================== */
.bg-mesh {
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    overflow: hidden;
}
.bg-mesh::before,
.bg-mesh::after {
    content: "";
    position: absolute;
    border-radius: 50%;
    filter: blur(110px);
    opacity: var(--mesh-opacity);
}
.bg-mesh::before {
    top: -25vw;
    left: -10vw;
    width: 70vw;
    height: 70vw;
    background: radial-gradient(closest-side, var(--c-accent-pure), transparent 70%);
}
.bg-mesh::after {
    bottom: -25vw;
    right: -15vw;
    width: 60vw;
    height: 60vw;
    background: radial-gradient(closest-side, var(--c-accent-pure), transparent 70%);
    opacity: calc(var(--mesh-opacity) * 0.6);
}

.grain {
    position: fixed;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    opacity: var(--grain-opacity);
    mix-blend-mode: overlay;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.6'/></svg>");
}

/* =====================================================
 * Typography
 * ===================================================== */
.display, h1, h2, h3, h4 {
    font-family: 'Clash Display', system-ui, sans-serif;
    color: var(--c-text-0);
    letter-spacing: -0.018em;
    line-height: 1.15;
    font-weight: 500;
    margin: 0;
}

.display {
    font-size: var(--fs-display);
    line-height: 1.04;
    letter-spacing: -0.025em;
    font-weight: 500;
}

h1 { font-size: var(--fs-h1); line-height: 1.08; letter-spacing: -0.02em; }
h2 { font-size: var(--fs-h2); line-height: 1.15; letter-spacing: -0.015em; }
h3 { font-size: var(--fs-h3); line-height: 1.25; letter-spacing: -0.01em; }
h4 { font-size: 1.05rem;       line-height: 1.4;  letter-spacing: -0.005em; }

p { margin: 0; }

.lead {
    font-size: var(--fs-lead);
    line-height: 1.6;
    color: var(--c-text-1);
    max-width: 60ch;
}

.muted { color: var(--c-text-2); }
.dim   { color: var(--c-text-3); }
.accent-text { color: var(--c-accent-text); }

.eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.35rem 0.85rem;
    border-radius: var(--r-pill);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-size: var(--fs-eyebrow);
    font-weight: 500;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    line-height: 1;
    white-space: nowrap;
    align-self: flex-start;
    transition: background var(--t-base) var(--ease-out-quart);
}
.eyebrow::before {
    content: "";
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--c-accent);
}

/* =====================================================
 * Layout primitives
 * ===================================================== */
.container {
    width: 100%;
    max-width: var(--container);
    margin-inline: auto;
    padding-inline: var(--gutter);
    position: relative;
    z-index: 2;
}
.container-narrow {
    width: 100%;
    max-width: var(--container-narrow);
    margin-inline: auto;
    padding-inline: var(--gutter);
    position: relative;
    z-index: 2;
}

section {
    position: relative;
    padding-block: var(--section-py);
    z-index: 2;
}

.section-head {
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
    max-width: 60rem;
    margin-bottom: clamp(2.75rem, 5vw, 4.5rem);
}
.section-head .lead { color: var(--c-text-2); }

/* =====================================================
 * Buttons — magnetic / button-in-button
 * ===================================================== */
.btn {
    --btn-bg: var(--c-surface-tint);
    --btn-bg-hover: var(--c-surface-tint-2);
    --btn-color: var(--c-text-0);
    --btn-ring: var(--c-hairline-strong);

    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 0.6rem;
    /* Symmetric default; buttons WITH a trailing icon override
       the right padding via the :has() selector below so the icon
       circle sits flush with the right edge. */
    padding: 0.85rem 1.4rem;
    border-radius: var(--r-pill);
    background: var(--btn-bg);
    color: var(--btn-color);
    font-weight: 500;
    font-size: 0.95rem;
    letter-spacing: -0.005em;
    line-height: 1;
    box-shadow: var(--bezel-inner-hi), inset 0 0 0 1px var(--btn-ring);
    transition:
        background var(--t-quick) var(--ease-out-quart),
        transform var(--t-snap) var(--ease-spring),
        box-shadow var(--t-quick) var(--ease-out-quart),
        color var(--t-quick) var(--ease-out-quart);
    white-space: nowrap;
    isolation: isolate;
    cursor: pointer;
    text-decoration: none;
}
/* When a button-in-button trailing icon is present, tuck it
   right against the pill edge while keeping the leading text
   padding the same as a plain button. */
.btn:has(> .btn__icon) {
    padding: 0.6rem 0.6rem 0.6rem 1.4rem;
}
.btn:hover { background: var(--btn-bg-hover); }
.btn:active { transform: scale(0.97); }

.btn .btn__icon {
    width: 2rem;
    height: 2rem;
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 999px;
    background: var(--c-surface-tint-2);
    font-size: 1rem;
    transition:
        transform var(--t-quick) var(--ease-spring),
        background var(--t-quick) var(--ease-out-quart);
}
.btn:hover .btn__icon {
    transform: translate3d(2px, -1px, 0) scale(1.06);
    background: var(--c-surface-tint-2);
}

.btn-primary {
    --btn-bg: var(--c-accent);
    --btn-bg-hover: var(--c-accent-bright);
    --btn-color: #1a1814;
    --btn-ring: rgb(255 255 255 / 0.18);
    box-shadow:
        var(--bezel-inner-hi),
        inset 0 0 0 1px var(--btn-ring),
        0 12px 30px -10px rgb(187 176 129 / 0.4);
}
.btn-primary .btn__icon {
    background: rgb(0 0 0 / 0.18);
    color: #1a1814;
}
.btn-primary:hover .btn__icon { background: rgb(0 0 0 / 0.26); }

.btn-ghost {
    --btn-bg: transparent;
    --btn-bg-hover: var(--c-surface-tint);
    --btn-ring: transparent;
    box-shadow: none;
    padding-inline: 0.6rem 0.3rem;
}
.btn-ghost .btn__icon { background: var(--c-surface-tint-2); }

.btn-sm {
    padding: 0.55rem 1rem;
    font-size: 0.85rem;
}
.btn-sm:has(> .btn__icon) {
    padding: 0.35rem 0.4rem 0.35rem 1rem;
}
.btn-sm .btn__icon { width: 1.65rem; height: 1.65rem; font-size: 0.85rem; }

.btn-lg {
    padding: 1rem 1.6rem;
    font-size: 1rem;
    letter-spacing: 0.005em;
}
.btn-lg:has(> .btn__icon) {
    padding: 0.65rem 0.75rem 0.65rem 1.6rem;
}
.btn-lg .btn__icon { width: 2.3rem; height: 2.3rem; font-size: 1.05rem; }

/* =====================================================
 * Double-Bezel cards
 * ===================================================== */
.bezel {
    --bezel-pad: 5px;
    --bezel-outer-radius: var(--r-xl);
    --bezel-inner-radius: calc(var(--r-xl) - var(--bezel-pad));

    position: relative;
    padding: var(--bezel-pad);
    border-radius: var(--bezel-outer-radius);
    background: var(--bezel-grad);
    box-shadow: inset 0 0 0 1px var(--c-hairline);
    isolation: isolate;
}

.bezel > .bezel__inner {
    position: relative;
    border-radius: var(--bezel-inner-radius);
    background: var(--c-bg-1);
    box-shadow: var(--bezel-inner-hi);
    padding: clamp(1.5rem, 2vw, 2rem);
    overflow: hidden;
}

.bezel.bezel-accent {
    background: var(--bezel-accent-grad);
    box-shadow: inset 0 0 0 1px var(--c-hairline-accent), var(--shadow-glow-gold);
}
.bezel.bezel-accent > .bezel__inner {
    background:
        radial-gradient(120% 80% at 100% 0%, rgb(187 176 129 / 0.1), transparent 60%),
        var(--c-bg-1);
}

/* =====================================================
 * Scroll reveal — pure transform/opacity, no blur
 * ===================================================== */
[data-reveal] {
    opacity: 0;
    transform: translate3d(0, 24px, 0);
    transition: opacity 600ms var(--ease-out-quart), transform 600ms var(--ease-out-quart);
    will-change: transform, opacity;
}
[data-reveal].is-visible { opacity: 1; transform: translate3d(0, 0, 0); }
[data-reveal][data-delay="100"] { transition-delay: 100ms; }
[data-reveal][data-delay="200"] { transition-delay: 200ms; }
[data-reveal][data-delay="300"] { transition-delay: 300ms; }
[data-reveal][data-delay="400"] { transition-delay: 400ms; }

/* =====================================================
 * Floating glass nav + theme switch
 * ===================================================== */
.site-nav {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    width: 100%;
    z-index: 100;
    background: color-mix(in srgb, var(--c-bg-0) 82%, transparent);
    backdrop-filter: blur(24px) saturate(140%);
    -webkit-backdrop-filter: blur(24px) saturate(140%);
    border-bottom: 1px solid var(--c-hairline);
    transition: background var(--t-base) var(--ease-out-quart),
                border-color var(--t-base) var(--ease-out-quart);
}

.site-nav__shell {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: clamp(0.75rem, 1.4vw, 1.5rem);
    max-width: var(--container);
    margin: 0 auto;
    padding: 0.75rem var(--gutter);
    background: transparent;
}

.site-nav__actions {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    justify-self: end;
}

[data-theme="light"] .site-nav {
    background: rgb(255 255 255 / 0.82);
}

.site-nav__brand {
    display: inline-flex;
    align-items: center;
    gap: 0.6rem;
    color: var(--c-text-0);
    font-family: 'Clash Display', system-ui;
    font-weight: 500;
    letter-spacing: -0.01em;
    font-size: 1rem;
    line-height: 1;
}
.site-nav__brand img {
    height: 50px;
    width: auto;
    /* Logo bleibt unverändert in beiden Themes */
}
[data-theme="light"] .site-nav__brand img {
    /* Logo war für dark-bg designed; invertieren für light mode */
    filter: invert(1) hue-rotate(180deg) brightness(0.4);
}

.site-nav__links {
    display: flex;
    align-items: center;
    gap: 0.15rem;
    list-style: none;
    padding: 0;
    margin: 0;
    flex: 1;
    justify-content: center;
}
.site-nav__links a {
    position: relative;
    padding: 0.55rem 0.95rem;
    font-size: 0.85rem;
    color: var(--c-text-1);
    border-radius: var(--r-pill);
    transition: color var(--t-quick) var(--ease-out-quart), background var(--t-quick) var(--ease-out-quart);
}
.site-nav__links a:hover {
    color: var(--c-text-0);
    background: var(--c-surface-tint);
}
.site-nav__links a.is-active {
    color: var(--c-text-0);
    background: var(--c-surface-tint-2);
}

/* Theme switch button */
.theme-toggle {
    width: 2.4rem;
    height: 2.4rem;
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 999px;
    background: var(--c-surface-tint);
    box-shadow: inset 0 0 0 1px var(--c-hairline);
    color: var(--c-text-0);
    font-size: 1.05rem;
    cursor: pointer;
    transition: background var(--t-quick) var(--ease-out-quart),
                transform var(--t-snap) var(--ease-spring);
}
.theme-toggle:hover { background: var(--c-surface-tint-2); }
.theme-toggle:active { transform: scale(0.92); }

.theme-toggle .ph-sun,
.theme-toggle .ph-moon { transition: opacity var(--t-quick) var(--ease-out-quart); }
.theme-toggle .ph-sun  { display: none; }
.theme-toggle .ph-moon { display: inline; }
[data-theme="light"] .theme-toggle .ph-sun  { display: inline; }
[data-theme="light"] .theme-toggle .ph-moon { display: none; }

.site-nav__toggle {
    display: none;
    width: 2.4rem;
    height: 2.4rem;
    align-items: center;
    justify-content: center;
    border-radius: 999px;
    background: var(--c-surface-tint);
    color: var(--c-text-0);
    box-shadow: inset 0 0 0 1px var(--c-hairline);
}

/* Hamburger morph */
.hamburger {
    position: relative;
    width: 18px;
    height: 12px;
}
.hamburger span {
    position: absolute;
    left: 0;
    width: 100%;
    height: 1.5px;
    background: currentColor;
    border-radius: 2px;
    transition: transform var(--t-base) var(--ease-out-quart),
                top var(--t-base) var(--ease-out-quart),
                opacity var(--t-snap) var(--ease-out-quart);
}
.hamburger span:nth-child(1) { top: 0; }
.hamburger span:nth-child(2) { top: 50%; transform: translateY(-50%); }
.hamburger span:nth-child(3) { top: 100%; transform: translateY(-100%); }

body.nav-open .hamburger span:nth-child(1) {
    top: 50%;
    transform: translateY(-50%) rotate(45deg);
}
body.nav-open .hamburger span:nth-child(2) { opacity: 0; }
body.nav-open .hamburger span:nth-child(3) {
    top: 50%;
    transform: translateY(-50%) rotate(-45deg);
}

/* Fullscreen overlay nav */
.nav-overlay {
    position: fixed;
    inset: 0;
    z-index: 99;
    background: color-mix(in srgb, var(--c-bg-0) 86%, transparent);
    backdrop-filter: blur(48px) saturate(140%);
    -webkit-backdrop-filter: blur(48px) saturate(140%);
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--t-base) var(--ease-out-quart);
    /* Scroll inside the overlay so every link stays reachable even when
       the menu is taller than the viewport (small phones / landscape). */
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
}
.nav-overlay__inner {
    min-height: 100%;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: clamp(5rem, 14vw, 7rem) var(--gutter) clamp(2.5rem, 8vw, 4rem);
}
.nav-overlay ul {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
.nav-overlay li {
    opacity: 0;
    transform: translateY(36px);
    transition: opacity var(--t-base) var(--ease-out-quart),
                transform var(--t-base) var(--ease-out-quart);
}
.nav-overlay a {
    display: inline-block;
    font-family: 'Clash Display', sans-serif;
    font-size: clamp(2.25rem, 7vw, 4.5rem);
    font-weight: 500;
    color: var(--c-text-0);
    letter-spacing: -0.025em;
    padding: 0.2em 0.4em;
    border-radius: var(--r-md);
    transition: color var(--t-quick) var(--ease-out-quart);
}
.nav-overlay a:hover { color: var(--c-accent-text); }

body.nav-open .nav-overlay { opacity: 1; pointer-events: auto; }
body.nav-open .nav-overlay li { opacity: 1; transform: translateY(0); }
body.nav-open .nav-overlay li:nth-child(1) { transition-delay: 90ms; }
body.nav-open .nav-overlay li:nth-child(2) { transition-delay: 150ms; }
body.nav-open .nav-overlay li:nth-child(3) { transition-delay: 210ms; }
body.nav-open .nav-overlay li:nth-child(4) { transition-delay: 270ms; }
body.nav-open .nav-overlay li:nth-child(5) { transition-delay: 330ms; }
body.nav-open .nav-overlay li:nth-child(6) { transition-delay: 390ms; }
body.nav-open .nav-overlay li:nth-child(7) { transition-delay: 450ms; }

/* =====================================================
 * User-menu (avatar + dropdown)
 * ===================================================== */
.user-menu { position: relative; display: inline-flex; }

.user-avatar {
    width: 2.4rem;
    height: 2.4rem;
    border-radius: 999px;
    background: var(--c-accent);
    color: #1a1814;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-family: 'Clash Display', sans-serif;
    font-weight: 600;
    font-size: 0.95rem;
    cursor: pointer;
    box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.2),
                0 4px 14px -4px var(--c-accent-glow);
    transition: transform var(--t-snap) var(--ease-spring),
                box-shadow var(--t-quick) var(--ease-out-quart);
}
.user-avatar:hover {
    box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.32),
                0 8px 22px -6px var(--c-accent-glow);
}
.user-avatar:active { transform: scale(0.94); }
.user-avatar__initial { line-height: 1; letter-spacing: 0; }

.user-menu__dropdown {
    position: absolute;
    top: calc(100% + 0.65rem);
    right: 0;
    min-width: 14rem;
    padding: 0.6rem;
    border-radius: var(--r-lg);
    background: color-mix(in srgb, var(--c-bg-1) 92%, transparent);
    backdrop-filter: blur(28px) saturate(140%);
    -webkit-backdrop-filter: blur(28px) saturate(140%);
    border: 1px solid var(--c-hairline-strong);
    box-shadow: 0 16px 40px -16px rgb(0 0 0 / 0.45),
                inset 0 1px 0 0 rgb(255 255 255 / 0.06);
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    z-index: 110;
    opacity: 0;
    transform: translate3d(0, -6px, 0);
    pointer-events: none;
    transition: opacity var(--t-quick) var(--ease-out-quart),
                transform var(--t-quick) var(--ease-out-quart);
}
[data-theme="light"] .user-menu__dropdown {
    background: rgb(255 255 255 / 0.96);
}
.user-menu.is-open .user-menu__dropdown {
    opacity: 1;
    transform: translate3d(0, 0, 0);
    pointer-events: auto;
}

.user-menu__hello {
    margin: 0.25rem 0.7rem 0.5rem;
    padding-bottom: 0.7rem;
    border-bottom: 1px solid var(--c-hairline);
    font-size: 0.78rem;
    color: var(--c-text-3);
    letter-spacing: 0.04em;
    line-height: 1.4;
}
.user-menu__hello strong {
    color: var(--c-text-0);
    font-weight: 500;
    font-family: 'Clash Display', sans-serif;
    font-size: 0.95rem;
    letter-spacing: -0.01em;
}

.user-menu__link {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.65rem 0.85rem;
    border-radius: var(--r-md);
    color: var(--c-text-1);
    font-size: 0.9rem;
    text-decoration: none;
    background: transparent;
    border: 0;
    cursor: pointer;
    width: 100%;
    text-align: left;
    transition: background var(--t-quick) var(--ease-out-quart),
                color var(--t-quick) var(--ease-out-quart);
}
.user-menu__link:hover {
    background: var(--c-surface-tint);
    color: var(--c-text-0);
}
.user-menu__link i { font-size: 1.05rem; color: var(--c-accent-text); }
.user-menu__form { margin: 0.25rem 0 0; padding-top: 0.4rem; border-top: 1px solid var(--c-hairline); }
.user-menu__logout { font-weight: 500; }
.user-menu__logout:hover { color: #e29393; background: rgb(217 112 112 / 0.06); }

/* Settings page two-column grid */
.settings__grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(1.25rem, 2vw, 1.75rem);
    align-items: start;
}
@media (max-width: 980px) { .settings__grid { grid-template-columns: 1fr; } }

/*
 | Notification channel radio cards — used in /account/settings.
 | Big tap targets, native radio hidden, custom check indicator on the
 | right that lights up when its option is selected.
 */
.notify-options {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
    gap: 0.75rem;
}
.notify-option {
    display: flex;
    align-items: flex-start;
    gap: 0.85rem;
    padding: 0.95rem 1.05rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    cursor: pointer;
    transition: background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
    min-width: 0;
}
.notify-option:hover { background: var(--c-surface-tint-2); border-color: var(--c-hairline-accent); }
.notify-option input[type=radio] {
    /* Visually hide but keep focusable for a11y. */
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}
.notify-option__icon {
    flex: 0 0 auto;
    width: 2.4rem;
    height: 2.4rem;
    border-radius: 12px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, rgb(187 176 129 / 0.18), rgb(187 176 129 / 0.04));
    border: 1px solid var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-size: 1.25rem;
}
.notify-option__body {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    line-height: 1.4;
}
.notify-option__body strong { color: var(--c-text-0); font-size: 0.98rem; font-weight: 600; }
.notify-option__body .muted { font-size: 0.83rem; line-height: 1.45; }
.notify-option__check {
    flex: 0 0 auto;
    width: 1.5rem;
    height: 1.5rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-3);
    font-size: 1.5rem;
    transition: color var(--t-quick) var(--ease-out-quart),
                transform var(--t-quick) var(--ease-out-quart);
    align-self: center;
}
/* Selected state — accent ring, glowing check icon. */
.notify-option.is-selected {
    background:
        linear-gradient(135deg, rgb(187 176 129 / 0.12), rgb(187 176 129 / 0.03)),
        var(--c-surface-tint);
    border-color: rgb(187 176 129 / 0.55);
    box-shadow: 0 0 0 1px rgb(187 176 129 / 0.18);
}
.notify-option.is-selected .notify-option__check {
    color: var(--c-accent-text);
    transform: scale(1.05);
}
.notify-option:focus-within {
    outline: 2px solid rgb(187 176 129 / 0.5);
    outline-offset: 2px;
}
/* Push option disabled — JS adds .is-disabled when not in standalone
   mode or browser refuses Notification API. */
.notify-option.is-disabled {
    opacity: 0.55;
    cursor: not-allowed;
    pointer-events: none;
}
.notify-option.is-disabled:hover {
    background: var(--c-surface-tint);
    border-color: var(--c-hairline);
}

/*
 | Per-event subscription grid — sits under the channel radio on
 | /manage/account → Benachrichtigungen. Each event is a checkbox row,
 | grouped by category label ("Kontakt", "Team-Chat", …).
 */
.notify-events {
    border: 1px dashed var(--c-hairline);
    border-radius: var(--r-md);
    padding: 1rem 1.1rem 0.85rem;
    margin: 1.25rem 0 0;
    background: var(--c-surface-tint);
}
.notify-events legend {
    padding: 0 0.5rem;
    margin-left: -0.5rem;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--c-text-0);
    letter-spacing: -0.005em;
}
.notify-events__intro {
    margin: 0.25rem 0 0.9rem;
    font-size: 0.82rem;
    line-height: 1.5;
}
.notify-events__group + .notify-events__group { margin-top: 0.9rem; padding-top: 0.9rem; border-top: 1px dashed var(--c-hairline); }
.notify-events__group-label {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--c-text-2);
    margin: 0 0 0.5rem;
}
.notify-event {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    padding: 0.55rem 0;
    cursor: pointer;
    line-height: 1.4;
}
.notify-event + .notify-event { border-top: 1px solid var(--c-hairline); }
.notify-event input[type=checkbox] {
    flex: 0 0 auto;
    margin: 0.2rem 0 0;
    width: 1.05rem;
    height: 1.05rem;
    accent-color: var(--c-accent);
    cursor: pointer;
}
.notify-event__body {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    min-width: 0;
}
.notify-event__body strong { color: var(--c-text-0); font-size: 0.92rem; font-weight: 600; }
.notify-event__body .muted { font-size: 0.8rem; line-height: 1.45; }

/* =====================================================
 * Hero — Editorial Split
 * ===================================================== */
.hero {
    padding-top: clamp(8rem, 12vw + 4rem, 13rem);
    padding-bottom: clamp(5rem, 9vw, 8rem);
}

.hero__grid {
    display: grid;
    grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
    gap: clamp(2rem, 5vw, 5rem);
    align-items: center;
}

.hero__copy {
    display: flex;
    flex-direction: column;
    gap: 1.6rem;
}

.hero__headline {
    font-family: 'Clash Display', sans-serif;
    font-size: clamp(2.4rem, 1.5rem + 3.5vw, 4.25rem);
    line-height: 1.08;
    letter-spacing: -0.022em;
    font-weight: 400;
    color: var(--c-text-0);
    margin: 0;
}

.hero__cta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-top: 0.5rem;
}

.hero__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 1.25rem 2.5rem;
    margin-top: 1rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--c-hairline);
    text-align: center;
}
.hero__meta-item dt {
    font-size: var(--fs-eyebrow);
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--c-text-3);
}
.hero__meta-item dd {
    margin: 0.25rem 0 0;
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-size: 1.1rem;
    letter-spacing: -0.01em;
    font-weight: 500;
}

.hero__visual { position: relative; }
.hero__visual .bezel {
    padding: 8px;
    background: var(--bezel-accent-grad);
    box-shadow: inset 0 0 0 1px var(--c-hairline-accent), 0 40px 100px -40px rgb(0 0 0 / 0.55);
}
.hero__visual .bezel__inner {
    border-radius: calc(var(--r-2xl) - 8px);
    background: var(--c-bg-1);
    aspect-ratio: 4 / 5;
    padding: 0;
}
.hero__visual img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* =====================================================
 * Services — uniform 3 × 2 grid, Double-Bezel cards
 * ===================================================== */
.services__grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: clamp(1rem, 1.4vw, 1.5rem);
}

.service-card { position: relative; }

.service-card .bezel__inner {
    min-height: 16rem;
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
    padding: 1.65rem;
}

.service-card__icon {
    width: 2.75rem;
    height: 2.75rem;
    border-radius: var(--r-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-surface-tint-2);
    color: var(--c-accent-text);
    font-size: 1.45rem;
    box-shadow: var(--bezel-inner-hi);
}

.service-card__title {
    font-family: 'Clash Display', sans-serif;
    font-size: 1.35rem;
    letter-spacing: -0.01em;
    line-height: 1.2;
    margin: 0;
    font-weight: 500;
    color: var(--c-text-0);
}
.service-card__desc {
    color: var(--c-text-2);
    font-size: 0.95rem;
    line-height: 1.6;
    flex-grow: 1;
}

.service-card__link {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    color: var(--c-text-1);
    font-size: 0.82rem;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    margin-top: auto;
    transition: color var(--t-quick) var(--ease-out-quart), gap var(--t-quick) var(--ease-out-quart);
}
.service-card__link i { transition: transform var(--t-quick) var(--ease-spring); }
.service-card:hover .service-card__link { color: var(--c-accent-text); gap: 0.75rem; }
.service-card:hover .service-card__link i { transform: translate3d(2px, -2px, 0); }

/* =====================================================
 * Plans — uniform 4-column grid
 * ===================================================== */
.plans__grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: clamp(1.25rem, 1.8vw, 1.75rem);
    align-items: stretch;
}

.plan-card { display: flex; flex-direction: column; }
.plan-card.is-full-width { grid-column: 1 / -1; }

.plan-card .bezel { flex-grow: 1; display: flex; }
.plan-card .bezel__inner {
    flex-grow: 1;
    display: flex;
    flex-direction: column;
    gap: 1.3rem;
    padding: clamp(1.5rem, 2vw, 2rem);
}

/* Full-width plan cards (Probetraining, Expert) lay out as a
   3-column row: meta (name + price stacked) | description | CTA.
   Everything left-aligned, button pinned to the right, all rows
   vertically centered against each other. */
.plan-card.is-full-width .bezel__inner {
    display: grid;
    grid-template-columns: minmax(0, 1.1fr) minmax(0, 1.8fr) auto;
    align-items: center;
    column-gap: clamp(1.25rem, 3vw, 2.75rem);
    row-gap: 0.4rem;
    padding: clamp(1.5rem, 2.5vw, 2.25rem) clamp(1.75rem, 3vw, 2.5rem);
}
.plan-card.is-full-width .plan-card__header {
    grid-column: 1;
    grid-row: 1;
    margin: 0;
}
/* The price wrapper is the second un-classed div child of the
   inner element. Pin it directly under the name. */
.plan-card.is-full-width > .bezel > .bezel__inner > div:nth-child(2) {
    grid-column: 1;
    grid-row: 2;
    margin: 0;
}
.plan-card.is-full-width .plan-card__desc {
    grid-column: 2;
    grid-row: 1 / span 2;
    align-self: center;
    margin: 0;
}
.plan-card.is-full-width .plan-card__cta {
    grid-column: 3;
    grid-row: 1 / span 2;
    align-self: center;
    margin: 0;
    padding: 0;
}
.plan-card.is-full-width .plan-card__cta .btn { width: auto; }

/* Inside the meta column the price stacks (amount on top,
   suffix below) rather than running inline next to the price. */
.plan-card.is-full-width .plan-card__price {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.1rem;
}

.plan-card__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
}

.plan-card__name {
    font-family: 'Clash Display', sans-serif;
    font-size: 1.4rem;
    letter-spacing: -0.012em;
    margin: 0;
    font-weight: 500;
    color: var(--c-text-0);
}

.plan-card__badge {
    padding: 0.3rem 0.65rem;
    border-radius: var(--r-pill);
    background: var(--c-surface-tint);
    color: var(--c-accent-text);
    border: 1px solid var(--c-hairline-accent);
    font-size: 0.65rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    line-height: 1;
    font-weight: 500;
}

.plan-card__price {
    display: flex;
    align-items: baseline;
    gap: 0.4rem;
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    letter-spacing: -0.025em;
}
.plan-card__price-amount { font-size: clamp(2rem, 3.2vw, 2.6rem); line-height: 1; }
.plan-card__price-suffix { font-size: 0.95rem; color: var(--c-text-2); font-weight: 400; }

.plan-card__price-discount {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    margin-top: 0.4rem;
    padding: 0.35rem 0.65rem;
    border-radius: var(--r-pill);
    background: var(--c-surface-tint);
    color: var(--c-accent-text);
    border: 1px solid var(--c-hairline-accent);
    font-size: 0.75rem;
    letter-spacing: 0.04em;
}

.plan-card__desc {
    color: var(--c-text-2);
    font-size: 0.9rem;
    line-height: 1.55;
}

.plan-card__bullets {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
}
.plan-card__bullets li {
    display: flex;
    align-items: flex-start;
    gap: 0.6rem;
    font-size: 0.88rem;
    color: var(--c-text-1);
    line-height: 1.5;
}
.plan-card__bullets i {
    flex: 0 0 auto;
    margin-top: 0.18rem;
    width: 1rem;
    height: 1rem;
    border-radius: 999px;
    background: var(--c-surface-tint-2);
    color: var(--c-accent-text);
    font-size: 0.65rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.plan-card__cta { margin-top: auto; padding-top: 0.25rem; }
.plan-card__cta .btn { width: 100%; justify-content: center; padding-inline: 1rem 0.5rem; }

.plan-card.is-featured .bezel {
    background: var(--bezel-accent-grad);
    box-shadow: inset 0 0 0 1px var(--c-hairline-accent), var(--shadow-glow-gold);
}
.plan-card.is-featured .bezel__inner {
    background:
        radial-gradient(120% 80% at 100% 0%, rgb(187 176 129 / 0.12), transparent 60%),
        var(--c-bg-1);
}

/* =====================================================
 * About — Editorial Split (image right, text left)
 * ===================================================== */
.about__grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr);
    gap: clamp(2rem, 5vw, 5rem);
    align-items: center;
}

.about__copy { display: flex; flex-direction: column; gap: 1.4rem; }

.about__features {
    display: grid;
    grid-template-columns: 1fr;
    gap: 0.85rem;
    margin-top: 1.25rem;
}

.about__feature {
    display: flex;
    align-items: flex-start;
    gap: 1rem;
    padding: 1rem 1.15rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    transition: background var(--t-quick) var(--ease-out-quart);
}
.about__feature:hover { background: var(--c-surface-tint-2); }
.about__feature-icon {
    width: 2.4rem;
    height: 2.4rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint-2);
    color: var(--c-accent-text);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.25rem;
    flex: 0 0 auto;
}
.about__feature h4 {
    margin: 0 0 0.2rem;
    font-size: 1.02rem;
    color: var(--c-text-0);
}
.about__feature p { color: var(--c-text-2); margin: 0; font-size: 0.9rem; }

.about__visual { aspect-ratio: 4 / 5; }
.about__visual .bezel {
    height: 100%;
    padding: 6px;
}
.about__visual .bezel__inner {
    height: 100%;
    padding: 0;
    background: var(--c-bg-1);
}
.about__visual img { width: 100%; height: 100%; object-fit: cover; }

/* =====================================================
 * Trial — gold-tinted CTA card
 * ===================================================== */
.trial__container { padding: clamp(2.25rem, 4vw, 3.5rem); }

.trial__grid {
    display: grid;
    grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr);
    gap: clamp(2rem, 4vw, 3.5rem);
    align-items: center;
}

.trial__steps { display: grid; grid-template-columns: 1fr; gap: 0.65rem; }

.trial__step {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1rem 1.15rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.trial__step-num {
    width: 2.4rem;
    height: 2.4rem;
    border-radius: 999px;
    background: var(--c-accent);
    color: #1a1814;
    font-family: 'Clash Display', sans-serif;
    font-weight: 600;
    font-size: 1rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
}
.trial__step h4 { color: var(--c-text-0); margin: 0; }
.trial__step p { color: var(--c-text-2); margin: 0.1rem 0 0; font-size: 0.88rem; }

/* =====================================================
 * Openings — uniform 3-col
 * ===================================================== */
.openings__grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: clamp(1rem, 1.4vw, 1.5rem);
}

.opening-card .bezel__inner {
    padding: 1.75rem;
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
    min-height: 13rem;
}
.opening-card__icon {
    width: 2.75rem;
    height: 2.75rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint-2);
    color: var(--c-accent-text);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.45rem;
}
.opening-card h4 {
    color: var(--c-text-0);
    font-size: 1.05rem;
    margin: 0;
}
.opening-card p {
    color: var(--c-text-2);
    font-family: 'Clash Display', sans-serif;
    font-size: 1.35rem;
    letter-spacing: -0.01em;
    margin: auto 0 0;
}

/* =====================================================
 * Contact
 * ===================================================== */
.contact__grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr);
    gap: clamp(2rem, 5vw, 5rem);
    align-items: start;
}

.contact__info { display: flex; flex-direction: column; gap: 0.85rem; padding-top: 0.5rem; }

.contact__info-item {
    display: flex;
    gap: 1rem;
    padding: 1rem 1.15rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    align-items: center;
}
.contact__info-icon {
    width: 2.3rem;
    height: 2.3rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint-2);
    color: var(--c-accent-text);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.25rem;
    flex: 0 0 auto;
}
.contact__info-text dt {
    font-size: var(--fs-eyebrow);
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--c-text-3);
    margin-bottom: 0.2rem;
}
.contact__info-text dd { margin: 0; color: var(--c-text-0); font-size: 0.98rem; line-height: 1.45; }
.contact__info-text a { color: inherit; transition: color var(--t-quick) var(--ease-out-quart); }
.contact__info-text a:hover { color: var(--c-accent-text); }

.contact__form .bezel__inner { padding: clamp(1.6rem, 3vw, 2.25rem); }
.contact__form h3 { margin-bottom: 1.5rem; }

.contact__form-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.85rem;
}

.field { display: flex; flex-direction: column; gap: 0.35rem; }
.field.field--full { grid-column: 1 / -1; }

.field label {
    font-size: var(--fs-eyebrow);
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--c-text-2);
}

.field input,
.field textarea,
.field select {
    width: 100%;
    padding: 0.85rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline-strong);
    color: var(--c-text-0);
    font-size: 16px; /* 16px+ avoids iOS zoom-in on focus */
    transition: border-color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
    outline: none;
    color-scheme: inherit;
}
.field input::placeholder,
.field textarea::placeholder { color: var(--c-text-3); }
.field input:focus,
.field textarea:focus,
.field select:focus {
    border-color: var(--c-accent);
    background: var(--c-surface-tint-2);
}
.field textarea { min-height: 8rem; resize: vertical; }

/* Native <select> popup chrome. Most browsers ignore the <select>'s
   own background for the dropdown panel itself, so the <option>s
   need explicit theme-aware colors — otherwise the list renders
   white-on-white in light mode / unstyled-system in some configs. */
.field select option {
    background-color: var(--c-bg-1);
    color: var(--c-text-0);
}
[data-theme="light"] .field select option {
    background-color: #ffffff;
    color: var(--c-text-0);
}

.field-toggle { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.field-toggle input { position: absolute; opacity: 0; pointer-events: none; }
.field-toggle label {
    cursor: pointer;
    padding: 0.6rem 1rem;
    border-radius: var(--r-pill);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline-strong);
    color: var(--c-text-1);
    font-size: 0.85rem;
    transition: background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart),
                color var(--t-quick) var(--ease-out-quart);
}
.field-toggle input:checked + label {
    background: var(--c-surface-tint-2);
    border-color: var(--c-hairline-accent);
    color: var(--c-accent-text);
}

.form-actions {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 1.5rem;
    gap: 1rem;
    flex-wrap: wrap;
}
.form-note {
    color: var(--c-text-3);
    font-size: 0.78rem;
    max-width: 30ch;
    line-height: 1.45;
}

/* =====================================================
 * Footer
 * ===================================================== */
.site-footer {
    position: relative;
    padding-block: clamp(4rem, 7vw, 6rem) 2rem;
    margin-top: clamp(2rem, 5vw, 5rem);
    border-top: 1px solid var(--c-hairline);
}
.site-footer__grid {
    display: grid;
    grid-template-columns: 1.4fr 1fr 1fr 1fr;
    gap: clamp(1.5rem, 3vw, 3rem);
    margin-bottom: clamp(2.5rem, 5vw, 4rem);
}

.site-footer h4 {
    color: var(--c-text-0);
    font-size: 0.82rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    margin-bottom: 0.85rem;
    font-family: 'Plus Jakarta Sans', sans-serif;
    font-weight: 500;
}

.site-footer__brand img { height: 36px; width: auto; margin-bottom: 1rem; }
[data-theme="light"] .site-footer__brand img { filter: invert(1) hue-rotate(180deg) brightness(0.4); }

.site-footer__brand p { color: var(--c-text-2); font-size: 0.9rem; max-width: 36ch; line-height: 1.65; }
.site-footer__socials { display: flex; gap: 0.5rem; margin-top: 1.1rem; }
.site-footer__socials a {
    width: 2.4rem;
    height: 2.4rem;
    border-radius: 999px;
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-1);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.site-footer__socials a:hover {
    color: var(--c-accent-text);
    background: var(--c-surface-tint-2);
}

.site-footer__col { display: flex; flex-direction: column; gap: 0.5rem; }
.site-footer__col a { color: var(--c-text-1); font-size: 0.9rem; transition: color var(--t-quick) var(--ease-out-quart); }
.site-footer__col a:hover { color: var(--c-accent-text); }
.site-footer__col p { color: var(--c-text-2); font-size: 0.88rem; line-height: 1.55; }
.site-footer__col .small { color: var(--c-text-3); font-size: 0.76rem; margin-top: 0.3rem; letter-spacing: 0.02em; }

.site-footer__bottom {
    padding-top: 1.5rem;
    border-top: 1px solid var(--c-hairline);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    color: var(--c-text-3);
    font-size: 0.82rem;
}
.site-footer__bottom-links {
    display: flex;
    align-items: center;
    gap: 1.25rem;
    flex-wrap: wrap;
}
.site-footer__bottom-links a:hover { color: var(--c-accent-text); }

/* Logout form button — looks like the surrounding links */
.site-footer__logout {
    margin: 0;
    padding: 0;
    display: inline;
}
.site-footer__logout button {
    background: none;
    border: 0;
    padding: 0;
    font: inherit;
    color: inherit;
    cursor: pointer;
    text-decoration: none;
    transition: color var(--t-quick) var(--ease-out-quart);
}
.site-footer__logout button:hover { color: var(--c-accent-text); }

/* =====================================================
 * Cookie consent (blocking modal) + "Was ist neu" modal
 * ===================================================== */
/* Scroll-lock the page behind any blocking modal so the visitor can't
   navigate the site until they've made a choice. */
body.consent-open,
body.whatsnew-open { overflow: hidden; }

.consent {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    padding: clamp(0.75rem, 3vw, 2rem);
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--t-base) var(--ease-out-quart);
}
.consent[hidden] { display: none; }
.consent.is-visible { opacity: 1; pointer-events: auto; }

.consent__backdrop {
    position: absolute;
    inset: 0;
    background: rgb(6 7 10 / 0.55);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
}

.consent__dialog {
    position: relative;
    width: 100%;
    max-width: 540px;
    /* The whole dialog scrolls when it can't fit — no nested scrollbar
       inside the options list. */
    max-height: calc(100dvh - 1.5rem);
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    transform: translate3d(0, 18px, 0);
    transition: transform var(--t-base) var(--ease-out-quart);
}
.consent.is-visible .consent__dialog { transform: translate3d(0, 0, 0); }
.consent__dialog:focus { outline: none; }

.consent__inner > .bezel__inner { padding: clamp(1.35rem, 3vw, 1.85rem); }

.consent__head {
    display: flex;
    align-items: center;
    gap: 1rem;
    margin-bottom: 1rem;
}
.consent__icon {
    flex: none;
    width: 3rem;
    height: 3rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.5rem;
    background: rgb(187 176 129 / 0.12);
    color: var(--c-accent-text);
}
.consent__head h2 { margin: 0.15rem 0 0; font-size: clamp(1.15rem, 2.5vw, 1.4rem); }
.consent__desc { margin: 0 0 1.1rem; color: var(--c-text-2); font-size: 0.88rem; line-height: 1.55; }
.consent__desc a { color: var(--c-accent-text); text-decoration: underline; text-underline-offset: 2px; }

.consent__options {
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
    margin-bottom: 1.1rem;
}
.consent__option {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.9rem;
    padding: 0.7rem 0.9rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.consent__option-text { display: flex; flex-direction: column; gap: 0.15rem; }
.consent__option-text strong { color: var(--c-text-0); font-weight: 600; font-size: 0.9rem; }
.consent__option-text .muted { font-size: 0.79rem; line-height: 1.4; }

/* Toggle switch */
.consent__switch { position: relative; flex: none; width: 2.6rem; height: 1.5rem; margin-top: 0.1rem; }
.consent__switch input {
    position: absolute;
    inset: 0;
    margin: 0;
    opacity: 0;
    cursor: pointer;
}
.consent__switch-track {
    position: absolute;
    inset: 0;
    border-radius: 999px;
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline-strong);
    transition: background var(--t-quick) var(--ease-out-quart), border-color var(--t-quick) var(--ease-out-quart);
}
.consent__switch-track::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 0.18rem;
    width: 1.05rem;
    height: 1.05rem;
    border-radius: 999px;
    background: var(--c-text-2);
    transform: translateY(-50%);
    transition: transform var(--t-snap) var(--ease-spring), background var(--t-quick) var(--ease-out-quart);
}
.consent__switch input:checked + .consent__switch-track {
    background: var(--c-accent);
    border-color: transparent;
}
.consent__switch input:checked + .consent__switch-track::after {
    transform: translate(1.08rem, -50%);
    background: #1a1814;
}
.consent__switch input:focus-visible + .consent__switch-track {
    outline: 2px solid var(--c-accent-text);
    outline-offset: 2px;
}
.consent__option.is-locked .consent__switch input { cursor: not-allowed; }
.consent__option.is-locked .consent__switch-track { opacity: 0.7; }

.consent__actions {
    display: flex;
    flex-direction: column;
    gap: 0.7rem;
}
.consent__actions-main { display: flex; align-items: stretch; gap: 0.6rem; }
.consent__actions-main .btn { flex: 1 1 0; justify-content: center; padding-inline: 0.75rem; }
.consent__settings-toggle {
    align-self: center;
    padding: 0.2rem 0.4rem;
    font-size: 0.83rem;
    color: var(--c-text-2);
    text-decoration: underline;
    text-underline-offset: 2px;
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart);
}
.consent__settings-toggle:hover { color: var(--c-accent-text); }

/* "Was ist neu" announcement modal */
.whatsnew {
    position: fixed;
    inset: 0;
    z-index: 980;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: clamp(0.75rem, 3vw, 2rem);
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--t-base) var(--ease-out-quart);
}
.whatsnew[hidden] { display: none; }
.whatsnew.is-visible { opacity: 1; pointer-events: auto; }
.whatsnew__backdrop {
    position: absolute;
    inset: 0;
    background: rgb(6 7 10 / 0.55);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
}
.whatsnew__dialog {
    position: relative;
    width: 100%;
    max-width: 520px;
    max-height: calc(100dvh - 2rem);
    /* The dialog itself doesn't scroll any more — only the feature
       list inside (.whatsnew__scroll) does. Header + actions stay
       pinned to the top + bottom of the dialog. */
    overflow: hidden;
    display: flex;
    overscroll-behavior: contain;
    transform: translate3d(0, 18px, 0) scale(0.98);
    transition: transform var(--t-base) var(--ease-out-quart);
}
.whatsnew.is-visible .whatsnew__dialog { transform: translate3d(0, 0, 0) scale(1); }
.whatsnew__dialog:focus { outline: none; }

.whatsnew__inner { width: 100%; display: flex; min-height: 0; }
.whatsnew__pane  {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
    padding: clamp(1.5rem, 3.5vw, 2.25rem);
    position: relative;
}
.whatsnew__head    { flex: 0 0 auto; }
.whatsnew__actions { flex: 0 0 auto; margin-top: 0.25rem; }
.whatsnew__scroll {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    /* Subtle padding so scrolled content doesn't hug the edge. */
    padding-right: 0.25rem;
    margin-right: -0.25rem;
}
/* Hide the scrollbar but keep scrolling functional. */
.whatsnew__scroll { scrollbar-width: thin; scrollbar-color: var(--c-hairline-accent) transparent; }
.whatsnew__scroll::-webkit-scrollbar { width: 6px; }
.whatsnew__scroll::-webkit-scrollbar-thumb { background: var(--c-hairline-accent); border-radius: 999px; }
.whatsnew__scroll::-webkit-scrollbar-track { background: transparent; }

.whatsnew__close {
    position: absolute;
    top: 0.85rem;
    right: 0.85rem;
    width: 2.1rem;
    height: 2.1rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-2);
    background: var(--c-surface-tint);
    transition: color var(--t-quick) var(--ease-out-quart), background var(--t-quick) var(--ease-out-quart);
}
.whatsnew__close:hover { color: var(--c-text-0); background: var(--c-surface-tint-2); }

.whatsnew__badge {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.3rem 0.7rem;
    border-radius: var(--r-pill);
    font-size: 0.7rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-weight: 600;
    background: rgb(187 176 129 / 0.14);
    color: var(--c-accent-text);
    border: 1px solid var(--c-hairline-accent);
}
.whatsnew h2 { margin: 0.9rem 0 0.5rem; font-size: clamp(1.4rem, 3vw, 1.85rem); }
.whatsnew__lead { margin: 0; color: var(--c-text-2); font-size: 0.95rem; line-height: 1.6; }

.whatsnew__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1rem; }
.whatsnew__list li { display: flex; gap: 0.9rem; align-items: flex-start; }
.whatsnew__list-icon {
    flex: none;
    width: 2.4rem;
    height: 2.4rem;
    border-radius: var(--r-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.2rem;
    background: rgb(187 176 129 / 0.1);
    color: var(--c-accent-text);
}
.whatsnew__list strong { display: block; color: var(--c-text-0); font-size: 0.96rem; margin-bottom: 0.1rem; }
.whatsnew__list p { margin: 0; color: var(--c-text-2); font-size: 0.86rem; line-height: 1.5; }

.whatsnew__actions { display: flex; gap: 0.6rem; flex-wrap: wrap; }
.whatsnew__actions .btn { flex: 1 1 auto; justify-content: center; }

/* Footer "Cookie-Einstellungen" — styled like the other footer links */
.site-footer__cookie-link {
    color: inherit;
    font: inherit;
    padding: 0;
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart);
    font-size: 14px;
    text-align: justify;
}
.site-footer__cookie-link:hover { color: var(--c-accent-text); }

/* =====================================================
 * Maintenance (offline) page + staff FAB
 * ===================================================== */

/* Maintenance-mode FAB — small round button bottom-right, visible
   only to logged-in staff while the site is in offline mode.
   Clicking the button reveals a popover with the description. */
.staff-maintenance-fab {
    position: fixed;
    right: clamp(1rem, 2vw, 1.5rem);
    bottom: clamp(1rem, 2vw, 1.5rem);
    z-index: 97;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.6rem;
    pointer-events: none;
}
.staff-maintenance-fab__btn,
.staff-maintenance-fab__panel { pointer-events: auto; }

.staff-maintenance-fab__btn {
    position: relative;
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #1a1814;
    background: var(--c-accent);
    border: 0;
    cursor: pointer;
    box-shadow: 0 12px 28px -10px rgb(0 0 0 / 0.45), 0 2px 6px -2px rgb(0 0 0 / 0.3);
    transition: transform var(--t-quick) var(--ease-out-quart),
                box-shadow var(--t-quick) var(--ease-out-quart);
}
.staff-maintenance-fab__btn:hover {
    transform: translateY(-2px);
    box-shadow: 0 16px 34px -10px rgb(0 0 0 / 0.5), 0 2px 6px -2px rgb(0 0 0 / 0.3);
}
.staff-maintenance-fab__btn i { font-size: 1.3rem; }

/* Subtle pulsing ring so the FAB doesn't get lost on long pages. */
.staff-maintenance-fab__pulse {
    position: absolute;
    inset: -4px;
    border-radius: 50%;
    border: 2px solid var(--c-accent);
    opacity: 0.7;
    animation: staffFabPulse 2.4s ease-out infinite;
    pointer-events: none;
}
@keyframes staffFabPulse {
    0%   { transform: scale(0.95); opacity: 0.55; }
    70%  { transform: scale(1.35); opacity: 0; }
    100% { transform: scale(1.35); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
    .staff-maintenance-fab__pulse { animation: none; }
}

.staff-maintenance-fab__panel {
    /* Sit above the button. width capped so it stays tidy on phones. */
    order: -1; /* render before the button so the gap puts it on top */
    width: clamp(15rem, 80vw, 19rem);
    padding: 0.85rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-bg-0);
    border: 1px solid var(--c-hairline);
    box-shadow: 0 18px 40px -18px rgb(0 0 0 / 0.55);
    font-size: 0.85rem;
    line-height: 1.5;
    color: var(--c-text-1);
    transform-origin: bottom right;
    transform: translateY(8px) scale(0.96);
    opacity: 0;
    transition: opacity var(--t-quick) var(--ease-out-quart),
                transform var(--t-quick) var(--ease-out-quart);
}
.staff-maintenance-fab.is-open .staff-maintenance-fab__panel {
    transform: translateY(0) scale(1);
    opacity: 1;
}
.staff-maintenance-fab__panel[hidden] { display: none; }
.staff-maintenance-fab__panel strong { color: var(--c-text-0); display: block; margin-bottom: 0.2rem; }
.staff-maintenance-fab__panel p { margin: 0 0 0.6rem; }
.staff-maintenance-fab__link {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    color: var(--c-accent-text);
    text-decoration: none;
    font-size: 0.85rem;
    font-weight: 500;
}
.staff-maintenance-fab__link i { font-size: 0.95rem; transition: transform var(--t-quick) var(--ease-out-quart); }
.staff-maintenance-fab__link:hover i { transform: translate3d(2px, -2px, 0); }

.maintenance {
    position: relative;
    z-index: 2;
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: clamp(2rem, 6vw, 4rem) var(--gutter);
}
.maintenance__card { width: 100%; max-width: 520px; }
.maintenance__card > .bezel__inner {
    padding: clamp(2rem, 5vw, 3.25rem);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}
.maintenance__brand { display: inline-block; margin-bottom: 1.5rem; }
.maintenance__brand img { height: 46px; width: auto; margin: 0 auto; }
.maintenance__status {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 3.4rem;
    height: 3.4rem;
    border-radius: 999px;
    margin-bottom: 1.1rem;
    font-size: 1.6rem;
    color: var(--c-accent-text);
    background: rgb(187 176 129 / 0.12);
    box-shadow: inset 0 0 0 1px var(--c-hairline-accent);
}
.maintenance .eyebrow { align-self: center; margin-bottom: 0.85rem; }
.maintenance h1 { margin: 0 0 1rem; font-size: clamp(1.5rem, 4vw, 2.15rem); line-height: 1.15; max-width: 18ch; }
.maintenance__lead { margin: 0 auto 1.85rem; color: var(--c-text-2); max-width: 44ch; line-height: 1.65; }
.maintenance__contact { width: 100%; margin-bottom: 1.85rem; }
.maintenance__contact .muted { margin: 0 0 0.85rem; font-size: 0.88rem; }
.maintenance__contact-row { display: flex; gap: 0.6rem; justify-content: center; flex-wrap: wrap; }
.maintenance__legal {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    flex-wrap: wrap;
    font-size: 0.82rem;
    color: var(--c-text-3);
    padding-top: 1.5rem;
    border-top: 1px solid var(--c-hairline);
}
.maintenance__legal a { color: var(--c-text-2); transition: color var(--t-quick) var(--ease-out-quart); }
.maintenance__legal a:hover { color: var(--c-accent-text); }

/* =====================================================
 * Error pages (404 / 419 / 500) — theme-aware
 * ===================================================== */
.error-page {
    position: relative;
    z-index: 2;
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: clamp(2rem, 6vw, 4rem) var(--gutter);
}
.error-card { width: 100%; max-width: 520px; }
.error-card > .bezel__inner {
    padding: clamp(2rem, 5vw, 3rem);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}
.error-card__icon {
    width: 3.4rem;
    height: 3.4rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.7rem;
    margin-bottom: 1.1rem;
    color: var(--c-accent-text);
    background: rgb(187 176 129 / 0.12);
    box-shadow: inset 0 0 0 1px var(--c-hairline-accent);
}
.error-card__code {
    font-size: 0.72rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--c-text-3);
    margin-bottom: 0.6rem;
}
.error-card h1 { margin: 0 0 0.85rem; font-size: clamp(1.6rem, 4vw, 2.3rem); line-height: 1.15; }
.error-card p { margin: 0 0 1.75rem; color: var(--c-text-2); max-width: 42ch; line-height: 1.65; }

/* =====================================================
 * Long-form legal pages
 * ===================================================== */
.legal {
    position: relative;
    z-index: 2;
    max-width: 820px;
    margin: 0 auto;
    padding: clamp(6.5rem, 12vw, 9rem) var(--gutter) clamp(4rem, 8vw, 6rem);
}
.legal__back {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    margin-bottom: 1.5rem;
    color: var(--c-text-2);
    font-size: 0.85rem;
    transition: color var(--t-quick) var(--ease-out-quart);
}
.legal__back:hover { color: var(--c-accent-text); }
.legal h1 { font-size: clamp(1.9rem, 4vw, 2.8rem); margin: 0.5rem 0 0.4rem; }
.legal__updated { color: var(--c-text-3); font-size: 0.82rem; margin: 0 0 2.5rem; }
.legal h2 {
    font-size: clamp(1.15rem, 2.5vw, 1.45rem);
    margin: 2.5rem 0 0.75rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--c-hairline);
}
.legal h2:first-of-type { border-top: 0; padding-top: 0; }
.legal h3 { font-size: 1.02rem; margin: 1.5rem 0 0.5rem; color: var(--c-text-0); }
.legal p,
.legal li { color: var(--c-text-2); line-height: 1.75; }
.legal p { margin: 0 0 1rem; }
.legal ul,
.legal ol { margin: 0 0 1rem; padding-left: 1.25rem; }
.legal li { margin-bottom: 0.4rem; }
.legal a { color: var(--c-accent-text); text-decoration: underline; text-underline-offset: 2px; }
.legal strong { color: var(--c-text-1); }
.legal address { font-style: normal; line-height: 1.75; color: var(--c-text-1); }
.legal__placeholder {
    background: rgb(187 176 129 / 0.1);
    border: 1px dashed var(--c-hairline-accent);
    border-radius: 0.35rem;
    padding: 0.05rem 0.4rem;
    color: var(--c-accent-text);
    font-size: 0.92em;
}

/* =====================================================
 * Auth pages
 * ===================================================== */
.auth-page {
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: clamp(6rem, 10vw, 7rem) var(--gutter) clamp(2rem, 6vw, 4rem);
    position: relative;
    z-index: 2;
}

.auth-page__back {
    position: absolute;
    top: clamp(1.25rem, 2vw, 2rem);
    left: clamp(1.25rem, 2vw, 2rem);
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.6rem 0.95rem;
    border-radius: var(--r-pill);
    color: var(--c-text-2);
    font-size: 0.82rem;
    letter-spacing: 0.04em;
    background: var(--c-surface-tint);
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px);
    box-shadow: inset 0 0 0 1px var(--c-hairline);
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
    z-index: 3;
}
.auth-page__back:hover {
    color: var(--c-text-0);
    background: var(--c-surface-tint-2);
}

.auth-card { width: 100%; max-width: 28rem; }
.auth-card .bezel__inner { padding: clamp(1.85rem, 3vw, 2.5rem); }

.auth-header { text-align: center; margin-bottom: 1.75rem; }
.auth-header h1 { font-size: 1.55rem; line-height: 1.2; margin: 0 0 0.4rem; }
.auth-header p { color: var(--c-text-2); font-size: 0.9rem; line-height: 1.5; margin: 0 auto; max-width: 32ch; }

.auth-form { display: flex; flex-direction: column; gap: 0.85rem; }
.auth-form__submit { margin-top: 0.5rem; width: 100%; justify-content: center; }

/* "Angemeldet bleiben" checkbox on /login. Sits between the password
   field and the submit button. Reuses the same surface-tint cards
   the notify-options use so it visually fits the form. */
.auth-remember {
    display: flex;
    align-items: flex-start;
    gap: 0.7rem;
    padding: 0.65rem 0.85rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    cursor: pointer;
    transition: background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
}
.auth-remember:hover { background: var(--c-surface-tint-2); border-color: var(--c-hairline-accent); }
.auth-remember input[type=checkbox] {
    flex: 0 0 auto;
    margin: 0.2rem 0 0;
    width: 1.05rem;
    height: 1.05rem;
    accent-color: var(--c-accent);
    cursor: pointer;
}
.auth-remember__body {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    line-height: 1.4;
    min-width: 0;
}
.auth-remember__body strong { color: var(--c-text-0); font-size: 0.95rem; font-weight: 600; }
.auth-remember__body .muted { font-size: 0.78rem; line-height: 1.45; }

.auth-footer {
    margin-top: 1.5rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--c-hairline);
    text-align: center;
    color: var(--c-text-2);
    font-size: 0.88rem;
}
.auth-footer a { color: var(--c-accent-text); transition: color var(--t-quick) var(--ease-out-quart); }
.auth-footer a:hover { color: var(--c-accent); }

.auth-meta {
    margin-top: 0.5rem;
    text-align: center;
    font-size: 0.8rem;
    color: var(--c-text-3);
}
.auth-meta a { color: var(--c-text-2); transition: color var(--t-quick) var(--ease-out-quart); }
.auth-meta a:hover { color: var(--c-accent-text); }

.field__error {
    color: #e29393;
    font-size: 0.78rem;
    margin-top: 0.15rem;
    line-height: 1.4;
}
.field input.has-error,
.field textarea.has-error {
    border-color: rgb(217 112 112 / 0.45);
}

.field-checkbox {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    font-size: 0.85rem;
    color: var(--c-text-2);
    line-height: 1.5;
    cursor: pointer;
}
.field-checkbox input[type="checkbox"] {
    appearance: none;
    -webkit-appearance: none;
    width: 1.15rem;
    height: 1.15rem;
    border-radius: 5px;
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline-strong);
    flex: 0 0 auto;
    margin-top: 0.15rem;
    position: relative;
    transition: background var(--t-quick) var(--ease-out-quart);
    cursor: pointer;
}
.field-checkbox input[type="checkbox"]:checked {
    background: var(--c-accent);
    border-color: var(--c-accent);
}
.field-checkbox input[type="checkbox"]:checked::after {
    content: "";
    position: absolute;
    left: 6px;
    top: 3px;
    width: 4px;
    height: 8px;
    border: solid #1a1814;
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}
.field-checkbox a { color: var(--c-accent-text); }

.alert {
    padding: 0.85rem 1.1rem;
    border-radius: var(--r-lg);
    font-size: 0.85rem;
    line-height: 1.55;
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    margin-bottom: 1rem;
}
.alert i { flex: 0 0 auto; margin-top: 0.18rem; font-size: 1.05rem; }
.alert--success { background: rgb(132 188 132 / 0.07); border: 1px solid rgb(132 188 132 / 0.25); color: #92ba8b; }
[data-theme="light"] .alert--success { color: #3b6f33; background: rgb(132 188 132 / 0.12); }
.alert--error   { background: rgb(217 112 112 / 0.07); border: 1px solid rgb(217 112 112 / 0.25); color: #c97f7f; }
[data-theme="light"] .alert--error { color: #8a3535; background: rgb(217 112 112 / 0.1); }
.alert--info    { background: var(--c-surface-tint); border: 1px solid var(--c-hairline-accent); color: var(--c-accent-text); }

/* =====================================================
 * Account portal
 * ===================================================== */
.account {
    padding-top: clamp(6rem, 10vw, 8rem);
    padding-bottom: clamp(4rem, 8vw, 6rem);
    position: relative;
    z-index: 2;
}
.account__head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1.5rem;
    flex-wrap: wrap;
    margin-bottom: clamp(2rem, 4vw, 3rem);
}
.account__hello h1 { margin: 0.5rem 0 0; font-size: clamp(1.85rem, 3.5vw, 2.6rem); }
.account__hello p  { color: var(--c-text-2); margin: 0.4rem 0 0; }

.account__breadcrumb {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    color: var(--c-text-2);
    font-size: 0.85rem;
    transition: color var(--t-quick) var(--ease-out-quart);
}
.account__breadcrumb:hover { color: var(--c-text-0); }

.account__section { margin-bottom: clamp(2.5rem, 5vw, 3.5rem); }
.account__section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem 1rem;
    flex-wrap: wrap;
    margin-bottom: 1.1rem;
}
.account__inline-link {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    flex: none;
    white-space: nowrap;
    transition: color var(--t-quick) var(--ease-out-quart);
}
.account__inline-link:hover { color: var(--c-accent-text); }

.account__upcoming {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
    gap: 0.75rem;
}
.account__upcoming li {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: 1rem;
    align-items: center;
    padding: 0.95rem 1.1rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    transition: background var(--t-quick) var(--ease-out-quart);
}
.account__upcoming li:hover { background: var(--c-surface-tint-2); }
.account__upcoming-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding-right: 0.85rem;
    border-right: 1px solid var(--c-hairline);
}
.account__upcoming-date strong {
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    font-size: 1.1rem;
}
.account__upcoming-date span {
    color: var(--c-accent-text);
    font-size: 0.7rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
}
.account__upcoming-meta p {
    margin: 0;
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-size: 1rem;
}
.account__upcoming-meta span { font-size: 0.76rem; color: var(--c-text-3); }
.account__upcoming-link {
    width: 2.2rem;
    height: 2.2rem;
    border-radius: 999px;
    background: var(--c-surface-tint-2);
    color: var(--c-accent-text);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: background var(--t-quick) var(--ease-out-quart);
}
.account__upcoming-link:hover { background: var(--c-hairline-accent); }

/* =====================================================
 * Account training calendar
 * ===================================================== */
.cal__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1rem;
}
.cal__title { font-family: 'Clash Display', sans-serif; font-size: 1.15rem; color: var(--c-text-0); }
.cal__nav {
    width: 2.2rem;
    height: 2.2rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-1);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    cursor: pointer;
    transition: background var(--t-quick) var(--ease-out-quart), color var(--t-quick) var(--ease-out-quart);
}
.cal__nav:hover { background: var(--c-surface-tint-2); color: var(--c-accent-text); }

.cal__weekdays,
.cal__grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 0.45rem;
}
.cal__grid {
    /* Every row the same height regardless of contents. clamp() scales
       smoothly from compact mobile through roomy desktop.
       Pinning the row height (instead of using aspect-ratio on cells)
       keeps button cells the same size as div cells — browsers give
       buttons a default min-height that fights aspect-ratio. */
    grid-auto-rows: clamp(2.8rem, 11vw, 4.8rem);
}
.cal__weekdays {
    margin-bottom: 0.5rem;
}
.cal__weekdays span {
    text-align: center;
    font-size: 0.7rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--c-text-3);
}
.cal__cell {
    position: relative;
    padding: 0;
    border-radius: 12px;
    background: var(--c-surface-tint);
    border: 1px solid transparent;
    color: var(--c-text-2);
    overflow: hidden;
    transition: background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart),
                transform var(--t-snap) var(--ease-spring);
    cursor: default;
    /* Reset native button styling so button-cells (with a session)
       render at the same size as div-cells (empty / outside). Without
       these, browsers give buttons a min-height + min-width that
       wrecks the uniform grid. */
    font: inherit;
    text-align: left;
    line-height: 1.1;
    align-self: stretch;
    justify-self: stretch;
}
button.cal__cell {
    cursor: pointer;
    min-width: 0;
    min-height: 0;
    width: 100%;
    height: 100%;
}
.cal__cell.is-empty {
    background: transparent;
    border: 1px dashed var(--c-hairline);
    opacity: 0.45;
}
/* Cells for days that fall outside the current month (leading / trailing
   fill so the grid is always a complete 6-week block). Greyed and
   non-interactive. */
.cal__cell.is-outside {
    background: transparent;
    border: 1px dashed var(--c-hairline);
    opacity: 0.55;
}
.cal__cell.is-outside .cal__day { color: var(--c-text-3); }
/* Light mode: the subtle surface tint barely shows — give day cells a
   stronger fill + a visible hairline so the grid reads clearly. */
[data-theme="light"] .cal__cell:not(.is-empty):not(.is-outside) {
    background: var(--c-surface-tint-2);
    border-color: var(--c-hairline);
}
.cal__day {
    position: absolute;
    top: 0.42rem;
    left: 0.55rem;
    font-size: 0.92rem;
    font-weight: 600;
    color: var(--c-text-1);
    letter-spacing: 0.01em;
}

/* Today: just a thin accent ring around the day number. Drawn with
   outline so the digit stays in the EXACT same spot as every other
   day in the grid (outline doesn't occupy layout space). */
.cal__cell.is-today .cal__day {
    color: var(--c-accent-text);
    font-weight: 700;
    outline: 1.5px solid var(--c-accent);
    outline-offset: 3px;
    border-radius: 999px;
}
[data-theme="light"] .cal__cell.is-today .cal__day {
    outline: 2px solid #a59573;
    color: #5e5430;
}

/* Selected (after click) — bolder accent ring. */
.cal__cell.is-selected {
    border-color: var(--c-accent-text);
    box-shadow: 0 0 0 1px var(--c-hairline-accent) inset;
}

.cal__cell.has-session {
    background: linear-gradient(140deg, rgb(187 176 129 / 0.18), rgb(187 176 129 / 0.06) 70%);
    border-color: var(--c-hairline-accent);
}
[data-theme="light"] .cal__cell.has-session {
    background: linear-gradient(140deg, rgb(187 176 129 / 0.28), rgb(187 176 129 / 0.10) 70%);
}
.cal__cell.has-session:hover {
    background: linear-gradient(140deg, rgb(187 176 129 / 0.28), rgb(187 176 129 / 0.10) 70%);
    transform: translateY(-2px);
    border-color: var(--c-accent-text);
}
.cal__cell.has-session.is-past {
    opacity: 0.55;
    background: var(--c-surface-tint-2);
    border-color: var(--c-hairline);
}
.cal__cell.has-session.is-past .cal__day { color: var(--c-text-3); }

/* Counts banner for the staff calendar — pill at the bottom of the
   cell, split 50/50: left = adult bookings (gold), right = children
   (blue). Always renders both halves so the calendar reads as a
   consistent grid. */
.cal__counts {
    position: absolute;
    left: 0.45rem;
    right: 0.45rem;
    bottom: 0.4rem;
    display: grid;
    grid-template-columns: 1fr 1fr;
    border-radius: 999px;
    overflow: hidden;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.02em;
    line-height: 1;
    box-shadow: 0 4px 10px -4px rgb(0 0 0 / 0.35);
}
.cal__counts-adult,
.cal__counts-child {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.32rem 0;
    min-width: 0;
}
/* Different hue from --c-accent so the banner doesn't read like the
   "today" pill. Green for adults, blue for children — both always
   filled even at 0. */
.cal__counts-adult { background: rgb(132 188 132 / 0.9); color: #1a1814; }
.cal__counts-child { background: rgb(126 167 214 / 0.9); color: #fff; }
.cal__cell.is-past .cal__counts {
    box-shadow: none;
}
.cal__cell.is-past .cal__counts-adult,
.cal__cell.is-past .cal__counts-child {
    background: var(--c-surface-tint-2);
    color: var(--c-text-3);
}

/* Account calendar (still showing per-time chips). Positioned at the
   bottom of the cell, never pushing the day number. */
.cal__times {
    position: absolute;
    left: 0.55rem;
    right: 0.55rem;
    bottom: 0.4rem;
    display: flex;
    flex-direction: column;
    gap: 1px;
    pointer-events: none;
}
.cal__time {
    font-size: 0.68rem;
    font-weight: 600;
    color: var(--c-accent-text);
    line-height: 1.25;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.cal__time.is-past { color: var(--c-text-3); }

/* Mobile fallback: compact dots instead of full time chips. */
.cal__dots {
    display: none;
    position: absolute;
    left: 0.55rem;
    bottom: 0.4rem;
    gap: 3px;
    flex-wrap: wrap;
}
.cal__dot { width: 5px; height: 5px; border-radius: 50%; background: var(--c-accent); }
.cal__dot.is-past { background: var(--c-text-3); }

@media (max-width: 640px) {
    .cal__weekdays,
    .cal__grid { gap: 0.3rem; }
    .cal__day { top: 0.3rem; left: 0.4rem; font-size: 0.78rem; }
    /* Compact counts banner on small cells. */
    .cal__counts {
        left: 0.25rem;
        right: 0.25rem;
        bottom: 0.25rem;
        font-size: 0.58rem;
        box-shadow: none;
    }
    .cal__counts-adult,
    .cal__counts-child { padding: 0.22rem 0; }
    .cal__times { display: none; }
    .cal__dots  { display: flex; left: 0.4rem; bottom: 0.35rem; }
    /* Tighter ring on small cells. */
    .cal__cell.is-today .cal__day { outline-offset: 2px; outline-width: 1px; }
}

.cal__agenda { margin-top: 1.5rem; padding-top: 1.25rem; border-top: 1px solid var(--c-hairline); }
.cal__agenda-title { margin: 0 0 0.6rem; font-size: 0.72rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--c-text-3); }
.cal__agenda ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.cal__agenda a {
    display: flex;
    align-items: baseline;
    gap: 0.6rem;
    flex-wrap: wrap;
    padding: 0.6rem 0.85rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    font-size: 0.9rem;
    color: var(--c-text-1);
    transition: background var(--t-quick) var(--ease-out-quart);
}
.cal__agenda a:hover { background: var(--c-surface-tint-2); }
.cal__agenda a strong { color: var(--c-text-0); font-weight: 600; }
.cal__agenda-plan { color: var(--c-text-3); margin-left: auto; }
.cal__agenda-empty { color: var(--c-text-3); font-size: 0.9rem; padding: 0.4rem 0; }

/* Staff booking calendar */
.staff-cal__detail { margin-top: 1.5rem; padding-top: 1.25rem; border-top: 1px solid var(--c-hairline); }
.staff-cal__detail-head { font-family: 'Clash Display', sans-serif; font-size: 1.05rem; color: var(--c-text-0); margin-bottom: 0.85rem; }
.staff-slot { margin-bottom: 1.1rem; }
.staff-slot__head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.45rem; }
.staff-slot__head strong { color: var(--c-text-0); }
.staff-slot__count {
    font-size: 0.76rem;
    padding: 0.2rem 0.6rem;
    border-radius: var(--r-pill);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline-accent);
    color: var(--c-accent-text);
}
.staff-slot__count.is-full { background: rgb(217 139 139 / 0.12); border-color: rgb(217 139 139 / 0.35); color: #d98b8b; }
.staff-slot__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
.staff-slot__list li {
    padding: 0.55rem 0.8rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    font-size: 0.88rem;
    line-height: 1.45;
}
.staff-slot__list strong { color: var(--c-text-0); font-weight: 600; }
/* Child row in the staff slot list — soft blue left border + tinted bg
   so kids visually separate from adults at a glance. */
.staff-slot__list .staff-slot__row--child {
    border-left: 3px solid rgb(126 167 214 / 0.65);
    background: linear-gradient(90deg, rgb(126 167 214 / 0.08), var(--c-surface-tint) 35%);
}

/* Customer calendar: selected-day detail panel */
.cal__detail { margin-top: 1.5rem; padding-top: 1.25rem; border-top: 1px solid var(--c-hairline); }
.cal__detail-head { font-family: 'Clash Display', sans-serif; font-size: 1.05rem; color: var(--c-text-0); margin-bottom: 0.85rem; }
.cal__detail-empty { color: var(--c-text-3); font-size: 0.9rem; margin: 0; }
.cal__detail-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
.cal__detail-list a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    padding: 0.7rem 0.9rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-1);
    font-size: 0.9rem;
    transition: background var(--t-quick) var(--ease-out-quart), border-color var(--t-quick) var(--ease-out-quart);
}
.cal__detail-list a:hover { background: var(--c-surface-tint-2); border-color: var(--c-hairline-accent); }
.cal__detail-list strong { color: var(--c-text-0); font-weight: 600; }
.cal__detail-go { display: inline-flex; align-items: center; gap: 0.3rem; color: var(--c-accent-text); font-size: 0.82rem; white-space: nowrap; }
.cal__detail-main { display: inline-flex; align-items: center; gap: 0.55rem; flex-wrap: wrap; min-width: 0; }
.cal__detail-chip {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.18rem 0.55rem;
    border-radius: 999px;
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    line-height: 1;
    white-space: nowrap;
}
.cal__detail-chip i { font-size: 0.85rem; }
.cal__detail-chip.is-child {
    color: #4a73a3;
    background: rgb(126 167 214 / 0.18);
    border: 1px solid rgb(126 167 214 / 0.45);
}
.cal__detail-chip.is-group {
    color: var(--c-accent-text);
    background: rgb(187 176 129 / 0.16);
    border: 1px solid rgb(187 176 129 / 0.4);
}

@media (max-width: 560px) {
    .cal__weekdays, .cal__grid { gap: 0.25rem; }
    .cal__cell { min-height: 2.7rem; padding: 0.3rem 0.25rem; gap: 0.2rem; align-items: center; }
    .cal__day { font-size: 0.78rem; }
    .cal__weekdays span { font-size: 0.6rem; letter-spacing: 0.06em; }
    /* Times don't fit in tiny cells — show dots instead. */
    .cal__times { display: none; }
    .cal__dots { display: flex; justify-content: center; }
}

.account__bookings {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
    gap: clamp(0.85rem, 1.4vw, 1.25rem);
}

.booking-card .bezel__inner {
    padding: 1.5rem 1.4rem 1.4rem;
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
    transition: transform var(--t-base) var(--ease-out-quart);
}
.booking-card:hover .bezel__inner { transform: translate3d(0, -3px, 0); }
.booking-card.is-cancelled .bezel__inner {
    opacity: 0.72;
    transform: none;
}
.booking-card.is-cancelled:hover .bezel__inner {
    opacity: 0.85;
    transform: none;
}
.booking-card__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.85rem;
}
.booking-card__head h3 { font-size: 1.25rem; line-height: 1.15; }
.booking-card__body {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.75rem;
    padding-top: 0.85rem;
    border-top: 1px solid var(--c-hairline);
}

.badge {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.3rem 0.65rem;
    border-radius: var(--r-pill);
    font-size: 0.68rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    line-height: 1;
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline-strong);
    color: var(--c-text-1);
    font-weight: 500;
}
.badge--is-paid {
    background: rgb(132 188 132 / 0.1);
    border-color: rgb(132 188 132 / 0.25);
    color: #92ba8b;
}
[data-theme="light"] .badge--is-paid { color: #3b6f33; }
.badge--is-pending {
    background: rgb(187 176 129 / 0.12);
    border-color: var(--c-hairline-accent);
    color: var(--c-accent-text);
}
.badge--is-cancelled { background: var(--c-surface-tint); color: var(--c-text-3); }
.badge--is-closed {
    background: rgb(126 134 152 / 0.14);
    border-color: rgb(126 134 152 / 0.32);
    color: #aab1c0;
}
[data-theme="light"] .badge--is-closed { color: #4a5260; background: rgb(126 134 152 / 0.12); }
.badge--is-closed i { font-size: 0.9rem; }
/* Child / minor booking badge — strong blue chip so adult vs. child
   bookings read at a glance. */
.badge--child {
    background: rgb(126 167 214 / 0.18);
    border-color: rgb(126 167 214 / 0.5);
    color: #a5c4e6;
}
[data-theme="light"] .badge--child { color: #2f5d8f; background: rgb(126 167 214 / 0.18); }
.badge--child i { font-size: 0.95rem; }

/* Child booking card — full blue chrome. The card gets a coloured ribbon
   at the top, a tinted bezel + a thick left border so it cannot be
   mistaken for an adult booking even at a glance. */
.account__group-title {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.55rem;
    margin: 0.5rem 0 1rem;
    color: var(--c-text-1);
    font-family: 'Clash Display', sans-serif;
    font-size: 1rem;
    letter-spacing: 0.01em;
    min-width: 0;
}
.account__group-title i { font-size: 1.2rem; color: var(--c-text-2); }
@media (max-width: 640px) {
    /* The "Einverständniserklärung mitbringen" tagline is nice-to-have
       on desktop; on phones it pushes the line off-screen. The Kind-
       Indicator + child ribbon on each row already communicates the
       same thing. */
    .account__group-title .muted { display: none; }
}
.account__group-title--child { color: #a5c4e6; }
.account__group-title--child i { color: #a5c4e6; }
[data-theme="light"] .account__group-title--child,
[data-theme="light"] .account__group-title--child i { color: #2f5d8f; }

.account__bookings--child + .account__group-title,
.account__bookings + .account__group-title { margin-top: 2rem; }
.booking-list + .account__group-title { margin-top: 2rem; }

/*
 | Booking list — compact, sortable row UI for the account dashboard.
 | Replaces the card grid. Each <li> is a single clickable row that
 | jumps to the booking detail page.
 */
.booking-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
}
.booking-list__item {
    /* Each item is its own bezel-light surface — same visual language
       as the cards (border + tint) but flat and stacked. */
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    transition: background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart),
                transform var(--t-base) var(--ease-out-quart);
}
.booking-list__item:hover {
    background: var(--c-surface-tint-2);
    border-color: var(--c-hairline-accent);
    transform: translate3d(0, -2px, 0);
}
.booking-list__row {
    display: flex;
    align-items: stretch;
    gap: 0.9rem;
    padding: 0.95rem 1.1rem;
    color: var(--c-text-1);
    text-decoration: none;
    /* Defensive against any child that forgets min-width:0 — keeps long
       plan names / meta strings from forcing a horizontal scroll. */
    min-width: 0;
}
.booking-list__indicator {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.6rem;
    height: 2.6rem;
    border-radius: 50%;
    background: rgb(187 176 129 / 0.12);
    border: 1px solid rgb(187 176 129 / 0.3);
    color: var(--c-accent-text);
    font-size: 1.25rem;
}
.booking-list__initials {
    font-family: 'Clash Display', sans-serif;
    font-size: 0.85rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    line-height: 1;
    color: inherit;
}
.booking-list__main {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}
.booking-list__top {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.75rem;
    flex-wrap: wrap;
    min-width: 0;
}
.booking-list__title {
    display: flex;
    align-items: baseline;
    gap: 0.55rem;
    min-width: 0;
    flex-wrap: wrap;
}
.booking-list__plan {
    margin: 0;
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-size: 1.1rem;
    line-height: 1.2;
    letter-spacing: -0.005em;
    min-width: 0;
    overflow-wrap: anywhere;
}
.booking-list__owner {
    color: var(--c-text-2);
    font-size: 0.85rem;
    min-width: 0;
    flex: 1 1 auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.booking-list__owner strong { color: var(--c-text-1); font-weight: 600; }
.booking-list__chips {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.35rem;
    justify-content: flex-end;
}
.booking-list__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem;
    color: var(--c-text-2);
    font-size: 0.83rem;
    min-width: 0;
}
.booking-list__sep { color: var(--c-text-3); }
.booking-list__inv {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.78rem;
    letter-spacing: 0.06em;
    color: var(--c-text-2);
    overflow-wrap: anywhere;
}
.booking-list__next {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.4rem;
    color: var(--c-text-1);
    font-size: 0.88rem;
    margin-top: 0.1rem;
    min-width: 0;
}
.booking-list__next i { color: var(--c-accent-text); font-size: 1rem; }
.booking-list__next strong { color: var(--c-text-0); font-weight: 600; }
.booking-list__next--none { color: var(--c-text-3); }
.booking-list__next--none i { color: var(--c-text-3); }
.booking-list__go {
    flex: 0 0 auto;
    align-self: center;
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    color: var(--c-accent-text);
    font-size: 0.85rem;
    white-space: nowrap;
}
.booking-list__go-text {
    /* Hide the verbose CTA on narrow screens — arrow alone is enough. */
}

/* Child-booking variant: blue chrome (matches the card variant). */
.booking-list__item--child {
    background:
        linear-gradient(180deg, rgb(126 167 214 / 0.1), rgb(126 167 214 / 0.04) 60%),
        var(--c-surface-tint);
    border-color: rgb(126 167 214 / 0.45);
}
.booking-list__item--child:hover {
    background:
        linear-gradient(180deg, rgb(126 167 214 / 0.14), rgb(126 167 214 / 0.06) 60%),
        var(--c-surface-tint-2);
    border-color: rgb(126 167 214 / 0.65);
}
.booking-list__item--child .booking-list__indicator {
    background: rgb(126 167 214 / 0.18);
    border-color: rgb(126 167 214 / 0.55);
    color: #4a73a3;
}
[data-theme="dark"] .booking-list__item--child .booking-list__indicator { color: #a5c4e6; }

/* Cancelled rows — dimmed, no hover-lift. */
.booking-list__item--cancelled { opacity: 0.78; }
.booking-list__item--cancelled:hover { opacity: 0.95; transform: none; }

/* Group-booking badge — accent ring, matches the calendar-detail chip. */
.badge--group {
    background: rgb(187 176 129 / 0.16);
    border-color: rgb(187 176 129 / 0.4);
    color: var(--c-accent-text);
}
.badge--group i { font-size: 0.95rem; }

/*
 | Documents list — booking-detail aside. Same visual language as the
 | dashboard booking list but compact, with a file-typed icon column.
 */
.docs-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
.docs-list__row {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    padding: 0.75rem 0.9rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-1);
    text-decoration: none;
    transition: background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
    min-width: 0;
}
.docs-list__row:hover {
    background: var(--c-surface-tint-2);
    border-color: var(--c-hairline-accent);
}
.docs-list__icon {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.4rem;
    height: 2.4rem;
    border-radius: 12px;
    background: rgb(187 176 129 / 0.14);
    border: 1px solid rgb(187 176 129 / 0.3);
    color: var(--c-accent-text);
    font-size: 1.2rem;
}
.docs-list__icon--child {
    background: rgb(126 167 214 / 0.15);
    border-color: rgb(126 167 214 / 0.45);
    color: #4a73a3;
}
[data-theme="dark"] .docs-list__icon--child { color: #a5c4e6; }
.docs-list__text {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
}
.docs-list__text strong { color: var(--c-text-0); font-weight: 600; font-size: 0.95rem; }
.docs-list__text .muted { font-size: 0.8rem; line-height: 1.4; }
.docs-list__go {
    flex: 0 0 auto;
    color: var(--c-accent-text);
    font-size: 1.05rem;
    align-self: center;
}

@media (max-width: 640px) {
    /* Mobile: keep the indicator on the left but tighten everything
       and drop the right-side "Verwalten" chunk — the whole row is
       already a tap target, and the chevron in the top-right (placed
       via order) is enough affordance. */
    .booking-list__row {
        padding: 0.85rem 0.95rem;
        gap: 0.75rem;
        align-items: flex-start;
    }
    .booking-list__indicator {
        width: 2.4rem;
        height: 2.4rem;
        font-size: 1.05rem;
    }
    .booking-list__main { gap: 0.5rem; }
    .booking-list__plan { font-size: 1rem; }
    /* Title + chips stack vertically — title takes the full width, chips
       wrap below it. Avoids the awkward "title squashed next to chips"
       look the desktop layout gets when the row is only ~220px wide. */
    .booking-list__top { flex-direction: column; align-items: flex-start; gap: 0.45rem; }
    .booking-list__title { width: 100%; }
    .booking-list__chips { justify-content: flex-start; }
    .badge {
        font-size: 0.62rem;
        padding: 0.25rem 0.55rem;
        letter-spacing: 0.08em;
    }
    /* Hide the verbose "OR-2026-…" invoice number on phones — it adds
       noise but customers don't actually need it to identify the
       booking (plan + next-date is enough). Available in the detail. */
    .booking-list__inv,
    .booking-list__meta .booking-list__sep:first-of-type { display: none; }
    .booking-list__meta {
        font-size: 0.78rem;
        gap: 0.25rem 0.5rem;
    }
    .booking-list__next {
        font-size: 0.83rem;
        margin-top: 0.15rem;
    }
    /* Right-side CTA collapses to just the arrow, anchored to the top
       so it lines up with the plan name on the first row. */
    .booking-list__go {
        align-self: flex-start;
        margin-top: 0.15rem;
        font-size: 1rem;
    }
    .booking-list__go-text { display: none; }
}

.booking-card--child > .bezel {
    position: relative;
    border-color: rgb(126 167 214 / 0.45);
    background:
        linear-gradient(180deg, rgb(126 167 214 / 0.08), transparent 35%),
        var(--c-bg-1);
    box-shadow: 0 14px 30px rgb(20 50 90 / 0.18), 0 1px 2px rgb(0 0 0 / 0.2);
    overflow: hidden;
    /* Flat top so the ribbon sits cleanly above the card body
       without any rounded corner peeking through. */
    border-top-left-radius: 0;
    border-top-right-radius: 0;
}
.booking-card--child > .bezel > .bezel__inner {
    border-top-left-radius: 0;
    border-top-right-radius: 0;
}
.booking-card__ribbon {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.7rem 1.1rem;
    background: linear-gradient(90deg, rgb(126 167 214 / 0.95), rgb(96 137 184 / 0.7));
    color: #ffffff;
    border-bottom: 1px solid rgb(126 167 214 / 0.6);
    min-width: 0;
    /* Pull the ribbon flush to the outer bezel edge — neutralises
       the bezel's 5px padding on top/left/right and matches the
       outer corner radius so it looks like a single attached
       header instead of a floating chip. */
    margin: calc(-1 * var(--bezel-pad)) calc(-1 * var(--bezel-pad)) 0;
}
.booking-card__ribbon-avatar {
    flex: 0 0 auto;
    width: 2.2rem;
    height: 2.2rem;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.18);
    border: 1px solid rgba(255, 255, 255, 0.35);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 0.78rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: #ffffff;
}
.booking-card__ribbon-text {
    display: flex;
    flex-direction: column;
    line-height: 1.15;
    min-width: 0;
    flex: 1 1 auto;
}
.booking-card__ribbon-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.85);
}
.booking-card__ribbon-eyebrow i { font-size: 0.78rem; }
.booking-card__ribbon-name {
    color: #ffffff;
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    font-size: 1rem;
    letter-spacing: -0.005em;
    margin-top: 0.2rem;
    /* Truncate long names with ellipsis — keeps the ribbon to a
       single, predictable line. The full name is in the parent's
       title attribute for hover/tap reveal. */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
    max-width: 100%;
}

/* Admin booking list — child rows get the same blue treatment. */
.admin-row--child {
    position: relative;
    background: linear-gradient(90deg, rgb(126 167 214 / 0.1), transparent 35%);
}
.admin-row--child::before {
    content: "";
    position: absolute;
    inset: 0;
    width: 4px;
    border-radius: 4px 0 0 4px;
    background: rgb(126 167 214 / 0.85);
    pointer-events: none;
}

/* Claim-by-invoice card */
.account__claim {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(1.5rem, 3vw, 2.5rem);
    align-items: center;
    padding: clamp(1.75rem, 2.5vw, 2.25rem);
}
.account__claim-copy h3 { margin: 0 0 0.6rem; }
.account__claim-copy p  { margin: 0; font-size: 0.93rem; line-height: 1.6; }
.account__claim-form    { display: grid; gap: 0.85rem; }
.account__claim-form .btn { justify-content: center; }
/* Empty state: no form on the right, copy spans the full width. */
.account__claim--empty { grid-template-columns: 1fr; }

@media (max-width: 820px) {
    .account__claim { grid-template-columns: 1fr; padding: 1.5rem; }
}

.account__cancelled {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}
.account__cancelled li {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 0.6rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px dashed var(--c-hairline);
    color: var(--c-text-2);
    font-size: 0.85rem;
}
.account__cancelled li strong { color: var(--c-text-1); font-weight: 500; }

.booking-detail__grid {
    display: grid;
    grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
    gap: clamp(1.25rem, 2vw, 2rem);
    align-items: start;
}
.booking-detail__aside { position: sticky; top: clamp(5rem, 8vw, 7rem); }
.booking-detail__dl {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 0.45rem 1.25rem;
    margin: 0;
}
.booking-detail__dl dt {
    font-size: 0.72rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--c-text-3);
    line-height: 1.5;
}
.booking-detail__dl dd { margin: 0; color: var(--c-text-0); font-size: 0.92rem; line-height: 1.5; }

.booking__slot.is-locked { background: var(--c-surface-tint); opacity: 0.7; }
.booking__slot.is-locked input,
.booking__slot.is-locked select { background: var(--c-surface-tint); color: var(--c-text-2); }
.booking__slot-lock { align-self: center; color: var(--c-text-3); padding-right: 0.5rem; }

.btn-danger {
    color: #e29393;
    box-shadow: inset 0 0 0 1px rgb(217 112 112 / 0.25);
}
[data-theme="light"] .btn-danger { color: #8a3535; }
.btn-danger:hover { background: rgb(217 112 112 / 0.06); }
.btn-danger .btn__icon { background: rgb(217 112 112 / 0.12); color: inherit; }

/* =====================================================
 * Booking funnel
 * ===================================================== */
.booking {
    padding-top: clamp(6rem, 10vw, 8rem);
    padding-bottom: clamp(4rem, 8vw, 6rem);
    position: relative;
    z-index: 2;
}

.booking__grid {
    display: grid;
    grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
    gap: clamp(1.25rem, 2vw, 2rem);
    align-items: start;
    margin-top: clamp(2rem, 4vw, 3rem);
}

.booking__main { display: flex; flex-direction: column; gap: clamp(1.25rem, 2vw, 1.75rem); }
.booking__aside { position: sticky; top: 70px; }
.booking__aside .bezel__inner { padding: clamp(1.65rem, 2.5vw, 2.15rem); }

/* Desktop Übersicht: full viewport minus header, flush edges,
   three sections: fixed header (eyebrow + plan + Termine),
   scrollable middle (attendees breakdown + per-row deductions),
   fixed footer (rabatt input, Zu zahlen, Zahlungsart, Submit,
   legal note). Mobile resets to normal stacked card. */
@media (min-width: 941px) {
    .booking__aside {
        align-self: stretch;
        height: calc(100vh - 70px);
        padding: 0;
    }
    .booking__aside > .bezel.bezel-accent {
        height: 100%;
        padding: 0;
        border-radius: 0;
        box-shadow: none;
        background: none;
    }
    .booking__aside > .bezel.bezel-accent > .bezel__inner {
        height: 100%;
        padding: 0;
        border-radius: 0;
        display: flex;
        flex-direction: column;
        overflow: hidden;
        box-shadow: none;
        border-left: 1px solid var(--c-hairline);
    }
    .booking__aside-head {
        flex: 0 0 auto;
        padding: clamp(1.4rem, 2vw, 2rem) clamp(1.5rem, 2vw, 2.15rem) 0.85rem;
        border-bottom: 1px solid var(--c-hairline);
    }
    .booking__aside-scroll {
        flex: 1 1 auto;
        overflow-y: auto;
        padding: 1rem clamp(1.5rem, 2vw, 2.15rem);
        min-height: 0;
    }
    .booking__aside-footer {
        flex: 0 0 auto;
        padding: 1rem clamp(1.5rem, 2vw, 2.15rem) clamp(1.1rem, 2vw, 1.5rem);
        border-top: 1px solid var(--c-hairline);
        background: var(--c-bg-1);
        background-image:
            radial-gradient(120% 80% at 100% 0%, rgb(187 176 129 / 0.08), transparent 60%);
    }
}

/* Footer block already provides its own top border, so the
   "Zu zahlen" row's CSS border would be visually redundant. */
.booking__aside-footer .booking__summary-total {
    border-top: 0 !important;
    padding-top: 0 !important;
    margin-top: 0.6rem;
}

/* Compact discount input — lives in the aside footer above
   "Zu zahlen". Smaller padding + no label since it sits right
   next to the total. */
.booking__discount--compact { margin: 0 0 0.6rem; }
.booking__discount--compact .booking__discount-row { gap: 0.4rem; }
.booking__discount--compact .booking__discount-row input {
    padding: 0.55rem 0.75rem;
    font-size: 0.85rem;
    border-radius: var(--r-md);
}
.booking__discount--compact .booking__discount-row .btn {
    padding: 0.55rem 0.9rem;
    font-size: 0.82rem;
}
.booking__discount--compact .booking__discount-msg {
    margin: 0.35rem 0 0;
    font-size: 0.78rem;
    min-height: 0;
}
.booking__discount--compact .booking__discount-msg:empty { display: none; }

/* Mobile / tablet stacked layout — head + scroll + footer
   collapse into normal flow so nothing tries to be sticky on
   small viewports. */
@media (max-width: 940px) {
    .booking__aside-head,
    .booking__aside-scroll,
    .booking__aside-footer { display: block; }
    .booking__aside-head { border-bottom: 1px solid var(--c-hairline); padding-bottom: 1rem; margin-bottom: 0.85rem; }
    .booking__aside-footer {
        margin-top: 1rem;
        padding-top: 1rem;
        border-top: 1px solid var(--c-hairline);
    }
}

/* Inline rules summary above the slot picker */
.booking__rules {
    list-style: none;
    margin: 1rem 0 1.5rem;
    padding: 1rem 1.15rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    display: grid;
    gap: 0.55rem;
}
.booking__rules li {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    color: var(--c-text-1);
    font-size: 0.88rem;
    line-height: 1.5;
}
.booking__rules i {
    flex: 0 0 auto;
    margin-top: 0.1rem;
    color: var(--c-accent-text);
    font-size: 1.05rem;
}

.booking__slots { display: flex; flex-direction: column; gap: 0.75rem; margin-top: 1.1rem; }

/* Booking-mode switcher (single / group). The participants picker
   only makes sense for logged-in non-trial flows, so the switcher
   itself is only rendered there too. JS toggles `[data-only-mode]`
   children + disables their inputs so hidden fields don't submit. */
.booking__mode {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.65rem;
}
.booking__mode input[type="radio"] {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
.booking__mode label {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.85rem 1rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    cursor: pointer;
    transition: border-color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.booking__mode label i {
    font-size: 1.4rem;
    color: var(--c-text-3);
    flex: none;
    transition: color var(--t-quick) var(--ease-out-quart);
}
.booking__mode label span {
    display: flex;
    flex-direction: column;
    line-height: 1.25;
    min-width: 0;
}
.booking__mode label strong { color: var(--c-text-0); font-size: 0.95rem; }
.booking__mode label small {
    color: var(--c-text-3);
    font-size: 0.78rem;
    margin-top: 0.1rem;
}
.booking__mode input[type="radio"]:checked + label {
    border-color: var(--c-accent);
    background: rgb(187 176 129 / 0.1);
}
.booking__mode input[type="radio"]:checked + label i,
.booking__mode input[type="radio"]:checked + label strong { color: var(--c-accent-text); }
.booking__mode input[type="radio"]:focus-visible + label {
    outline: 2px solid var(--c-accent);
    outline-offset: 2px;
}

@media (max-width: 640px) {
    .booking__mode { grid-template-columns: 1fr; }
    .booking__mode label { padding: 0.75rem 0.85rem; }
}

/* Guest + group mode: collapse the booking form down to JUST the
   switcher + the "Konto erforderlich" notice. Everything inside a
   .booking__bookable wrapper (rules, slots, account/contact form,
   minor section, aside with submit) is suppressed. Submit isn't
   possible anyway since the aside (with the button) is hidden. */
body.is-guest-group .booking__bookable { display: none !important; }
body.is-guest-group .booking__grid { grid-template-columns: 1fr; }

/* Multi-person participants picker (migration 018) — sits above the
   slot list. Two blocks (Erwachsene / Kinder) with chip rows for the
   added attendees. */
.participants {
    margin: 1rem 0 1.5rem;
    padding: 1.1rem 1.15rem 1rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px dashed var(--c-hairline-strong);
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
}
.participants__head h4 {
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    color: var(--c-text-0);
}
.participants__block { display: flex; flex-direction: column; gap: 0.45rem; }
.participants__label {
    color: var(--c-text-0);
    font-size: 0.74rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
}
.participants__hint { margin: 0; font-size: 0.82rem; line-height: 1.5; }
.participants__add { display: flex; gap: 0.5rem; align-items: stretch; }
.participants__add input,
.participants__add select {
    flex: 1 1 auto;
    min-width: 0;
    padding: 0.6rem 0.85rem;
    border-radius: var(--r-md);
    background: var(--c-bg-1);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    font: inherit;
    font-size: 0.9rem;
}
.participants__add input:focus,
.participants__add select:focus { outline: none; border-color: var(--c-hairline-accent); }
.participants__add .btn { flex: 0 0 auto; padding-block: 0.6rem; }
.participants__msg { margin: 0; min-height: 1em; font-size: 0.82rem; }
.participants__msg.is-error { color: #d98b8b; }
.participants__msg.is-ok    { color: #92ba8b; }
.participants__chips {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}
.participants__chips li {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.35rem 0.55rem 0.35rem 0.8rem;
    border-radius: 999px;
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline);
    font-size: 0.85rem;
    color: var(--c-text-0);
    line-height: 1.2;
}
.participants__chips li.is-minor {
    background: rgb(126 167 214 / 0.18);
    border-color: rgb(126 167 214 / 0.45);
}
[data-theme="light"] .participants__chips li.is-minor { color: #2f5d8f; }
.participants__chips li .muted { font-size: 0.78rem; }
.participants__chips li button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.4rem;
    height: 1.4rem;
    border-radius: 999px;
    background: transparent;
    border: 0;
    color: var(--c-text-3);
    cursor: pointer;
    font-size: 0.9rem;
}
.participants__chips li button:hover { color: #d98b8b; background: var(--c-surface-tint-2); }
.participants__count {
    margin: 0;
    color: var(--c-text-2);
    font-size: 0.84rem;
}
.participants__count strong { color: var(--c-text-0); }

@media (max-width: 640px) {
    .participants { padding: 0.85rem 0.9rem; gap: 0.85rem; }
    .participants__add { flex-direction: column; }
    .participants__add .btn { width: 100%; justify-content: center; }
}

.booking__slot {
    display: flex;
    align-items: stretch;
    gap: 0.85rem;
    padding: 0.95rem 1rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.booking__slot-num {
    flex: 0 0 auto;
    width: 2.4rem;
    display: flex;
    align-items: center;
    justify-content: center;
}
.booking__slot-num span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2rem;
    height: 2rem;
    border-radius: 999px;
    background: var(--c-surface-tint-2);
    color: var(--c-accent-text);
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    font-size: 0.88rem;
}

/* "Buchung läuft auf …" account confirmation panel */
.booking__account {
    display: flex;
    align-items: center;
    gap: 1rem;
    margin-top: 1rem;
    padding: 1rem 1.15rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.booking__account-icon {
    width: 2.6rem;
    height: 2.6rem;
    border-radius: 999px;
    background: var(--c-surface-tint-2);
    color: var(--c-accent-text);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.4rem;
    flex: 0 0 auto;
}
.booking__account-info { flex: 1 1 0; min-width: 0; }
.booking__account-name {
    margin: 0;
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    font-size: 1.05rem;
    letter-spacing: -0.01em;
}
.booking__account-meta {
    margin: 0.15rem 0 0;
    color: var(--c-text-2);
    font-size: 0.85rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.booking__account-edit {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.55rem 0.85rem;
    border-radius: var(--r-pill);
    color: var(--c-text-1);
    font-size: 0.8rem;
    letter-spacing: 0.04em;
    background: var(--c-surface-tint-2);
    box-shadow: inset 0 0 0 1px var(--c-hairline);
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
    white-space: nowrap;
}
.booking__account-edit:hover {
    color: var(--c-accent-text);
}

/* =====================================================
 * Booking-success / -cancel hero card
 * ===================================================== */
.success-card {
    padding: clamp(2.25rem, 4vw, 3.5rem) clamp(1.75rem, 3vw, 2.75rem) clamp(2rem, 3vw, 2.5rem);
    text-align: center;
}
.success-card__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 3.4rem;
    height: 3.4rem;
    border-radius: 999px;
    background: rgb(187 176 129 / 0.12);
    color: var(--c-accent-text);
    font-size: 1.7rem;
    margin: 0 auto 1.5rem;
    box-shadow: 0 0 0 1px var(--c-hairline-accent), 0 0 40px -10px var(--c-accent-glow);
}
.success-card__title {
    margin: 0 0 0.85rem;
    font-size: clamp(1.7rem, 1.2rem + 1.5vw, 2.4rem);
}
.success-card__subtitle {
    margin: 0 auto;
    max-width: 38rem;
    color: var(--c-text-2);
}
.success-card__subtitle strong {
    display: inline-block;
    margin-left: 0.45rem;
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    letter-spacing: 0.04em;
    font-weight: 500;
}

.success-card__meta {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0.85rem;
    margin: 2.25rem 0 0;
    text-align: left;
}
.success-card__meta > div {
    padding: 1rem 1.15rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.success-card__meta dt {
    font-size: 0.72rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--c-text-3);
    margin: 0 0 0.4rem;
}
.success-card__meta dd {
    margin: 0;
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-size: 1.05rem;
    letter-spacing: -0.01em;
}

.success-card__section-head {
    text-align: left;
    margin: 2.25rem 0 0.85rem;
    font-size: 0.75rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--c-text-3);
    font-family: 'Plus Jakarta Sans', sans-serif;
    font-weight: 500;
}

.success-card__sessions {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
    gap: 0.65rem;
    text-align: left;
}
.success-card__sessions li {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 0.85rem;
    align-items: center;
    padding: 0.9rem 1rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.success-card__date {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding-right: 0.85rem;
    border-right: 1px solid var(--c-hairline);
}
.success-card__date strong {
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    font-size: 1rem;
    letter-spacing: -0.01em;
    white-space: nowrap;
}
.success-card__date span {
    color: var(--c-accent-text);
    font-size: 0.65rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
}
.success-card__time p {
    margin: 0;
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-size: 0.98rem;
    letter-spacing: -0.005em;
}
.success-card__time span { font-size: 0.7rem; color: var(--c-text-3); letter-spacing: 0.04em; }

.success-card__note {
    margin: 2rem auto 0;
    max-width: 42rem;
    font-size: 0.9rem;
    color: var(--c-text-2);
    line-height: 1.6;
}
.success-card__note a { color: var(--c-accent-text); }
.success-card__note a:hover { color: var(--c-accent-bright); }

.success-card__actions {
    margin-top: 2rem;
    display: flex;
    gap: 0.75rem;
    justify-content: center;
    flex-wrap: wrap;
}

@media (max-width: 640px) {
    .success-card__meta     { grid-template-columns: 1fr; }
    .success-card__sessions { grid-template-columns: 1fr; }
}

.booking__summary { margin-top: 1.4rem; display: flex; flex-direction: column; gap: 0.6rem; }
.booking__summary-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    padding-bottom: 0.6rem;
    border-bottom: 1px dashed var(--c-hairline);
}
.booking__summary-row:last-child { border-bottom: 0; padding-bottom: 0; }
.booking__summary-row strong {
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    letter-spacing: -0.01em;
}

/* Per-attendee breakdown — one line per person in the Übersicht so
   the customer sees exactly what's being charged for whom. The JS
   keeps it in sync with the participants picker. */
.booking__summary-label {
    margin: 0.6rem 0 0.4rem;
    font-size: 0.74rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--c-text-3);
}
.booking__summary-label .muted { letter-spacing: 0.04em; text-transform: none; }
.booking__summary-attendees {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
}
.booking__summary-attendees li {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 0.85rem;
    padding-bottom: 0.5rem;
    border-bottom: 1px dashed var(--c-hairline);
}
.booking__summary-attendees li:last-child { border-bottom: 0; padding-bottom: 0; }
.booking__summary-attendees li > span {
    display: flex;
    flex-direction: column;
    min-width: 0;
    overflow-wrap: anywhere;
}
.booking__summary-attendees li > span strong {
    color: var(--c-text-0);
    font-size: 0.9rem;
    line-height: 1.25;
}
.booking__summary-attendees li > span .muted {
    font-size: 0.74rem;
    margin-top: 0.1rem;
}
.booking__summary-attendees li > strong {
    color: var(--c-text-0);
    font-variant-numeric: tabular-nums;
    flex: none;
}
/* Price column for the attendee row — stacks the Grundpreis above
   the (per-person Azubi-Rabatt) parenthesis. Aligned right. */
.booking__summary-attendees-price {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    flex: none;
    line-height: 1.2;
}
.booking__summary-attendees-price strong {
    color: var(--c-text-0);
    font-variant-numeric: tabular-nums;
}
.booking__summary-attendees-disc {
    margin-top: 0.15rem;
    color: var(--c-accent-bright);
    font-size: 0.78rem;
    font-variant-numeric: tabular-nums;
}

/* =====================================================
 * Mobile
 * ===================================================== */
/* =====================================================
 * Mobile breakpoints
 *  - tablet ~980px
 *  - mobile ~640px
 *  - small mobile ~420px (for touch-target + tightest fits)
 * ===================================================== */

@media (max-width: 980px) {
    :root {
        --section-py: clamp(3.5rem, 8vw, 6rem);
    }

    .hero {
        padding-top: clamp(7rem, 16vw, 10rem);
        padding-bottom: clamp(3.5rem, 8vw, 6rem);
    }
    .hero__grid { grid-template-columns: 1fr; gap: 2.5rem; }
    .hero__visual .bezel__inner { aspect-ratio: 4 / 4.5; }
    .hero__copy { gap: 1.25rem; }
    .hero__meta { gap: 1rem 1.75rem; }

    .services__grid { grid-template-columns: 1fr 1fr; }
    .plans__grid    { grid-template-columns: 1fr 1fr; }
    .plan-card.is-full-width { grid-column: 1 / -1; }
    .plan-card.is-full-width .bezel__inner {
        grid-template-columns: 1fr;
        align-items: stretch;
        row-gap: 1rem;
    }
    .plan-card.is-full-width .plan-card__header,
    .plan-card.is-full-width > .bezel > .bezel__inner > div:nth-child(2),
    .plan-card.is-full-width .plan-card__desc,
    .plan-card.is-full-width .plan-card__cta {
        grid-column: 1;
        grid-row: auto;
    }
    .plan-card.is-full-width .plan-card__cta .btn { width: 100%; justify-content: center; }

    .about__grid,
    .trial__grid,
    .contact__grid { grid-template-columns: 1fr; }
    .about__visual { aspect-ratio: 4 / 4; }
    .openings__grid { grid-template-columns: 1fr; }
    .contact__form-grid { grid-template-columns: 1fr; }
    .site-footer__grid { grid-template-columns: 1fr 1fr; }

    .site-nav__links { display: none; }
    .site-nav__toggle { display: inline-flex; }
    .site-nav__shell {
        padding: 0.6rem var(--gutter);
        gap: 0.5rem;
        /* 4 columns on mobile because the hamburger toggle becomes
           a visible grid child alongside the actions group. */
        grid-template-columns: auto 1fr auto auto;
    }
    .site-nav .btn-sm { display: none; }
    /* Profile-icon hides on mobile — the hamburger overlay already
       has "Anmelden" / "Mein Konto". Theme-toggle stays because it's
       a quick preference toggle. */
    .site-nav__actions a.theme-toggle { display: none; }
    .site-nav__actions { gap: 0.3rem; }

    .account__upcoming { grid-template-columns: 1fr; }
    .account__bookings { grid-template-columns: 1fr; }
    .account__head { gap: 1rem; }
    .booking-detail__grid { grid-template-columns: 1fr; }
    .booking-detail__aside { position: static; }

    .booking__grid { grid-template-columns: 1fr; }
    .booking__aside { position: static; }
    .booking__aside .bezel__inner { padding: clamp(1.25rem, 4vw, 1.65rem); }
    .booking__account { flex-wrap: wrap; }
    .booking__account-edit { margin-left: auto; }
    /* The funnel sits below a fixed header — pull the top padding in
       so the eyebrow/headline aren't buried under the chrome. */
    .booking { padding-top: clamp(4.5rem, 12vw, 6.5rem); }
    .booking__rules { padding: 0.85rem 1rem; gap: 0.5rem; }
    .booking__rules li { font-size: 0.84rem; }
    /* Bezel padding tightens too so date/time/dropdown have more room. */
    .booking .bezel > .bezel__inner { padding: clamp(1.1rem, 3vw, 1.6rem); }

    .form-actions { flex-direction: column; align-items: stretch; }
    .form-actions .btn { width: 100%; justify-content: center; }

    /* Compact section heads on smaller screens */
    .section-head { margin-bottom: clamp(2rem, 5vw, 3rem); }
}

/* =====================================================
 * Booking funnel — phone-specific tightenings
 *
 * Guard rails so nothing inside the bezels pokes past the right
 * edge: shrinkable flex/grid children, wrappable validity bar,
 * stacking summary aside (discount row + payment toggle become
 * full-width).
 * ===================================================== */
@media (max-width: 640px) {
    /* Long German words (Banküberweisung, Datenschutzerklärung, …)
       must wrap inside narrow cards instead of forcing the bezel
       wider than the viewport. */
    .booking .bezel,
    .booking .bezel > .bezel__inner,
    .booking__rules li,
    .booking__validity-bar,
    .booking__slot-notice,
    .booking__student-status,
    .booking__summary-row,
    .booking__discount-msg {
        min-width: 0;
        overflow-wrap: anywhere;
        word-break: break-word;
    }
    /* Flex children of .booking__slot get to shrink so the date
       button + select don't push the slot wider than its bezel. */
    .booking__slot > * { min-width: 0; }
    .booking__slot .contact__form-grid { width: 100%; }

    /* Validity bar can wrap — text often runs long ("Alle 10
       Termine müssen innerhalb von 3 Monaten …") and the single
       row layout was the most common overflow source. */
    .booking__validity-bar { flex-wrap: wrap; padding: 0.65rem 0.85rem; font-size: 0.82rem; }

    /* Übersicht (Aside) — sticks below the form on mobile, so the
       summary, discount block and payment toggle each get full
       width and the labels never get squeezed. */
    .booking__summary-row { gap: 0.85rem; }
    .booking__summary-row strong { white-space: nowrap; }
    .booking__discount-row { flex-direction: column; align-items: stretch; gap: 0.55rem; }
    .booking__discount-row .btn { width: 100%; justify-content: center; }
    .booking__discount-row input { width: 100%; }
    /* Payment toggle: stack vertically on phones so labels like
       "Banküberweisung" stay on one line inside the pill instead of
       being squeezed into a 50/50 column and wrapping awkwardly. */
    .booking__aside .field-toggle { flex-direction: column; gap: 0.5rem; }
    .booking__aside .field-toggle label {
        width: 100%;
        flex: 1 1 auto;
        min-width: 0;
        padding: 0.75rem 1rem;
        text-align: center;
        justify-content: center;
    }

    /* Headline scales down so the plan name + "— 10 Termine" fit
       comfortably on one or two lines instead of three. */
    .booking .section-head h1 { font-size: clamp(1.55rem, 7vw, 2.1rem); }
    .booking .section-head .lead { font-size: 0.92rem; }
}

@media (max-width: 640px) {
    .site-footer__grid { grid-template-columns: 1fr; }
    .services__grid,
    .plans__grid       { grid-template-columns: 1fr; }
    .plan-card.is-full-width .plan-card__cta .btn { width: 100%; }

    /* Bigger tap targets + edge-to-edge stacking */
    .btn { padding-block: 1rem; width: 100%; justify-content: center; }
    .field input,
    .field textarea,
    .field select { padding: 0.95rem 1rem; }

    .hero__cta { flex-direction: column; align-items: stretch; }
    .hero__cta .btn { width: 100%; justify-content: center; }
    .hero__meta-item { flex-basis: 100%; }

    .auth-page { padding: clamp(1.5rem, 5vw, 3rem) var(--gutter); }
    .auth-page__back {
        top: 0.85rem;
        left: 0.85rem;
        padding: 0.5rem 0.8rem;
    }

    /* Account dashboard: tighter head, full-width button rows, calmer
       type so the greeting + status read on fewer lines. */
    .account__head { align-items: stretch; gap: 1.25rem; }
    .account__hello h1 { font-size: clamp(1.55rem, 7.5vw, 2rem); }
    .account__hello p { font-size: 0.95rem; }
    .account__head form .btn,
    .account__head a.btn { width: 100%; justify-content: center; }
    .account__section-head { margin-bottom: 0.9rem; }
    .booking-card__head h3 { font-size: 1.12rem; }

    .booking__slots .field-toggle { width: 100%; }

    /* Booking slots: stack the number as a labelled header above the
       date/time fields so the badge no longer floats at the card edge. */
    .booking__slot { flex-direction: column; align-items: stretch; gap: 0.75rem; }
    .booking__slot-num {
        width: 100%;
        justify-content: flex-start;
        align-items: center;
        gap: 0.5rem;
        color: var(--c-text-2);
        font-size: 0.72rem;
        letter-spacing: 0.18em;
        text-transform: uppercase;
    }
    .booking__slot-num::before { content: "Termin"; }
    .booking__slot.is-locked .booking__slot-num::before { content: "Termin (fix)"; }

    /* "Buchung läuft auf": keep name + avatar on one full-width row and
       push "Konto öffnen" onto its own line so the name stops wrapping. */
    .booking__account-edit {
        margin-left: 0;
        flex-basis: 100%;
        width: 100%;
        justify-content: center;
    }

    /* Consent modal: stack the action buttons full-width on phones, the
       primary "Alle akzeptieren" closest to the thumb. */
    .consent { align-items: flex-end; }
    .consent__actions-main { flex-direction: column; }
    .consent__actions-main .btn { width: 100%; }

    .whatsnew__actions { flex-direction: column-reverse; }
    .whatsnew__actions .btn { width: 100%; }
}

@media (max-width: 420px) {
    .site-nav__shell {
        padding: 0.35rem 0.4rem 0.35rem 0.7rem;
        gap: 0.35rem;
    }
    .site-nav__brand img { height: 39px; }
    .theme-toggle { width: 2.1rem; height: 2.1rem; font-size: 0.95rem; }
    .site-nav__toggle { width: 2.1rem; height: 2.1rem; }

    .nav-overlay a { font-size: clamp(1.85rem, 8vw, 2.6rem); }

    /* Tighten eyebrow tracking on the smallest screens so labels like
       "Stornierte Buchungen" sit comfortably on one line. */
    .eyebrow { letter-spacing: 0.12em; padding: 0.32rem 0.7rem; }
}

/* =====================================================
 * Booking: discount code + live totals + student status
 * ===================================================== */
.booking__summary-total {
    margin-top: 0.4rem;
    padding-top: 0.85rem !important;
    border-top: 1px solid var(--c-hairline) !important;
    border-bottom: 0 !important;
}
.booking__summary-total span { color: var(--c-text-0); font-weight: 600; }
.booking__summary-total strong {
    font-family: 'Clash Display', sans-serif;
    font-size: 1.35rem;
    color: var(--c-text-0);
    letter-spacing: -0.01em;
}

.booking__discount { margin-top: 1.25rem; }
.booking__discount > label {
    display: block;
    font-size: 0.78rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--c-text-3);
    margin-bottom: 0.5rem;
}
.booking__discount-row { display: flex; gap: 0.5rem; }
.booking__discount-row input {
    flex: 1 1 auto;
    min-width: 0;
    padding: 0.7rem 0.9rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.booking__discount-row input:focus {
    outline: none;
    border-color: var(--c-hairline-accent);
}
.booking__discount-row .btn { flex: 0 0 auto; }
.booking__discount-msg { margin: 0.6rem 0 0; font-size: 0.82rem; min-height: 1.1em; }
.booking__discount-msg.is-ok    { color: #92ba8b; }
.booking__discount-msg.is-error { color: #d98b8b; }

/* Live validity window (booking + reschedule) */
.booking__validity:not(:empty) {
    display: inline-block;
    margin-top: 0.3rem;
    color: var(--c-accent-text);
    font-weight: 500;
}

/* Live validity period — its own bar under the slots */
.booking__validity-bar:empty { display: none; }
.booking__validity-bar {
    display: flex;
    align-items: center;
    gap: 0.55rem;
    margin-top: 1.1rem;
    padding: 0.75rem 1rem;
    border-radius: var(--r-lg);
    background: rgb(187 176 129 / 0.1);
    border: 1px solid var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-size: 0.88rem;
    font-weight: 500;
}
.booking__validity-bar::before {
    content: "";
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--c-accent);
    flex: none;
}

/* Per-slot duplicate-booking message + conflict highlight */
.booking__slot { flex-wrap: wrap; }
.booking__slot-msg { flex-basis: 100%; width: 100%; margin: 0.1rem 0 0; font-size: 0.82rem; line-height: 1.4; }
.booking__slot-msg:empty { display: none; }
.booking__slot-msg.is-error { color: #d98b8b; }
.booking__slot-msg.is-info  { color: var(--c-accent-text); }
.booking__slot.has-conflict,
.booking__slot.has-window-error { border-color: rgb(217 139 139 / 0.5); background: rgb(217 139 139 / 0.07); }

.btn:disabled { opacity: 0.45; }

.booking__student-status {
    display: flex;
    align-items: flex-start;
    gap: 0.7rem;
    margin-top: 1.5rem;
    padding: 0.95rem 1.1rem;
    border-radius: var(--r-lg);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    font-size: 0.88rem;
    line-height: 1.5;
    color: var(--c-text-2);
}
.booking__student-status i { font-size: 1.3rem; flex: 0 0 auto; margin-top: 0.05rem; color: var(--c-text-3); }
.booking__student-status strong { color: var(--c-text-0); }
.booking__student-status a { color: var(--c-accent-text); text-decoration: underline; text-underline-offset: 2px; }
.booking__student-status--approved {
    background: rgb(132 188 132 / 0.1);
    border-color: rgb(132 188 132 / 0.25);
}
.booking__student-status--approved i { color: #92ba8b; }
.booking__student-status--pending i,
.booking__student-status--none i { color: var(--c-accent-text); }

/* =====================================================
 * Legal change banners (AGB + Datenschutzerklärung)
 *
 * The wrapper handles the fixed bottom-of-viewport positioning; the
 * banners themselves are regular flex children so two pending notices
 * stack cleanly instead of overlapping.
 * ===================================================== */
.legal-banners {
    position: fixed;
    left: clamp(1rem, 3vw, 2rem);
    right: clamp(1rem, 3vw, 2rem);
    bottom: clamp(1rem, 3vw, 2rem);
    z-index: 88;
    max-width: 920px;
    margin-inline: auto;
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
    pointer-events: none;
}
.legal-banner {
    border-radius: var(--r-pill);
    background: var(--c-surface-tint-2);
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px);
    box-shadow: var(--bezel-inner-hi), inset 0 0 0 1px var(--c-hairline-strong), var(--shadow-float);
    opacity: 0;
    transform: translate3d(0, 16px, 0);
    transition: opacity var(--t-base) var(--ease-out-quart), transform var(--t-base) var(--ease-out-quart);
    pointer-events: none;
}
.legal-banner[hidden] { display: none; }
.legal-banner.is-visible { opacity: 1; transform: translate3d(0, 0, 0); pointer-events: auto; }
.legal-banner__inner {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    padding: 0.85rem 1rem 0.85rem 1.35rem;
    flex-wrap: wrap;
}
.legal-banner__inner > i { font-size: 1.35rem; color: var(--c-accent-text); flex: 0 0 auto; }
.legal-banner p { margin: 0; flex: 1 1 240px; font-size: 0.88rem; color: var(--c-text-1); line-height: 1.5; }
.legal-banner a { color: var(--c-accent-text); text-decoration: underline; text-underline-offset: 2px; }
.legal-banner__note { display: block; color: var(--c-text-3); font-size: 0.82rem; margin-top: 0.15rem; }
.legal-banner__dismiss-form { margin: 0; }
.legal-banner__dismiss {
    flex: 0 0 auto;
    padding: 0.55rem 1.1rem;
    border-radius: var(--r-pill);
    background: var(--c-accent);
    color: #1a1814;
    font-size: 0.82rem;
    font-weight: 600;
    cursor: pointer;
    transition: filter var(--t-quick) var(--ease-out-quart);
}
.legal-banner__dismiss:hover { filter: brightness(1.05); }

/* Mobile: keep the banner tight and put the dismiss button on its
   own full-width row below the message so the chip-style pill never
   collides with the icon + paragraph. */
@media (max-width: 640px) {
    .legal-banners {
        left: 0.65rem;
        right: 0.65rem;
        bottom: 0.65rem;
        gap: 0.45rem;
    }
    .legal-banner { border-radius: var(--r-lg); }
    .legal-banner__inner { padding: 0.7rem 0.85rem; gap: 0.55rem; }
    .legal-banner__inner > i { font-size: 1.15rem; }
    .legal-banner p { font-size: 0.82rem; flex-basis: calc(100% - 2.2rem); }
    .legal-banner__note { font-size: 0.74rem; }
    .legal-banner__dismiss-form { flex-basis: 100%; }
    .legal-banner__dismiss {
        width: 100%;
        justify-content: center;
        padding: 0.6rem 1rem;
        text-align: center;
    }
}

/* =====================================================
 * Staff admin area (/manage)
 * ===================================================== */
/* Shell = collapsible sidebar + content area */
.admin-shell {
    position: relative;
    z-index: 2;
    display: flex;
    align-items: stretch;
    min-height: 100dvh;
}

.admin-sidebar {
    flex: 0 0 264px;
    width: 264px;
    position: sticky;
    top: 0;
    align-self: flex-start;
    /* Cap at the viewport so the bottom-pinned footer (Account, Hilfe,
       Logout) stays visible no matter how tall the nav grows. */
    height: 100dvh;
    max-height: 100dvh;
    display: flex;
    flex-direction: column;
    padding: 1rem 0.75rem;
    background: var(--c-surface-tint);
    border-right: 1px solid var(--c-hairline);
    transition: flex-basis var(--t-base) var(--ease-out-quart), width var(--t-base) var(--ease-out-quart),
                transform var(--t-base) var(--ease-out-quart);
}
.admin-sidebar__top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    padding: 0.35rem 0.4rem 0.85rem;
    margin-bottom: 0.5rem;
    border-bottom: 1px solid var(--c-hairline);
}
.admin-sidebar__brand { display: inline-flex; align-items: center; gap: 0.6rem; min-width: 0; }
.admin-sidebar__brand img { height: 26px; width: auto; flex: none; }
.admin-sidebar__brand span {
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    color: var(--c-text-0);
    white-space: nowrap;
    overflow: hidden;
}
.admin-sidebar__collapse,
.admin-sidebar__close {
    flex: none;
    width: 2rem;
    height: 2rem;
    border-radius: var(--r-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-2);
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart), background var(--t-quick) var(--ease-out-quart);
}
.admin-sidebar__collapse:hover,
.admin-sidebar__close:hover { color: var(--c-text-0); background: var(--c-surface-tint-2); }
.admin-sidebar__collapse i { transition: transform var(--t-base) var(--ease-out-quart); }
/* Close (X) is mobile-only; the collapse caret is desktop-only. */
.admin-sidebar__close { display: none; font-size: 1.2rem; }

.admin-sidebar__nav {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    flex: 1 1 auto;
    /* When the nav has more entries than fit, scroll inside the bar
       instead of pushing the footer off-screen. min-height:0 lets the
       flex child actually shrink in Safari/Firefox. */
    overflow-y: auto;
    min-height: 0;
    /* Hide the scrollbar but keep scrolling functional. */
    scrollbar-width: none;       /* Firefox */
    -ms-overflow-style: none;    /* legacy Edge / IE */
}
.admin-sidebar__nav::-webkit-scrollbar { display: none; } /* Chrome / Safari */
.admin-sidebar__footer {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    padding-top: 0.5rem;
    border-top: 1px solid var(--c-hairline);
}
.admin-sidebar__logout { margin: 0; }
.admin-sidebar__link {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    width: 100%;
    padding: 0.65rem 0.75rem;
    border-radius: var(--r-md);
    color: var(--c-text-2);
    font-size: 0.9rem;
    text-align: left;
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart), background var(--t-quick) var(--ease-out-quart);
}
.admin-sidebar__link i { font-size: 1.2rem; flex: none; }
.admin-sidebar__link span { white-space: nowrap; overflow: hidden; }
.admin-sidebar__link:hover { color: var(--c-text-0); background: var(--c-surface-tint-2); }
.admin-sidebar__link.is-active { color: var(--c-accent-text); background: var(--c-hairline-accent); }

.admin-main { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; }
.admin-main__bar {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.55rem var(--gutter);
    border-bottom: 1px solid var(--c-hairline);
    /* Opaque so content scrolling under the sticky bar stays legible. */
    background: var(--c-bg-0);
    background-image: linear-gradient(var(--c-surface-tint), var(--c-surface-tint));
    position: sticky;
    top: 0;
    z-index: 20;
    box-shadow: 0 6px 18px -10px rgb(0 0 0 / 0.35);
}
.admin-main__menu {
    display: none;
    width: 2.4rem;
    height: 2.4rem;
    border-radius: var(--r-md);
    align-items: center;
    justify-content: center;
    color: var(--c-text-1);
    font-size: 1.3rem;
    cursor: pointer;
    background: var(--c-surface-tint-2);
}
.admin-main__title { display: none; font-family: 'Clash Display', sans-serif; color: var(--c-text-0); }
.admin-main__theme { margin-left: auto; }
.admin-main__inner {
    width: 100%;
    max-width: 1100px;
    padding: clamp(1.5rem, 4vw, 2.5rem) var(--gutter) clamp(4rem, 8vw, 6rem);
}

/* Collapsed desktop rail (state persisted on <html>) */
html.admin-collapsed .admin-sidebar { flex-basis: 74px; width: 74px; padding-inline: 0.5rem; }
html.admin-collapsed .admin-sidebar__brand { display: none; }
html.admin-collapsed .admin-sidebar__top { justify-content: center; padding-inline: 0; }
html.admin-collapsed .admin-sidebar__link { justify-content: center; gap: 0; padding-inline: 0.5rem; }
html.admin-collapsed .admin-sidebar__link span { display: none; }
html.admin-collapsed .admin-sidebar__collapse i { transform: rotate(180deg); }

.admin-sidebar__backdrop { display: none; }

@media (max-width: 900px) {
    /* Off-canvas drawer; collapsed by default on mobile */
    .admin-main__menu { display: inline-flex; }
    .admin-main__title { display: inline; }
    .admin-sidebar__collapse { display: none; }
    .admin-sidebar__close { display: inline-flex; }
    .admin-sidebar {
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        height: 100dvh;
        z-index: 120;
        transform: translateX(-100%);
        /* Opaque drawer so page content doesn't bleed through (the base
           surface tint is translucent, which looked washed-out on mobile). */
        background: var(--c-bg-0);
        background-image: linear-gradient(var(--c-surface-tint), var(--c-surface-tint));
    }
    body.admin-sidebar-open .admin-sidebar { transform: translateX(0); }

    /* Ignore the desktop rail collapse on mobile — show the full drawer */
    html.admin-collapsed .admin-sidebar { flex-basis: 264px; width: 264px; padding-inline: 0.75rem; }
    html.admin-collapsed .admin-sidebar__brand { display: inline-flex; }
    html.admin-collapsed .admin-sidebar__top { justify-content: space-between; }
    html.admin-collapsed .admin-sidebar__link { justify-content: flex-start; gap: 0.7rem; padding-inline: 0.75rem; }
    html.admin-collapsed .admin-sidebar__link span { display: inline; }

    .admin-sidebar__backdrop {
        display: block;
        position: fixed;
        inset: 0;
        z-index: 110;
        background: rgb(6 7 10 / 0.66);
        opacity: 0;
        pointer-events: none;
        transition: opacity var(--t-base) var(--ease-out-quart);
    }
    body.admin-sidebar-open .admin-sidebar__backdrop { opacity: 1; pointer-events: auto; }
    body.admin-sidebar-open { overflow: hidden; }
}

.admin__head { margin-bottom: clamp(1.5rem, 3vw, 2.25rem); }
.admin__head h1 {
    margin: 0.4rem 0 0.3rem;
    font-size: clamp(1.7rem, 4vw, 2.4rem);
    line-height: 1.1;
}
.admin__head p { margin: 0; display: inline-flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; }
.admin__head-pill {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    padding: 0.18rem 0.6rem;
    border-radius: var(--r-pill);
    background: var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-size: 0.76rem;
    letter-spacing: 0.02em;
}
.admin__head-pill i { font-size: 0.95rem; }

.admin__cards {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
    gap: clamp(0.9rem, 1.5vw, 1.25rem);
}
.admin-card { display: block; text-decoration: none; color: inherit; }
.admin-card .bezel__inner {
    height: 100%;
    padding: 1.4rem 1.4rem 1.25rem;
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
    transition: transform var(--t-base) var(--ease-out-quart),
                border-color var(--t-base) var(--ease-out-quart),
                box-shadow var(--t-base) var(--ease-out-quart);
}
.admin-card:hover .bezel__inner {
    transform: translate3d(0, -3px, 0);
    box-shadow: 0 18px 40px -28px rgb(0 0 0 / 0.55);
}
.admin-card__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.6rem;
}
.admin-card__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.85rem;
    height: 2.85rem;
    border-radius: 14px;
    background: linear-gradient(135deg, rgb(187 176 129 / 0.18), rgb(187 176 129 / 0.05));
    color: var(--c-accent-text);
    font-size: 1.45rem;
    border: 1px solid var(--c-hairline-accent);
}
.admin-card__badge {
    display: inline-flex;
    align-items: baseline;
    gap: 0.3rem;
    padding: 0.18rem 0.55rem;
    border-radius: var(--r-pill);
    background: var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-weight: 600;
    font-size: 0.95rem;
    line-height: 1;
}
.admin-card__badge-label { font-size: 0.7rem; font-weight: 500; letter-spacing: 0.04em; text-transform: uppercase; opacity: 0.8; }
.admin-card__body { display: flex; flex-direction: column; gap: 0.2rem; }
.admin-card__body h2 { margin: 0; font-size: 1.15rem; line-height: 1.25; }
.admin-card__body p { margin: 0; font-size: 0.88rem; line-height: 1.45; }
.admin-card__cta {
    margin-top: auto;
    padding-top: 0.75rem;
    border-top: 1px solid var(--c-hairline);
    display: inline-flex;
    align-items: center;
    justify-content: space-between;
    color: var(--c-accent-text);
    font-size: 0.86rem;
    font-weight: 500;
    letter-spacing: 0.01em;
}
.admin-card__cta i { transition: transform var(--t-quick) var(--ease-out-quart); }
.admin-card:hover .admin-card__cta i { transform: translate3d(2px, -2px, 0); }

.admin__grid {
    display: grid;
    grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
    gap: clamp(1rem, 2vw, 1.5rem);
    align-items: start;
}
.admin__proofs {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
    gap: clamp(0.85rem, 1.5vw, 1.25rem);
}
.admin-form { display: flex; flex-direction: column; gap: 0.85rem; }
.admin-form .field { margin: 0; }
.admin-form textarea {
    width: 100%;
    padding: 0.8rem 0.95rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    resize: vertical;
}

.admin-table { display: flex; flex-direction: column; gap: 0.6rem; }
.admin-row {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    padding: 0.9rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.admin-row.is-inactive { opacity: 0.6; }
.admin-row__main { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.admin-code {
    font-family: ui-monospace, Menlo, monospace;
    font-size: 0.95rem;
    color: var(--c-text-0);
    letter-spacing: 0.05em;
}
.admin-row__meta { display: flex; flex-wrap: wrap; gap: 0.35rem; font-size: 0.82rem; }
.admin-row__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.admin-row__actions form { margin: 0; }
.admin-row__danger:hover { color: #d98b8b; }

/* Invoice / booking manager */
.admin-row--link { text-decoration: none; transition: background 0.15s ease, border-color 0.15s ease; }
.admin-row--link:hover { background: var(--c-bg-1); border-color: var(--c-hairline-accent); }
.admin-row--link .admin-row__meta { color: var(--c-text-2); }
@media (min-width: 720px) {
    .admin-row--link { flex-direction: row; align-items: center; gap: 1rem; }
    .admin-row--link .admin-row__main { flex: 0 0 auto; }
    .admin-row--link .admin-row__meta { flex: 1 1 auto; }
    .admin-row--link .admin-row__actions { flex: 0 0 auto; margin-left: auto; }
}

.invoice-search { display: flex; gap: 0.5rem; margin-bottom: 1.25rem; flex-wrap: wrap; }
.invoice-search input { flex: 1 1 240px; min-width: 0; padding: 0.6rem 0.9rem; border-radius: var(--r-md); background: var(--c-surface-tint); border: 1px solid var(--c-hairline); color: var(--c-text-0); font: inherit; font-size: 0.92rem; }
.invoice-search input:focus { outline: none; border-color: var(--c-hairline-accent); }

.pager { display: flex; align-items: center; justify-content: center; gap: 0.6rem 1rem; margin: 1.25rem 0; flex-wrap: wrap; }
.pager + .admin-table { margin-top: 0.4rem; }
.pager__btn {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    padding: 0.4rem 0.65rem;
    border-radius: var(--r-md);
    color: var(--c-text-1);
    text-decoration: none;
    font-size: 0.88rem;
    border: 1px solid var(--c-hairline);
    background: var(--c-surface-tint);
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
}
.pager__btn:hover { color: var(--c-text-0); background: var(--c-surface-tint-2); border-color: var(--c-hairline-accent); }
.pager__info { font-size: 0.82rem; color: var(--c-text-3); }

.pager__jump select {
    appearance: none;
    -webkit-appearance: none;
    padding: 0.4rem 1.6rem 0.4rem 0.7rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    font-size: 0.88rem;
    font-family: inherit;
    cursor: pointer;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%23999' d='M5 6 0 0h10z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 0.6rem center;
    color-scheme: dark;
}
[data-theme="light"] .pager__jump select { color-scheme: light; }
.pager__jump option,
.pager__jump optgroup { background-color: var(--c-bg-0); color: var(--c-text-0); }

/* Reusable a11y-only helper (used by the pager jump label among others) */
.visually-hidden {
    position: absolute !important;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

/* =====================================================
 * Global select dropdown theme fix
 *
 * Custom-styled <select> elements (appearance: none) lose the
 * OS-native colour-scheme inheritance for their option list, so
 * dropdowns render with a stark white background even in dark
 * theme. Pin colour-scheme + option background/colour on EVERY
 * select so we don't have to remember per component.
 * ===================================================== */
select { color-scheme: dark; }
[data-theme="light"] select { color-scheme: light; }
select option,
select optgroup {
    background-color: var(--c-bg-0);
    color: var(--c-text-0);
}
select optgroup {
    color: var(--c-text-3);
    font-style: normal;
}

.invoice-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; }
.invoice-block__title { margin: 0 0 1rem; font-size: 1.05rem; }
.invoice-courses { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.invoice-courses li { display: flex; align-items: baseline; gap: 0.75rem; flex-wrap: wrap; padding: 0.5rem 0.75rem; border-radius: var(--r-md); background: var(--c-surface-tint); }
.invoice-courses__n { font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--c-text-3); flex: 0 0 4.5rem; }
.invoice-docs { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.invoice-resend { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.invoice-resend input { flex: 1 1 240px; min-width: 0; padding: 0.6rem 0.9rem; border-radius: var(--r-md); background: var(--c-bg-1); border: 1px solid var(--c-hairline); color: var(--c-text-0); font: inherit; font-size: 0.92rem; }
.invoice-resend input:focus { outline: none; border-color: var(--c-hairline-accent); }

.invoice-courses-fields { display: flex; flex-direction: column; gap: 0.85rem; }
.invoice-courses-fields:empty { display: none; }

/* ===== Review form (/bewertung) ===== */
.review-page { max-width: 680px; }
.review-step { margin-bottom: 1.25rem; }
.review-step__title { margin: 0 0 1.25rem; font-size: 1.1rem; }

.trainer-choice { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
.trainer-card { cursor: pointer; }
.trainer-card input { position: absolute; opacity: 0; width: 0; height: 0; }
.trainer-card__inner {
    display: flex; flex-direction: column; align-items: center; text-align: center;
    gap: 0.5rem; padding: 1.1rem 1rem 1.25rem; position: relative;
    border-radius: var(--r-lg); border: 1px solid var(--c-hairline);
    background: var(--c-surface-tint); transition: border-color 0.15s ease, background 0.15s ease, transform 0.15s ease;
}
.trainer-card:hover .trainer-card__inner { border-color: var(--c-hairline-accent); transform: translateY(-2px); }
.trainer-card input:checked + .trainer-card__inner { border-color: var(--c-accent); background: rgb(187 176 129 / 0.12); }
.trainer-card input:focus-visible + .trainer-card__inner { outline: 2px solid var(--c-accent); outline-offset: 2px; }
.trainer-card__photo { width: 96px; height: 96px; border-radius: 50%; overflow: hidden; border: 2px solid var(--c-hairline); }
.trainer-card__photo img { width: 100%; height: 100%; object-fit: cover; object-position: center top; display: block; }
.trainer-card__name { font-weight: 600; color: var(--c-text-0); }
.trainer-card__role { font-size: 0.8rem; }
.trainer-card__check {
    position: absolute; top: 0.6rem; right: 0.6rem; width: 24px; height: 24px;
    border-radius: 50%; display: flex; align-items: center; justify-content: center;
    background: var(--c-accent); color: #1a1a1a; opacity: 0; transform: scale(0.6); transition: all 0.15s ease;
}
.trainer-card input:checked + .trainer-card__inner .trainer-card__check { opacity: 1; transform: scale(1); }

.review-q { padding: 1rem 0; border-top: 1px solid var(--c-hairline); }
.review-q:first-of-type { border-top: 0; padding-top: 0; }
.review-q__label { margin: 0 0 0.65rem; color: var(--c-text-1); font-weight: 500; }
.review-q textarea {
    width: 100%; resize: vertical; min-height: 70px; padding: 0.7rem 0.9rem; font: inherit; font-size: 0.92rem;
    border-radius: var(--r-md); background: var(--c-surface-tint); border: 1px solid var(--c-hairline); color: var(--c-text-0);
}
.review-q textarea:focus { outline: none; border-color: var(--c-hairline-accent); }

.stars { display: flex; align-items: center; gap: 0.35rem; }
.stars__radio { position: absolute; opacity: 0; width: 0; height: 0; }
.stars__star, .stars__zero {
    cursor: pointer; display: inline-flex; align-items: center; justify-content: center;
    transition: color 0.12s ease, background 0.12s ease, transform 0.12s ease;
}
.stars__star { font-size: 1.8rem; color: var(--c-text-3); }
.stars__star.is-on { color: var(--c-accent); }
.stars__star:hover { transform: scale(1.12); }
.stars__zero {
    width: 1.9rem; height: 1.9rem; margin-right: 0.35rem; border-radius: 50%;
    border: 1px solid var(--c-hairline); font-size: 0.82rem; color: var(--c-text-3);
}
.stars__zero.is-on { background: var(--c-text-3); color: var(--c-bg-0); border-color: var(--c-text-3); }
.stars__radio:focus-visible + label { outline: 2px solid var(--c-accent); outline-offset: 3px; border-radius: 4px; }
.stars.is-missing { border-radius: var(--r-md); box-shadow: 0 0 0 2px rgb(179 48 48 / 0.4); padding: 0.3rem 0.4rem; margin: -0.3rem -0.4rem; }

/* Admin reviews results */
.rev-stars { display: inline-flex; gap: 1px; vertical-align: middle; }
.rev-stars i { color: var(--c-text-3); font-size: 0.9rem; }
.rev-stars i.is-on { color: var(--c-accent); }
.rev-trainer { display: flex; align-items: center; gap: 0.85rem; margin-bottom: 1rem; flex-wrap: wrap; }
.rev-trainer__photo { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; object-position: center top; border: 1px solid var(--c-hairline); }
.rev-trainer__overall { margin-left: auto; }
.rev-questions { display: flex; flex-direction: column; gap: 0.6rem; }
.rev-q-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 0.5rem 0; border-top: 1px solid var(--c-hairline); }
.rev-q-row:first-child { border-top: 0; }
.rev-q-row__label { color: var(--c-text-2); font-size: 0.9rem; }
.rev-q-row__val { flex: none; white-space: nowrap; }
.rev-comments { display: flex; flex-direction: column; gap: 0.85rem; }
.rev-comment { padding: 0.85rem 1rem; border-radius: var(--r-md); background: var(--c-surface-tint); border: 1px solid var(--c-hairline); }
.rev-comment__meta { display: flex; gap: 0.6rem; align-items: baseline; font-size: 0.8rem; margin-bottom: 0.35rem; }
.rev-comment__text { margin: 0; color: var(--c-text-1); line-height: 1.55; }
.rev-entry__rows + .rev-comment__text { margin-top: 0.7rem; padding-top: 0.7rem; border-top: 1px dashed var(--c-hairline); }

@media (max-width: 720px) {
    .invoice-grid { grid-template-columns: 1fr; }

    /* List rows: tap the whole card; drop the redundant "Details" button,
       put the invoice number and status badge on one line. */
    .admin-row--link { gap: 0.3rem; padding: 0.85rem 0.9rem; }
    .admin-row--link .admin-row__actions { display: none; }
    .admin-row--link .admin-row__main { width: 100%; justify-content: space-between; }
    .admin-row--link .admin-code { font-size: 0.85rem; letter-spacing: 0.02em; word-break: break-all; }
    .admin-row--link .admin-row__meta { font-size: 0.8rem; }

    .invoice-search input { flex: 1 1 100%; }
    .invoice-resend { flex-direction: column; align-items: stretch; }
    .invoice-resend .btn { width: 100%; justify-content: center; }
    .invoice-docs .btn { width: 100%; justify-content: center; }
}

.admin-proof__actions { margin-top: 1.1rem; display: flex; flex-direction: column; gap: 0.75rem; }
.admin-proof__approve { display: flex; flex-direction: column; gap: 0.6rem; margin: 0; }
.admin-proof__approve .field label { font-size: 0.8rem; }
.admin-proof__approve input[type="date"] {
    width: 100%;
    padding: 0.55rem 0.8rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    font-size: 0.85rem;
}
.admin-proof__reject { display: flex; gap: 0.5rem; margin: 0; }
.admin-proof__reject input {
    flex: 1 1 auto;
    min-width: 0;
    padding: 0.6rem 0.8rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    font-size: 0.85rem;
}

/* Filter segmented control */
.seg { display: inline-flex; gap: 0.25rem; padding: 0.25rem; margin-bottom: 1.25rem; border-radius: var(--r-md); background: var(--c-surface-tint); border: 1px solid var(--c-hairline); flex-wrap: wrap; }
.seg__btn { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.4rem 0.85rem; border-radius: calc(var(--r-md) - 4px); font-size: 0.85rem; color: var(--c-text-2); text-decoration: none; transition: background 0.15s ease, color 0.15s ease; }
.seg__btn:hover { color: var(--c-text-0); }
.seg__btn.is-active { background: var(--c-bg-1); color: var(--c-text-0); box-shadow: 0 1px 3px rgb(0 0 0 / 0.12); }
.seg__btn span { font-size: 0.72rem; color: var(--c-text-3); }
.seg__btn.is-active span { color: var(--c-accent-text); }

/* Messages inbox — structured thread list */
.msg-board { padding: 0 !important; }
.msg { display: flex; align-items: center; gap: 0.85rem; padding: 0.9rem clamp(1rem, 2vw, 1.5rem); border-top: 1px solid var(--c-hairline); text-decoration: none; transition: background 0.15s ease; }
.msg:first-child { border-top: 0; }
.msg:hover { background: var(--c-surface-tint); }

.msg__dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: transparent; }
.msg.is-unread .msg__dot { background: var(--c-accent); box-shadow: 0 0 0 3px rgb(187 176 129 / 0.18); }

.msg__row-main { display: flex; align-items: baseline; gap: 0.6rem; min-width: 0; flex: 1 1 auto; }
.msg__from { color: var(--c-text-1); flex: none; }
.msg.is-unread .msg__from { color: var(--c-text-0); font-weight: 700; }
.msg__snippet { font-size: 0.85rem; color: var(--c-text-3); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.msg__row-aside { display: flex; align-items: center; gap: 0.7rem; flex: none; }
.msg__badges { display: flex; gap: 0.4rem; flex-wrap: wrap; }
.msg__date { font-size: 0.8rem; color: var(--c-text-3); white-space: nowrap; }
.msg__caret { color: var(--c-text-3); flex: none; }

/* Back link + head with actions */
.back-link { margin: 0 0 1rem; }
.back-link a { display: inline-flex; align-items: center; gap: 0.4rem; color: var(--c-text-2); text-decoration: none; font-size: 0.9rem; }
.back-link a:hover { color: var(--c-text-0); }
.admin__head--row { display: flex; align-items: flex-end; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.admin__head-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.admin__head-actions form { margin: 0; }

/* Chat — thread of bubbles + composer */
.chat__info { display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; margin: 0 0 1.25rem; padding: 0 0 1.1rem; border-bottom: 1px solid var(--c-hairline); }
.chat__info div { display: flex; flex-direction: column; gap: 0.1rem; }
.chat__info dt { font-size: 0.7rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--c-text-3); }
.chat__info dd { margin: 0; font-size: 0.9rem; color: var(--c-text-1); }
.chat__info a { color: var(--c-accent-text); }

/* Lifecycle banner — shown above the thread when the conversation has
   been auto-closed (and is in its 7-day pre-deletion window). */
.chat__notice {
    display: flex;
    gap: 0.85rem;
    align-items: flex-start;
    padding: 0.85rem 1rem;
    margin: 1.1rem 0;
    border-radius: var(--r-md);
    border: 1px solid var(--c-hairline);
    background: var(--c-surface-tint);
}
.chat__notice--closed {
    background: rgb(126 134 152 / 0.1);
    border-color: rgb(126 134 152 / 0.28);
}
.chat__notice-icon { font-size: 1.25rem; color: var(--c-text-2); flex: none; line-height: 1; padding-top: 0.1rem; }
/* Only the title (direct child of the notice content wrapper) is a
   block — inline <strong> inside the paragraph stays inline so values
   like "7 Tagen" don't break onto their own line. */
.chat__notice > div > strong { display: block; font-size: 0.92rem; color: var(--c-text-0); margin-bottom: 0.2rem; }
.chat__notice p { margin: 0; font-size: 0.85rem; color: var(--c-text-2); line-height: 1.55; }
.chat__notice p strong { color: var(--c-text-0); }

.chat__thread { display: flex; flex-direction: column; gap: 1.75rem; max-height: 58vh; overflow-y: auto; padding: 0.5rem 0.25rem; margin-bottom: 1.25rem; }
.chat__empty { text-align: center; padding: 1rem 0; }

.chat__bubble { width: fit-content; max-width: 78%; padding: 0.75rem 1rem; border-radius: 16px; border: 1px solid var(--c-hairline); background: var(--c-surface-tint); box-shadow: 0 1px 2px rgb(0 0 0 / 0.05); }
.chat__bubble.is-mine { align-self: flex-end; background: rgb(187 176 129 / 0.16); border-color: var(--c-hairline-accent); border-bottom-right-radius: 5px; }
.chat__bubble.is-them { align-self: flex-start; border-bottom-left-radius: 5px; }
.chat__bubble-meta { display: flex; align-items: baseline; gap: 0.6rem; margin-bottom: 0.35rem; }
.chat__bubble-meta strong { font-size: 0.82rem; color: var(--c-text-0); }
.chat__bubble-meta span { font-size: 0.72rem; color: var(--c-text-3); }
.chat__bubble-body { font-size: 0.92rem; color: var(--c-text-1); line-height: 1.55; word-wrap: break-word; overflow-wrap: anywhere; }
.chat__bubble-body a { color: var(--c-accent-text); }
.chat__bubble-body code { background: var(--c-bg-0); padding: 0.05em 0.35em; border-radius: 4px; font-size: 0.88em; }
.chat__bubble-body blockquote { margin: 0.4rem 0; padding-left: 0.7rem; border-left: 2px solid var(--c-hairline-accent); color: var(--c-text-2); }

.chat__compose { display: flex; flex-direction: column; gap: 0.6rem; }
.chat__compose textarea { width: 100%; resize: vertical; min-height: 64px; padding: 0.7rem 0.9rem; border-radius: var(--r-md); background: var(--c-surface-tint); border: 1px solid var(--c-hairline); color: var(--c-text-0); font: inherit; font-size: 0.92rem; }
.chat__compose textarea:focus { outline: none; border-color: var(--c-hairline-accent); }
.chat__compose-bar { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; }
.chat__hint { font-size: 0.78rem; }

/* Customer chat page (standalone, like the legal pages) */
.chat-page { max-width: 760px; margin: clamp(2rem, 6vw, 5rem) auto; padding: 0 var(--gutter); }
.chat-page--narrow { max-width: 560px; }
.chat-page__head { margin: 0.5rem 0 1.5rem; }
.chat-page__head h1 { margin: 0.3rem 0 0.6rem; }

@media (max-width: 640px) {
    /* List rows wrap: dot + name + caret on line 1, badges drop to line 2
       so they never sit on top of the sender name. */
    .msg { flex-wrap: wrap; row-gap: 0.45rem; align-items: center; }
    .msg__row-main { order: 1; flex: 1 1 auto; min-width: 0; }
    .msg__from { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .msg__snippet { display: none; }
    .msg__caret { order: 2; margin-left: 0.5rem; }
    .msg__row-aside { order: 3; flex: 0 0 100%; justify-content: flex-start; padding-left: calc(8px + 0.85rem); }
    .msg__date { display: none; }

    .seg { display: flex; width: 100%; }
    .seg__btn { flex: 1 1 0; justify-content: center; padding: 0.45rem 0.5rem; }

    .admin__head--row { align-items: stretch; }
    .admin__head-actions { width: 100%; }
    .admin__head-actions form { flex: 1 1 auto; }
    .admin__head-actions .btn { width: 100%; justify-content: center; }

    .chat__info { gap: 0.6rem 1rem; }
    .chat__thread { max-height: 62vh; gap: 1.4rem; }
    .chat__bubble { max-width: 88%; }
    .chat__compose-bar { flex-direction: column; align-items: stretch; gap: 0.5rem; }
    .chat__compose-bar .btn { width: 100%; justify-content: center; }
    .chat__hint { order: 2; text-align: center; }
}

@media (max-width: 820px) {
    .admin__grid { grid-template-columns: 1fr; }
}

/* Settings toggle (rich-label checkbox) */
.admin-toggle { align-items: flex-start; gap: 0.6rem; }
.admin-toggle input { margin-top: 0.2rem; flex: none; }
.admin-toggle strong { color: var(--c-text-0); }


/* =====================================================
 * /manage — sidebar "me" tile + Mitarbeiter & Rollen page
 * ===================================================== */

.admin-sidebar__me {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0.55rem 0.65rem;
    margin: 0.4rem 0;
    border-radius: var(--r-md);
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline);
    min-width: 0;
}
.admin-sidebar__me-avatar {
    flex: none;
    width: 2rem;
    height: 2rem;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-weight: 600;
    font-size: 0.78rem;
    letter-spacing: 0.04em;
}
.admin-sidebar__me-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.admin-sidebar__me-text strong { color: var(--c-text-0); font-size: 0.88rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.admin-sidebar__me-text span { font-size: 0.74rem; letter-spacing: 0.04em; text-transform: uppercase; }
html.admin-collapsed .admin-sidebar__me { justify-content: center; padding: 0.45rem; }
html.admin-collapsed .admin-sidebar__me-text { display: none; }

/* Two-column split on the team page (workers | roles) */
.admin__split {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(1rem, 2vw, 1.5rem);
    align-items: start;
}
@media (max-width: 980px) {
    .admin__split { grid-template-columns: 1fr; }
}

.team-block .bezel__inner { padding: 1.5rem; display: flex; flex-direction: column; gap: 1.15rem; }
.team-block__head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
}
.team-block__head h2 { margin: 0; font-size: 1.25rem; }
.team-block__head p { margin: 0.15rem 0 0; font-size: 0.85rem; }

.team-form { padding: 1rem 1.1rem; border: 1px dashed var(--c-hairline-accent); border-radius: var(--r-md); background: var(--c-surface-tint); }
.team-form.is-hidden { display: none; }
.team-form__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); gap: 0.85rem; }
.team-form__wide { grid-column: 1 / -1; }
.team-form__actions { display: flex; flex-wrap: wrap; gap: 0.5rem; justify-content: flex-end; margin-top: 1rem; }
.team-form__inline { display: flex; gap: 0.6rem; align-items: flex-end; }
.team-form__inline .field { flex: 1 1 auto; margin: 0; }
.team-form .field__hint { margin: 0.25rem 0 0; font-size: 0.78rem; }

/* Workers list */
.team-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.55rem; }
.team-item {
    padding: 0.85rem 0.95rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    transition: border-color var(--t-quick) var(--ease-out-quart);
}
.team-item:hover { border-color: var(--c-hairline-accent); }
.team-item__head { display: flex; align-items: flex-start; gap: 0.75rem; }
.team-item__avatar {
    flex: none;
    width: 2.6rem;
    height: 2.6rem;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-weight: 600;
    font-size: 0.88rem;
    letter-spacing: 0.04em;
}
.team-item__ident { display: flex; flex-direction: column; gap: 0.35rem; min-width: 0; flex: 1 1 auto; }
.team-item__ident strong {
    color: var(--c-text-0);
    font-size: 0.95rem;
    line-height: 1.25;
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    flex-wrap: wrap;
}
.team-item__meta { display: flex; gap: 0.4rem 0.6rem; align-items: center; flex-wrap: wrap; font-size: 0.8rem; }
.team-item__email { font-size: 0.8rem; }
.team-item__edit { padding-top: 0.5rem; border-top: 1px dashed var(--c-hairline); display: flex; flex-direction: column; gap: 0.85rem; }
.team-item__edit.is-hidden { display: none; }

/* Discrete square icon button — used as the "Bearbeiten" affordance
   in the top-right corner of both worker and role cards. */
.team-icon-btn {
    flex: none;
    width: 2.2rem;
    height: 2.2rem;
    border-radius: var(--r-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-2);
    background: transparent;
    border: 1px solid var(--c-hairline);
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
}
.team-icon-btn:hover {
    color: var(--c-accent-text);
    background: var(--c-surface-tint-2);
    border-color: var(--c-hairline-accent);
}
.team-icon-btn i { font-size: 1.05rem; }
.team-item__danger {
    border-top: 1px dashed var(--c-hairline);
    padding-top: 0.6rem;
    margin-top: 0.2rem;
}
.team-item__danger summary {
    cursor: pointer;
    list-style: none;
    color: var(--c-text-2);
    font-size: 0.82rem;
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
}
.team-item__danger summary::-webkit-details-marker { display: none; }
.team-item__danger summary::before {
    content: "\203A";
    font-size: 1.05rem;
    transition: transform var(--t-quick) var(--ease-out-quart);
}
.team-item__danger[open] summary::before { transform: rotate(90deg); }
.team-item__danger-body { margin-top: 0.7rem; display: flex; flex-direction: column; gap: 0.7rem; }

/* Pills */
.pill {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.15rem 0.55rem;
    border-radius: var(--r-pill);
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-2);
    font-size: 0.7rem;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    font-weight: 500;
}
.pill--accent { background: var(--c-hairline-accent); color: var(--c-accent-text); border-color: transparent; }
.pill--role { background: var(--c-hairline-accent); color: var(--c-accent-text); border-color: transparent; text-transform: none; letter-spacing: 0.01em; font-size: 0.76rem; padding: 0.2rem 0.65rem; }
.pill--role i { font-size: 0.95rem; }
.pill--perm {
    background: var(--c-surface-tint-2);
    color: var(--c-text-1);
    border-color: var(--c-hairline);
    text-transform: none;
    letter-spacing: 0.01em;
    font-size: 0.76rem;
    padding: 0.2rem 0.55rem;
}
.pill--perm i { font-size: 0.95rem; color: var(--c-accent-text); }

/* Roles list */
.team-roles { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.55rem; }
.team-role {
    padding: 0.85rem 0.95rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
    transition: border-color var(--t-quick) var(--ease-out-quart);
}
.team-role:hover { border-color: var(--c-hairline-accent); }
.team-role__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.6rem; }
.team-role__title { display: flex; flex-direction: column; gap: 0.2rem; min-width: 0; flex: 1 1 auto; }
.team-role__title strong { color: var(--c-text-0); font-size: 0.98rem; line-height: 1.25; display: inline-flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
.team-role__title code { font-family: ui-monospace, Menlo, monospace; font-size: 0.76rem; color: var(--c-text-2); }
.team-role__perms { display: flex; flex-wrap: wrap; gap: 0.35rem; font-size: 0.82rem; }
.team-role__edit { padding-top: 0.6rem; border-top: 1px dashed var(--c-hairline); }
.team-role__edit.is-hidden { display: none; }

/* Permission checkbox grid (inside both new-role and edit-role forms) */
.team-perms {
    border: 1px solid var(--c-hairline);
    border-radius: var(--r-md);
    padding: 0.9rem 1rem;
    margin: 0.5rem 0 0;
    background: var(--c-bg-0);
}
.team-perms legend { padding: 0 0.4rem; font-size: 0.8rem; color: var(--c-text-2); letter-spacing: 0.04em; text-transform: uppercase; }
.team-perms__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
    gap: 0.5rem;
}
.team-perms__item {
    display: flex;
    align-items: flex-start;
    gap: 0.55rem;
    padding: 0.55rem 0.7rem;
    border-radius: var(--r-md);
    border: 1px solid transparent;
    background: var(--c-surface-tint);
    cursor: pointer;
    transition: border-color var(--t-quick) var(--ease-out-quart), background var(--t-quick) var(--ease-out-quart);
}
.team-perms__item:hover { border-color: var(--c-hairline-accent); }
.team-perms__item input { margin-top: 0.2rem; flex: none; accent-color: var(--c-accent-text); }
.team-perms__item:has(input:checked) { border-color: var(--c-hairline-accent); background: var(--c-hairline-accent); }
.team-perms__item:has(input:checked) span strong { color: var(--c-accent-text); }
.team-perms__item span { display: flex; flex-direction: column; gap: 0.1rem; line-height: 1.3; min-width: 0; }
.team-perms__item span strong {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    font-size: 0.85rem;
    color: var(--c-text-0);
}
.team-perms__item span strong i { font-size: 1rem; color: var(--c-accent-text); }
.team-perms__item span .muted { font-size: 0.74rem; }

/* Small button variant for inline actions on the team page */
.btn--sm { padding: 0.45rem 0.85rem; font-size: 0.85rem; gap: 0.35rem; }
.btn--sm i { font-size: 0.95rem; }

/* /manage/team — mobile (sidebar already off-canvas under 900px;
   these tweaks kick in once the bezel itself runs out of width) */
@media (max-width: 640px) {
    .team-block .bezel__inner { padding: 1.1rem; gap: 1rem; }

    /* Toolbar: title + primary "+ Neu..." action stack; button full-width */
    .team-block__head { align-items: stretch; }
    .team-block__head > div { flex: 1 1 100%; }
    .team-block__head .btn { width: 100%; justify-content: center; }

    /* Inline new-worker / new-role form */
    .team-form { padding: 0.85rem; }
    .team-form__grid { gap: 0.7rem; }
    .team-form__actions {
        flex-direction: column-reverse;
        align-items: stretch;
        margin-top: 0.85rem;
    }
    .team-form__actions .btn { width: 100%; justify-content: center; }

    /* Password-reset row in the danger zone stacks vertically */
    .team-form__inline { flex-direction: column; align-items: stretch; gap: 0.5rem; }
    .team-form__inline .btn { width: 100%; justify-content: center; }

    /* Permission grid → one column with bigger tap targets */
    .team-perms { padding: 0.75rem; }
    .team-perms__grid { grid-template-columns: 1fr; gap: 0.4rem; }
    .team-perms__item { padding: 0.7rem 0.8rem; }
    .team-perms__item input { width: 1.1rem; height: 1.1rem; margin-top: 0.15rem; }

    /* Role-edit form: nested delete-form button stretches too */
    .team-role__edit .team-form__actions form { width: 100%; }
    .team-role__edit .team-form__actions form .btn { width: 100%; }
}

/* Even tighter on phones in portrait */
@media (max-width: 420px) {
    .team-block .bezel__inner { padding: 0.95rem; gap: 0.85rem; }
    .team-item, .team-role { padding: 0.75rem 0.85rem; }
    .team-item__avatar { width: 2.3rem; height: 2.3rem; font-size: 0.8rem; }
    .team-item__ident strong { font-size: 0.92rem; }
    .team-icon-btn { width: 2rem; height: 2rem; }
    .team-role__title code { font-size: 0.72rem; }
    .pill { font-size: 0.66rem; padding: 0.12rem 0.45rem; }
    .pill--role, .pill--perm { font-size: 0.72rem; padding: 0.18rem 0.55rem; }
}

/* =====================================================
 * Docs module — shared by /manage/help and /hilfe.
 *
 *   .docs            two-column shell (sticky TOC + scrolling body)
 *   .docs__toc       sticky table-of-contents on the left
 *   .docs__body      long-form content on the right
 *   .docs-section    a single H2 chapter with anchor + scroll-margin
 *   .docs-callout    boxed note (info / warning) inside a section
 *   .docs-keys       list of keyboard-shortcut rows
 *   kbd              individual key cap
 * ===================================================== */

.docs-page { max-width: 1100px; margin: 0 auto; padding: clamp(1.5rem, 4vw, 2.5rem) var(--gutter) clamp(4rem, 8vw, 6rem); }
.docs-page__head { margin-bottom: clamp(1.5rem, 3vw, 2.25rem); }
.docs-page__head h1 { margin: 0.4rem 0 0.3rem; font-size: clamp(1.9rem, 4.5vw, 2.7rem); line-height: 1.1; }
.docs-page__head p { margin: 0; max-width: 60ch; }

.docs {
    display: grid;
    grid-template-columns: minmax(0, 220px) minmax(0, 1fr);
    gap: clamp(1.25rem, 3vw, 2.5rem);
    align-items: start;
}

/* Sticky TOC ----------------------------------------------------------- */
.docs__toc {
    position: sticky;
    top: clamp(1rem, 2vw, 1.5rem);
    align-self: start;
    padding: 0.85rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.docs__toc-label {
    margin: 0 0 0.5rem;
    padding: 0 0.5rem;
    font-size: 0.74rem;
    color: var(--c-text-2);
    letter-spacing: 0.07em;
    text-transform: uppercase;
}
.docs__toc nav { display: flex; flex-direction: column; gap: 0.1rem; }
.docs__toc a {
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
    padding: 0.5rem 0.6rem;
    border-radius: var(--r-md);
    color: var(--c-text-2);
    font-size: 0.86rem;
    text-decoration: none;
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.docs__toc a i { font-size: 1rem; flex: none; color: var(--c-text-3); transition: color var(--t-quick) var(--ease-out-quart); }
.docs__toc a:hover { color: var(--c-text-0); background: var(--c-surface-tint-2); }
.docs__toc a:hover i { color: var(--c-accent-text); }
.docs__toc a.is-active { color: var(--c-accent-text); background: var(--c-hairline-accent); }
.docs__toc a.is-active i { color: var(--c-accent-text); }

/* Body ---------------------------------------------------------------- */
.docs__body { min-width: 0; display: flex; flex-direction: column; gap: clamp(1.5rem, 3vw, 2.25rem); }

.docs-section {
    /* Account for the sticky admin top-bar / sidebar when scrolling anchors */
    scroll-margin-top: clamp(1rem, 3vw, 2rem);
    padding: clamp(1.1rem, 2.2vw, 1.6rem);
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
}
.docs-section h2 {
    margin: 0 0 0.85rem;
    font-size: clamp(1.25rem, 2.4vw, 1.55rem);
    line-height: 1.2;
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
}
.docs-section h2 i { font-size: 1.4em; color: var(--c-accent-text); }
.docs-section h3 { margin: 1.4rem 0 0.5rem; font-size: 1.05rem; color: var(--c-text-0); }
.docs-section h4 { margin: 1rem 0 0.4rem; font-size: 0.95rem; color: var(--c-text-1); text-transform: none; letter-spacing: 0; font-weight: 600; }
.docs-section p { margin: 0.5rem 0; line-height: 1.6; }
.docs-section ul,
.docs-section ol { margin: 0.4rem 0 0.6rem; padding-left: 1.4rem; line-height: 1.6; }
.docs-section li + li { margin-top: 0.25rem; }
.docs-section a { color: var(--c-accent-text); text-decoration: underline; text-underline-offset: 2px; text-decoration-color: var(--c-hairline-accent); }
.docs-section a:hover { text-decoration-color: var(--c-accent-text); }
.docs-section code {
    font-family: ui-monospace, Menlo, Consolas, monospace;
    font-size: 0.86em;
    padding: 0.1em 0.4em;
    border-radius: 0.35em;
    background: var(--c-bg-0);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-1);
}

/* Callouts ------------------------------------------------------------ */
.docs-callout {
    margin: 0.9rem 0 0.3rem;
    padding: 0.85rem 1rem;
    border-radius: var(--r-md);
    border: 1px solid var(--c-hairline);
    background: var(--c-bg-0);
    font-size: 0.92rem;
    line-height: 1.55;
    border-left: 3px solid var(--c-accent-text);
}
.docs-callout strong { color: var(--c-text-0); }
.docs-callout--info    { border-left-color: var(--c-accent-text); }
.docs-callout--warning {
    border-left-color: #d98b8b;
    background: rgb(217 139 139 / 0.06);
}
.docs-callout--warning strong { color: #d98b8b; }

/* Keyboard-shortcut list --------------------------------------------- */
.docs-keys { list-style: none; padding-left: 0; }
.docs-keys li {
    padding: 0.5rem 0.75rem;
    border-radius: var(--r-md);
    background: var(--c-bg-0);
    border: 1px solid var(--c-hairline);
    margin: 0.35rem 0;
    font-size: 0.92rem;
}
.docs-keys li strong { color: var(--c-text-0); margin-right: 0.4rem; }
kbd {
    display: inline-block;
    min-width: 1.6rem;
    padding: 0.1rem 0.5rem;
    margin: 0 0.1rem;
    border-radius: 0.35rem;
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline);
    border-bottom-width: 2px;
    font-family: ui-monospace, Menlo, Consolas, monospace;
    font-size: 0.82em;
    color: var(--c-text-0);
    text-align: center;
    line-height: 1.4;
    vertical-align: middle;
}

/* Mobile -------------------------------------------------------------- */
@media (max-width: 820px) {
    .docs { grid-template-columns: 1fr; }
    .docs__toc {
        position: static;
        top: auto;
    }
    .docs__toc nav {
        flex-direction: row;
        flex-wrap: wrap;
        gap: 0.3rem;
    }
    .docs__toc a {
        padding: 0.4rem 0.7rem;
        font-size: 0.82rem;
    }
    .docs__toc a span { white-space: nowrap; }
}
@media (max-width: 480px) {
    .docs-section { padding: 1rem; }
    .docs-section h2 { font-size: 1.2rem; }
    .docs-section h3 { font-size: 1rem; }
    kbd { font-size: 0.78em; padding: 0.08rem 0.4rem; }
}

/* =====================================================
 * /manage/chat — internal single-channel team chat
 * ===================================================== */

.chat-block .bezel__inner.chat-block__inner {
    padding: 0;
    display: flex;
    flex-direction: column;
    height: min(70vh, 720px);
    overflow: hidden;
}

.chat-stream {
    list-style: none;
    margin: 0;
    padding: 1rem 1.2rem;
    overflow-y: auto;
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
    scroll-behavior: smooth;
}
.chat-empty {
    text-align: center;
    color: var(--c-text-3);
    font-size: 0.9rem;
    padding: 2rem 1rem;
}

.chat-msg {
    display: flex;
    gap: 0.65rem;
    align-items: flex-start;
}
.chat-msg.is-me { flex-direction: row-reverse; }
.chat-msg.is-deleted { opacity: 0.6; }

.chat-msg__avatar {
    flex: none;
    width: 2.1rem;
    height: 2.1rem;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-weight: 600;
    font-size: 0.78rem;
    letter-spacing: 0.04em;
    overflow: hidden;
}
/* Logo variant — used for Nakos staff replies on contact threads
   (/message/{token} + /manage/messages/{token}). Replaces the initials
   with the round favicon-style logo so the customer instantly
   recognises team replies as "from Nakos". */
.chat-msg__avatar--logo {
    background: #0f1115;
    border: 1px solid var(--c-hairline-accent);
    padding: 2px;
}
.chat-msg__avatar--logo img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    display: block;
    border-radius: 50%;
}
[data-theme="light"] .chat-msg__avatar--logo { background: #1a1a1a; }

.chat-msg__bubble {
    max-width: min(72%, 38rem);
    padding: 0.6rem 0.85rem 0.7rem;
    border-radius: 14px;
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    position: relative;
}
.chat-msg.is-me .chat-msg__bubble {
    background: var(--c-hairline-accent);
    border-color: transparent;
}

.chat-msg__head {
    display: flex;
    gap: 0.6rem;
    align-items: baseline;
    justify-content: space-between;
    margin-bottom: 0.2rem;
}
.chat-msg__head strong {
    color: var(--c-text-0);
    font-size: 0.82rem;
}
.chat-msg__head time {
    color: var(--c-text-3);
    font-size: 0.72rem;
    font-variant-numeric: tabular-nums;
}
.chat-msg.is-me .chat-msg__head strong { color: var(--c-accent-text); }

.chat-msg__body {
    margin: 0;
    font-size: 0.93rem;
    line-height: 1.45;
    color: var(--c-text-1);
    white-space: pre-wrap;
    word-wrap: break-word;
    overflow-wrap: anywhere;
}
.chat-msg__body--deleted { font-style: italic; color: var(--c-text-3); }

/* Rich variant: replies in /manage/messages are rendered via
   MessageFormatter (markdown → HTML), so disable pre-wrap and let
   the inline elements style themselves naturally. */
.chat-msg__body--rich { white-space: normal; }
.chat-msg__body--rich p { margin: 0; }
/* Paragraph spacing tuned for chat-bubble copy: enough gap for
   greeting / body / signature to read as separate blocks, but tight
   enough that a quick "Geht klar." reply doesn't look stretched. */
.chat-msg__body--rich p + p { margin-top: 0.7rem; }
.chat-msg__body--rich a { color: var(--c-accent-text); }
.chat-msg__body--rich code { background: var(--c-bg-0); padding: 0.05em 0.35em; border-radius: 4px; font-size: 0.88em; }
.chat-msg__body--rich blockquote {
    margin: 0.4rem 0;
    padding-left: 0.7rem;
    border-left: 2px solid var(--c-hairline-accent);
    color: var(--c-text-2);
}

/* The customer-message chat reuses team-chat markup but keeps the
   first bubble + a server-rendered replies block as siblings. The
   wrapper needs to be transparent to the chat-stream flex layout so
   the gap collapses correctly between sibling messages. */
.chat-stream__replies { display: contents; }

.chat-msg__delete {
    position: absolute;
    top: 0.3rem;
    right: 0.3rem;
    margin: 0;
    opacity: 0;
    transition: opacity var(--t-quick) var(--ease-out-quart);
}
.chat-msg:hover .chat-msg__delete,
.chat-msg__delete:focus-within { opacity: 1; }
.chat-msg__delete button {
    width: 1.8rem;
    height: 1.8rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 999px;
    color: var(--c-text-2);
    background: transparent;
    border: 1px solid transparent;
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.chat-msg__delete button:hover { color: #d98b8b; background: var(--c-surface-tint-2); }

/* Composer ----------------------------------------------------------- */
.chat-compose {
    display: flex;
    gap: 0.6rem;
    align-items: flex-end;
    padding: 0.7rem 0.9rem;
    border-top: 1px solid var(--c-hairline);
    background: var(--c-surface-tint);
}
.chat-compose textarea {
    flex: 1 1 auto;
    min-height: 2.4rem;
    max-height: 9rem;
    padding: 0.55rem 0.8rem;
    border-radius: 12px;
    background: var(--c-bg-0);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    font-family: inherit;
    font-size: 0.93rem;
    line-height: 1.45;
    resize: none;
}
.chat-compose textarea:focus {
    outline: none;
    border-color: var(--c-hairline-accent);
}
.chat-compose__send {
    flex: none;
    padding: 0.55rem 0.95rem;
}

/* Markdown hint that lives directly under the composer (only used by
   the customer-message chat — the team chat has no markdown). */
.chat-compose__hint {
    margin: 0;
    padding: 0.4rem 0.95rem 0.85rem;
    font-size: 0.74rem;
    text-align: right;
}

@media (max-width: 640px) {
    .chat-block .bezel__inner.chat-block__inner { height: calc(100dvh - 12rem); }
    .chat-stream { padding: 0.85rem; gap: 0.45rem; }
    .chat-msg__bubble { max-width: 86%; }
    .chat-msg__head time { display: none; }
    .chat-compose { padding: 0.55rem 0.7rem; }
    .chat-compose__send span { display: none; }
    .chat-compose__send { width: 2.6rem; height: 2.6rem; padding: 0; justify-content: center; border-radius: 50%; }
}

/* =====================================================
 * Form double-submit feedback (see app.js submit handler)
 * ===================================================== */

.btn-spinner {
    display: inline-block;
    width: 0.95em;
    height: 0.95em;
    border-radius: 50%;
    border: 2px solid currentColor;
    border-right-color: transparent;
    animation: btn-spin 0.7s linear infinite;
    vertical-align: middle;
}
@keyframes btn-spin { to { transform: rotate(360deg); } }

button[aria-busy="true"], input[type="submit"][aria-busy="true"] {
    opacity: 0.85;
    cursor: progress;
}
form.is-submitting button:not([aria-busy="true"]),
form.is-submitting input[type="submit"]:not([aria-busy="true"]) {
    /* Discourage clicks on other buttons while a submit is in flight */
    opacity: 0.6;
    pointer-events: none;
}

/* =====================================================
 * /manage/chat — channels sidebar + thread layout
 * ===================================================== */

.chat-layout {
    display: grid;
    grid-template-columns: minmax(0, 240px) minmax(0, 1fr);
    height: 100%;
    min-height: 0;
}

/* Sidebar with the team channel + DM partners */
.chat-channels {
    border-right: 1px solid var(--c-hairline);
    background: var(--c-surface-tint);
    padding: 0.85rem 0.6rem;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
}
.chat-channels__label {
    margin: 0.5rem 0.6rem 0.25rem;
    font-size: 0.7rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--c-text-3);
}
.chat-channels__label:first-child { margin-top: 0; }

.chat-channel {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0.5rem 0.6rem;
    border-radius: var(--r-md);
    color: var(--c-text-1);
    text-decoration: none;
    position: relative;
    transition: background var(--t-quick) var(--ease-out-quart),
                color var(--t-quick) var(--ease-out-quart);
}
.chat-channel:hover { background: var(--c-surface-tint-2); color: var(--c-text-0); }
.chat-channel.is-active {
    background: var(--c-hairline-accent);
    color: var(--c-accent-text);
}
.chat-channel.is-active .chat-channel__avatar { background: var(--c-bg-0); color: var(--c-accent-text); }
.chat-channel__icon,
.chat-channel__avatar {
    flex: none;
    width: 2.1rem;
    height: 2.1rem;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-weight: 600;
    font-size: 0.78rem;
    letter-spacing: 0.04em;
}
.chat-channel__icon i { font-size: 1.05rem; }
.chat-channel__body { display: flex; flex-direction: column; min-width: 0; line-height: 1.15; flex: 1 1 auto; }
.chat-channel__body strong {
    color: inherit;
    font-size: 0.86rem;
    font-weight: 500;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.chat-channel__body span { font-size: 0.72rem; }

.chat-channel__badge {
    flex: none;
    min-width: 1.2rem;
    height: 1.2rem;
    padding: 0 0.4rem;
    border-radius: 999px;
    background: #d98b8b;
    color: #fff;
    font-size: 0.7rem;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

/* Thread column */
.chat-thread {
    display: flex;
    flex-direction: column;
    min-width: 0;
    min-height: 0;
}
.chat-thread__head {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.75rem 1rem;
    border-bottom: 1px solid var(--c-hairline);
    background: var(--c-bg-0);
}
/* Mobile-only channel switcher in the thread header. Hidden on
   desktop where the sidebar handles channel selection. */
.chat-thread__switch {
    display: none;
    position: relative;
    flex: 1 1 auto;
    min-width: 0;
}
.chat-thread__switch select {
    width: 100%;
    padding: 0.55rem 2rem 0.55rem 0.8rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    font-size: 0.92rem;
    font-family: inherit;
    appearance: none;
    -webkit-appearance: none;
    cursor: pointer;
    text-overflow: ellipsis;
    /* `appearance: none` breaks color-scheme inheritance for the
       OS-native option list — set it explicitly on the select so
       the dropdown background matches the surrounding chrome
       instead of defaulting to system light. */
    color-scheme: dark;
}
[data-theme="light"] .chat-thread__switch select { color-scheme: light; }

/* color-scheme alone is honoured patchily across browsers — pin the
   option background + colour explicitly so the dropdown always reads
   correctly. (option styling is limited by the OS, but background-
   color + color are widely supported on desktop.) */
.chat-thread__switch option,
.chat-thread__switch optgroup {
    background-color: var(--c-bg-0);
    color: var(--c-text-0);
}
.chat-thread__switch optgroup {
    color: var(--c-text-3);
    font-style: normal;
}

.chat-thread__switch i {
    position: absolute;
    top: 50%;
    right: 0.6rem;
    transform: translateY(-50%);
    color: var(--c-text-2);
    pointer-events: none;
    font-size: 1.05rem;
}
.chat-thread__avatar {
    flex: none;
    width: 2.4rem;
    height: 2.4rem;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-weight: 600;
    font-size: 0.88rem;
    letter-spacing: 0.04em;
}
.chat-thread__avatar--all i { font-size: 1.2rem; }
.chat-thread__title { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
.chat-thread__title strong { color: var(--c-text-0); font-size: 0.95rem; }
.chat-thread__title span { font-size: 0.78rem; }

.chat-block .bezel__inner.chat-block__inner { padding: 0; }

/* Mobile: sidebar hides; thread takes full width and the channel
   switcher dropdown appears inside the thread header. */
@media (max-width: 760px) {
    .chat-layout { grid-template-columns: 1fr; }
    .chat-channels { display: none; }
    .chat-thread__switch { display: block; }
    /* Title is now redundant — the dropdown already says where you are. */
    .chat-thread__title { display: none; }
}

/* Notfall-Kontakte (account settings + booking funnel for minors) */
.contact-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr) auto;
    gap: 0.6rem;
    align-items: end;
    padding: 0.55rem 0;
    border-bottom: 1px dashed var(--c-hairline);
}
.contact-row:last-child { border-bottom: 0; }
.contact-row .field { margin: 0; }
.contact-row__remove {
    flex: none;
    width: 2.1rem;
    height: 2.1rem;
    border-radius: var(--r-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-2);
    background: transparent;
    border: 1px solid var(--c-hairline);
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.contact-row__remove:hover { color: #d98b8b; background: var(--c-surface-tint-2); }

@media (max-width: 540px) {
    .contact-row { grid-template-columns: 1fr; }
    .contact-row__remove { justify-self: end; width: 2.4rem; height: 2.4rem; }
}

/* Generic hide helper — every conditional reveal in the booking funnel
   (Kind-Checkbox → consent fields, dropdown → inline fields, …) and
   anywhere else relies on this. Keep `!important` so component-local
   `display:` rules (flex/grid) don't override it. */
.is-hidden { display: none !important; }

/* =====================================================
 * /manage/settings — Wartungsmodus + Infotext layout
 * ===================================================== */

.settings__form { display: flex; flex-direction: column; gap: clamp(1rem, 2vw, 1.5rem); }
.settings__actions { display: flex; justify-content: flex-end; }
.settings__actions .btn { min-width: 14rem; justify-content: center; }

.settings-card .bezel__inner {
    padding: clamp(1.1rem, 2vw, 1.6rem);
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.settings-card__head { display: flex; align-items: flex-start; gap: 0.85rem; }
.settings-card__head h2 {
    margin: 0;
    font-size: 1.15rem;
    line-height: 1.25;
    color: var(--c-text-0);
}
.settings-card__head p { margin: 0.2rem 0 0; font-size: 0.85rem; }
.settings-card__icon {
    flex: none;
    width: 2.4rem;
    height: 2.4rem;
    border-radius: 12px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, rgb(187 176 129 / 0.18), rgb(187 176 129 / 0.05));
    color: var(--c-accent-text);
    font-size: 1.2rem;
    border: 1px solid var(--c-hairline-accent);
}

/* Custom switch-style toggle with text body to the right */
.settings-toggle {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: flex-start;
    gap: 0.85rem;
    padding: 0.85rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    cursor: pointer;
    transition: border-color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.settings-toggle:hover { border-color: var(--c-hairline-accent); }
.settings-toggle input {
    /* visually-hidden; the .settings-toggle__visual draws the switch */
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0, 0, 0, 0);
    white-space: nowrap; border: 0;
}
.settings-toggle__visual {
    position: relative;
    flex: none;
    width: 2.4rem;
    height: 1.4rem;
    border-radius: 999px;
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline);
    transition: background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
}
.settings-toggle__visual::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 0.15rem;
    width: 1rem;
    height: 1rem;
    border-radius: 50%;
    background: var(--c-text-3);
    transform: translateY(-50%);
    transition: left var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.settings-toggle input:checked + .settings-toggle__visual {
    background: var(--c-hairline-accent);
    border-color: var(--c-hairline-accent);
}
.settings-toggle input:checked + .settings-toggle__visual::after {
    left: calc(100% - 1.15rem);
    background: var(--c-accent-text);
}
.settings-toggle input:focus-visible + .settings-toggle__visual {
    outline: 2px solid var(--c-accent-text);
    outline-offset: 2px;
}
.settings-toggle__body { display: flex; flex-direction: column; gap: 0.2rem; min-width: 0; }
.settings-toggle__body strong { color: var(--c-text-0); font-size: 0.95rem; line-height: 1.3; }
.settings-toggle__body .muted { font-size: 0.82rem; line-height: 1.5; }

/*
 | Danger variant of the settings card — used for irreversible
 | maintenance actions (e.g. "Test-Daten zurücksetzen"). Same
 | layout, red accent on the icon + a tinted border.
 */
.settings-card--danger {
    border-color: rgb(217 112 112 / 0.4) !important;
}
.settings-card--danger .bezel__inner {
    padding: 1.5rem;
    display: flex;
    flex-direction: column;
    gap: 1rem;
}
.settings-card__icon--danger {
    background: linear-gradient(135deg, rgb(217 112 112 / 0.2), rgb(217 112 112 / 0.05));
    border-color: rgb(217 112 112 / 0.45);
    color: #c46d6d;
}
[data-theme="light"] .settings-card__icon--danger { color: #8a3535; }
.settings-card--danger code {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.85em;
    color: var(--c-text-1);
    background: var(--c-surface-tint);
    padding: 0.1em 0.4em;
    border-radius: 4px;
    border: 1px solid var(--c-hairline);
}
.settings-danger__stats {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem 1.2rem;
    color: var(--c-text-2);
    font-size: 0.9rem;
}
.settings-danger__stats strong { color: var(--c-text-0); font-weight: 600; }
.settings-danger__form {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 0.85rem;
    padding-top: 0.5rem;
    border-top: 1px solid var(--c-hairline);
}
.settings-danger__form .field { flex: 1 1 14rem; min-width: 0; margin: 0; }
.settings-danger__form .btn { flex: 0 0 auto; }

@media (max-width: 540px) {
    .settings__actions { justify-content: stretch; }
    .settings__actions .btn { width: 100%; }
}

/* /manage/invoices — per-session reschedule inline form */
.invoice-courses li { display: flex; flex-direction: column; gap: 0.6rem; }
.invoice-courses__row {
    display: flex;
    align-items: center;
    gap: 0.6rem 0.9rem;
    flex-wrap: wrap;
}
.invoice-courses__edit {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 0.7rem;
    padding: 0.85rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px dashed var(--c-hairline-accent);
    margin-top: 0.35rem;
}
.invoice-courses__edit .field { margin: 0; }
.invoice-courses__edit-actions {
    grid-column: 1 / -1;
    display: flex;
    justify-content: flex-end;
    gap: 0.5rem;
    flex-wrap: wrap;
}
@media (max-width: 540px) {
    .invoice-courses__edit { grid-template-columns: 1fr; }
    .invoice-courses__row .btn { width: 100%; justify-content: center; margin-left: 0 !important; }
}

/* =====================================================
 * /manage/closures — Sachsen-Feiertage + custom Schließtage
 * ===================================================== */

.closures__yearform select {
    appearance: none;
    -webkit-appearance: none;
    padding: 0.45rem 1.7rem 0.45rem 0.85rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-0);
    font-size: 0.9rem;
    font-family: inherit;
    cursor: pointer;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%23999' d='M5 6 0 0h10z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 0.7rem center;
    color-scheme: dark;
}
[data-theme="light"] .closures__yearform select { color-scheme: light; }

.closures-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.5rem; }

.closures-row {
    padding: 0.85rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
    transition: border-color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.closures-row[data-state="closed"]     { border-color: rgb(217 139 139 / 0.4); background: rgb(217 139 139 / 0.04); }
.closures-row[data-state="restricted"] { border-color: rgb(217 162 58 / 0.45); background: rgb(217 162 58 / 0.04); }

.closures-row__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.85rem;
    flex-wrap: wrap;
}
.closures-row__date { display: flex; align-items: center; gap: 0.55rem; flex-wrap: wrap; min-width: 0; }
.closures-row__date strong { color: var(--c-text-0); font-size: 0.95rem; }

/* Three-button radio group (open / restricted / closed) */
.closures-row__state { display: flex; gap: 0.3rem; flex-wrap: wrap; }
.closures-row__state input[type="radio"] {
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0);
}
.closures-row__pill {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    padding: 0.4rem 0.75rem;
    border-radius: var(--r-pill);
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-2);
    font-size: 0.82rem;
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
}
.closures-row__pill:hover { color: var(--c-text-0); }
.closures-row__pill i { font-size: 0.95rem; }

/* Checked / selected states (sibling combinator off the hidden radio). */
.closures-row__state input:checked + .closures-row__pill--open {
    background: rgb(132 184 132 / 0.16);
    border-color: rgb(132 184 132 / 0.5);
    color: #6da26d;
}
.closures-row__state input:checked + .closures-row__pill--restricted {
    background: rgb(217 162 58 / 0.16);
    border-color: rgb(217 162 58 / 0.55);
    color: #d9a23a;
}
.closures-row__state input:checked + .closures-row__pill--closed {
    background: rgb(217 139 139 / 0.16);
    border-color: rgb(217 139 139 / 0.55);
    color: #d98b8b;
}

/* Restricted: time-slot checkboxes underneath */
.closures-row__times {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
    padding: 0.55rem 0 0;
    border-top: 1px dashed var(--c-hairline);
}
.closures-row__time-input {
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0);
}
.closures-row__time {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.3rem 0.7rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint-2);
    border: 1px solid var(--c-hairline);
    color: var(--c-text-2);
    font-size: 0.82rem;
    font-variant-numeric: tabular-nums;
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
}
.closures-row__time-input:checked + .closures-row__time {
    background: var(--c-hairline-accent);
    border-color: var(--c-hairline-accent);
    color: var(--c-accent-text);
}
.closures-row__times[hidden] { display: none; }

@media (max-width: 720px) {
    .closures-row__head { flex-direction: column; align-items: stretch; }
    .closures-row__state { justify-content: space-between; }
    .closures-row__pill { flex: 1 1 auto; justify-content: center; }
}

/* Booking funnel — closure notice under a slot row */
.booking__slot { position: relative; }
.booking__slot-notice {
    margin: 0.5rem 0 0;
    padding: 0.5rem 0.8rem;
    border-radius: var(--r-md);
    border-left: 3px solid #d9a23a;
    background: rgb(217 162 58 / 0.08);
    color: var(--c-text-1);
    font-size: 0.85rem;
    line-height: 1.4;
}
.booking__slot[data-closure="closed"] .booking__slot-notice {
    border-left-color: #d98b8b;
    background: rgb(217 139 139 / 0.08);
}

/* =====================================================
 * Install banner (homepage) + install page layout
 * ===================================================== */

/*
 | Install banner — sits above the hero on /, links to the /download
 | feature page. Polished glass card with a real CTA button, not just
 | a strip of text. Works at every viewport from 320px up.
 |
 | The site nav is position:fixed, so we have to push the banner down
 | by the nav's height (~74px desktop, ~63px mobile) plus a little
 | breathing room — otherwise the nav slides over the card.
 */
.install-banner {
    padding-top: clamp(4.5rem, 6vw + 1rem, 5.75rem);
    padding-bottom: 0;
    position: relative;
    z-index: 2;
}
/* When the install banner is visible, the hero doesn't also need its
   huge clear-the-header padding — the banner already pushed everything
   down. Drop hero padding to just enough breathing room. */
body:has(.install-banner:not([hidden])) .hero {
    padding-top: clamp(1.5rem, 3vw, 2.5rem);
}
.install-banner__card {
    display: flex;
    align-items: center;
    gap: clamp(0.7rem, 1.5vw, 1.1rem);
    padding: clamp(0.85rem, 1.4vw, 1.1rem) clamp(0.9rem, 1.6vw, 1.35rem);
    border-radius: var(--r-lg);
    background:
        linear-gradient(135deg, rgb(187 176 129 / 0.18), rgb(187 176 129 / 0.04) 60%),
        var(--c-bg-1);
    border: 1px solid var(--c-hairline-accent);
    box-shadow: 0 8px 24px rgb(0 0 0 / 0.16), 0 1px 2px rgb(0 0 0 / 0.18);
    position: relative;
    overflow: hidden;
    min-width: 0;
}
/* Subtle accent ribbon at the top to mark this as a CTA, not chrome. */
.install-banner__card::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 2px;
    background: linear-gradient(90deg, transparent, var(--c-accent) 50%, transparent);
    opacity: 0.55;
    pointer-events: none;
}
.install-banner__icon {
    flex: none;
    width: 2.8rem;
    height: 2.8rem;
    border-radius: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-accent-text);
    background: linear-gradient(135deg, rgb(187 176 129 / 0.22), rgb(187 176 129 / 0.06));
    border: 1px solid rgb(187 176 129 / 0.45);
    font-size: 1.4rem;
}
.install-banner__text {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    line-height: 1.35;
}
.install-banner__text strong {
    color: var(--c-text-0);
    font-family: 'Clash Display', sans-serif;
    font-weight: 500;
    font-size: 1rem;
    letter-spacing: -0.005em;
}
.install-banner__text .muted { font-size: 0.85rem; line-height: 1.4; }
.install-banner__cta { flex: 0 0 auto; white-space: nowrap; }
.install-banner__close {
    flex: none;
    width: 2.1rem;
    height: 2.1rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-2);
    background: transparent;
    border: none;
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.install-banner__close:hover { color: var(--c-text-0); background: var(--c-surface-tint-2); }

/* Tablet: keep horizontal but tighten. */
@media (max-width: 820px) {
    .install-banner__cta { padding: 0.5rem 0.9rem; font-size: 0.85rem; }
    .install-banner__text strong { font-size: 0.95rem; }
    .install-banner__text .muted { font-size: 0.8rem; }
}

/* Phone: wrap text + CTA onto their own rows so nothing collides
   with the close button on the right. The icon stays inline with
   the title so the card always reads as a single unit. */
@media (max-width: 560px) {
    .install-banner__card {
        flex-wrap: wrap;
        align-items: flex-start;
        gap: 0.7rem 0.85rem;
        padding: 0.85rem 0.9rem;
    }
    .install-banner__icon { width: 2.4rem; height: 2.4rem; font-size: 1.2rem; }
    .install-banner__text {
        flex: 1 1 0;
        order: 1;
    }
    .install-banner__close {
        order: 2;
        width: 1.9rem;
        height: 1.9rem;
        align-self: flex-start;
    }
    .install-banner__cta {
        order: 3;
        flex: 1 1 100%;
        justify-content: center;
    }
}

/* /download (formerly /install) — feature-first landing page */
.download-page { padding: clamp(1.5rem, 4vw, 2.5rem) 0 clamp(4rem, 8vw, 6rem); }
.download-page__hero {
    text-align: center;
    margin: 1.5rem auto clamp(2rem, 4vw, 3rem);
    max-width: 60ch;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.5rem;
}
.download-page__hero .eyebrow { align-self: center; }
.download-page__hero-icon {
    width: 4.5rem;
    height: 4.5rem;
    border-radius: 22px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, rgb(187 176 129 / 0.28), rgb(187 176 129 / 0.06));
    border: 1px solid rgb(187 176 129 / 0.5);
    color: var(--c-accent-text);
    font-size: 2.2rem;
    margin-bottom: 0.4rem;
    box-shadow: 0 10px 28px rgb(187 176 129 / 0.18);
}
.download-page__hero h1 {
    margin: 0.3rem 0 0.5rem;
    font-size: clamp(1.9rem, 4.5vw, 2.8rem);
    line-height: 1.1;
}
.download-page__hero .lead { margin: 0; }
.download-page__cta {
    margin-top: 1.5rem;
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    gap: 0.75rem;
}
.download-page__cta .btn { min-width: 16rem; justify-content: center; }
.download-page__cta-hint {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    font-size: 0.85rem;
    margin: 0.25rem 0 0;
}
.download-page__cta-hint i { color: #92ba8b; font-size: 1.05rem; }
@media (max-width: 560px) {
    .download-page__cta .btn { min-width: 0; width: 100%; }
    .download-page__cta { display: flex; align-items: stretch; }
}

/* Browser-specific nudge (e.g. Samsung Internet → Chrome). Reuses the
   accent bezel so it sits within the page palette without shouting. */
.download-page__notice { margin: clamp(1rem, 2vw, 1.5rem) 0 0; }
.download-page__notice[hidden] { display: none; }
.download-page__notice > .bezel__inner {
    display: flex;
    align-items: flex-start;
    gap: 0.95rem;
    padding: clamp(1rem, 2vw, 1.35rem) clamp(1.1rem, 2.2vw, 1.5rem);
}
.download-page__notice-icon {
    flex: 0 0 auto;
    font-size: 1.5rem;
    line-height: 1;
    color: var(--c-accent-text);
}
.download-page__notice-body p {
    margin: 0;
    font-size: 0.92rem;
    line-height: 1.55;
    color: var(--c-text-1);
}
.download-page__notice-body strong { color: var(--c-text-0); font-weight: 600; }
@media (max-width: 560px) {
    .download-page__notice > .bezel__inner { gap: 0.7rem; padding: 0.9rem 1rem; }
    .download-page__notice-icon { font-size: 1.25rem; }
    .download-page__notice-body p { font-size: 0.85rem; }
}

/* Features grid */
.download-features {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
    gap: clamp(0.85rem, 1.5vw, 1.25rem);
    margin-bottom: clamp(2rem, 4vw, 3rem);
}
.download-feature .bezel__inner {
    padding: 1.5rem;
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    min-height: 100%;
}
.download-feature__icon {
    width: 2.8rem;
    height: 2.8rem;
    border-radius: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, rgb(187 176 129 / 0.2), rgb(187 176 129 / 0.05));
    border: 1px solid var(--c-hairline-accent);
    color: var(--c-accent-text);
    font-size: 1.4rem;
    margin-bottom: 0.25rem;
}
.download-feature h2 {
    margin: 0;
    font-size: 1.05rem;
    line-height: 1.25;
    letter-spacing: -0.005em;
}
.download-feature p { margin: 0; font-size: 0.9rem; line-height: 1.5; }

/* Manual-install guide section */
.download-page__guide-head {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    margin: 0 0 0.5rem;
    font-size: clamp(1.2rem, 2.5vw, 1.5rem);
    color: var(--c-text-0);
}
.download-page__guide-head i { color: var(--c-accent-text); font-size: 1.4rem; }
.download-page__guide-intro { max-width: 60ch; margin: 0 0 1.5rem; font-size: 0.95rem; }

/* FAQ */
.download-page__faq { margin-top: clamp(2rem, 4vw, 3rem); }
.download-page__faq .bezel__inner { padding: 1.75rem; }
.download-page__faq h2 { margin: 0 0 1rem; font-size: 1.15rem; }
.download-page__faq details {
    padding: 0.85rem 0;
    border-top: 1px solid var(--c-hairline);
}
.download-page__faq details:last-of-type { border-bottom: 1px solid var(--c-hairline); }
.download-page__faq summary {
    cursor: pointer;
    color: var(--c-text-0);
    font-weight: 500;
    font-size: 0.95rem;
    list-style: none;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
}
.download-page__faq summary::-webkit-details-marker { display: none; }
.download-page__faq summary::after {
    content: "+";
    font-size: 1.2rem;
    color: var(--c-accent-text);
    transition: transform var(--t-quick) var(--ease-out-quart);
}
.download-page__faq details[open] summary::after { transform: rotate(45deg); }
.download-page__faq p { margin: 0.6rem 0 0; font-size: 0.9rem; line-height: 1.55; }

/* Legacy /install-page styles kept for the install partials referenced
   above (install-grid + install-card + install-steps). */
.install-page { padding: clamp(1.5rem, 4vw, 2.5rem) 0 clamp(4rem, 8vw, 6rem); }
.install-page__head { margin: 1.25rem 0 2rem; max-width: 60ch; }
.install-page__head h1 { margin: 0.4rem 0 0.5rem; font-size: clamp(1.9rem, 4.5vw, 2.7rem); line-height: 1.1; }
.install-page__head .lead { margin: 0; }

.install-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
    gap: clamp(0.85rem, 1.5vw, 1.25rem);
    margin-bottom: 1.5rem;
    padding-top: 0;
    /* Closed cards keep their compact header height — only the opened
       card grows. Without this, grid stretches every card in the same
       row to match the tallest one and the closed ones look hollow. */
    align-items: start;
}
.install-card {
    transition: box-shadow var(--t-base) var(--ease-out-quart),
                transform var(--t-base) var(--ease-out-quart);
}
.install-card:has(.install-card__details[open]) {
    box-shadow: 0 18px 40px -20px rgb(187 176 129 / 0.35);
}
.install-card .bezel__inner { padding: 1.25rem 1.4rem; }
.install-card__details { display: block; }
.install-card__head {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    cursor: pointer;
    list-style: none;
    user-select: none;
    -webkit-tap-highlight-color: transparent;
    transition: opacity var(--t-quick) var(--ease-out-quart);
}
.install-card__head:hover { opacity: 0.92; }
.install-card__head:hover .install-card__chevron {
    background: var(--c-surface-tint-2, var(--c-surface-tint));
    border-color: var(--c-hairline-accent);
}
.install-card__head::-webkit-details-marker { display: none; }
.install-card__head:focus-visible {
    outline: 2px solid var(--c-accent);
    outline-offset: 4px;
    border-radius: var(--r-sm, 6px);
}
.install-card__title { flex: 1 1 auto; min-width: 0; }
.install-card__head h2 { margin: 0; font-size: 1.05rem; line-height: 1.25; }
.install-card__head .muted { font-size: 0.8rem; margin: 0.1rem 0 0; }
.install-card__icon {
    flex: none;
    width: 2.6rem;
    height: 2.6rem;
    border-radius: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, rgb(187 176 129 / 0.18), rgb(187 176 129 / 0.05));
    color: var(--c-accent-text);
    font-size: 1.35rem;
    border: 1px solid var(--c-hairline-accent);
}
.install-card__chevron {
    flex: none;
    width: 1.85rem;
    height: 1.85rem;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-accent-text);
    font-size: 1.05rem;
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    transition: transform var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.install-card__details[open] .install-card__chevron {
    transform: rotate(180deg);
    background: var(--c-surface-tint-2, var(--c-surface-tint));
}
.install-card__body {
    margin-top: 1.1rem;
    padding-top: 1.1rem;
    border-top: 1px solid var(--c-hairline);
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
    animation: install-card-reveal 280ms var(--ease-out-quart);
}
@keyframes install-card-reveal {
    from { opacity: 0; transform: translate3d(0, -4px, 0); }
    to   { opacity: 1; transform: translate3d(0, 0, 0); }
}
@media (prefers-reduced-motion: reduce) {
    .install-card__body { animation: none; }
    .install-card__chevron { transition: none; }
}
.install-steps {
    margin: 0;
    padding-left: 1.3rem;
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
    font-size: 0.92rem;
    line-height: 1.55;
}
.install-steps li::marker { color: var(--c-accent-text); font-weight: 600; }
.install-steps strong { color: var(--c-text-0); }
.install-card__hint { margin: 0; font-size: 0.8rem; }
@media (max-width: 560px) {
    .install-card .bezel__inner { padding: 1rem 1.1rem; }
    .install-card__icon { width: 2.3rem; height: 2.3rem; font-size: 1.2rem; }
    .install-card__chevron { width: 1.6rem; height: 1.6rem; font-size: 0.95rem; }
}

.install-faq .bezel__inner { padding: 1.5rem; }
.install-faq h2 { font-size: 1.1rem; }
.install-faq__list {
    list-style: none;
    margin: 0.85rem 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
    font-size: 0.92rem;
    line-height: 1.55;
}
.install-faq__list li { padding-left: 1.6rem; position: relative; }
.install-faq__list li::before {
    content: '\2713';
    position: absolute;
    left: 0;
    top: 0.05rem;
    color: var(--c-accent-text);
    font-weight: 700;
}
.install-faq__list strong { color: var(--c-text-0); }

/* /manage/closures — accordion items + open-state colour + status chip */

.closures-item {
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    overflow: hidden;
    transition: border-color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.closures-item[data-state="closed"]     { border-color: rgb(217 139 139 / 0.4); }
.closures-item[data-state="restricted"] { border-color: rgb(217 162 58 / 0.45); }
.closures-item[data-state="open"]       { border-color: rgb(132 184 132 / 0.4); }

.closures-item__details { display: block; }
.closures-item__summary {
    list-style: none;
    cursor: pointer;
    padding: 0.7rem 0.9rem;
    display: flex;
    align-items: center;
    gap: 0.75rem;
    user-select: none;
}
.closures-item__summary::-webkit-details-marker { display: none; }
.closures-item__caret {
    flex: none;
    width: 1.25rem;
    height: 1.25rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-3);
    transition: transform var(--t-quick) var(--ease-out-quart);
}
.closures-item__details[open] .closures-item__caret { transform: rotate(90deg); color: var(--c-text-1); }
.closures-item__head { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; flex: 1 1 auto; line-height: 1.25; }
.closures-item__head strong { color: var(--c-text-0); font-size: 0.92rem; }
.closures-item__head span { font-size: 0.8rem; }
.closures-item__head .pill { margin-top: 0.25rem; align-self: flex-start; }

.closures-item__chip {
    flex: none;
    padding: 0.25rem 0.6rem;
    border-radius: var(--r-pill);
    font-size: 0.74rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    border: 1px solid transparent;
}
.closures-item__chip--open       { background: rgb(132 184 132 / 0.18); color: #6da26d; }
.closures-item__chip--restricted { background: rgb(217 162 58 / 0.18);  color: #d9a23a; }
.closures-item__chip--closed     { background: rgb(217 139 139 / 0.18); color: #d98b8b; }

.closures-item__body {
    padding: 0.6rem 0.9rem 0.9rem;
    border-top: 1px dashed var(--c-hairline);
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
}

/* Open-state radio pill (added so the green variant matches the others) */
.closures-row__state input:checked + .closures-row__pill--open {
    background: rgb(132 184 132 / 0.16);
    border-color: rgb(132 184 132 / 0.5);
    color: #6da26d;
}

@media (max-width: 540px) {
    .closures-item__summary { padding: 0.65rem 0.75rem; gap: 0.55rem; }
    .closures-item__chip { padding: 0.2rem 0.5rem; font-size: 0.7rem; }
}

/* =====================================================
 * Booking funnel inline calendar picker (data-datepick)
 * ===================================================== */

.datepick { position: relative; display: block; }
/* Datepicker trigger button — matched 1:1 with .cs__btn so date +
   time fields read as a single visual pair in any form. */
.datepick__display {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    width: 100%;
    padding: 0.85rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline-strong);
    color: var(--c-text-0);
    font: inherit;
    font-size: 16px;
    line-height: 1.25;
    cursor: pointer;
    text-align: left;
    transition: border-color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.datepick__display:hover,
.datepick:focus-within .datepick__display,
.datepick.is-open .datepick__display {
    border-color: var(--c-accent);
    background: var(--c-surface-tint-2);
}
.datepick.has-value .datepick__display > span { font-variant-numeric: tabular-nums; }
.datepick__display > span {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.datepick__display-caret {
    flex: 0 0 auto;
    font-size: 1rem;
    color: var(--c-text-2);
    transition: transform var(--t-quick) var(--ease-out-quart);
}
.datepick.is-open .datepick__display-caret { transform: rotate(180deg); }

.datepick__pop {
    /* Fixed instead of absolute so an `overflow: hidden` ancestor
       (e.g. .bezel__inner) can't clip the popover. The JS lifts it
       to <body> and sets top/left via getBoundingClientRect() of the
       trigger button. Explicit top/left defaults so the initial
       layout starts at viewport (0,0) instead of falling back to a
       static position derived from its DOM neighbour. */
    position: fixed;
    top: 0;
    left: 0;
    z-index: 200;
    width: 19rem;
    max-width: calc(100vw - 1rem);
    padding: 0.85rem;
    border-radius: var(--r-md);
    background: var(--c-bg-0);
    border: 1px solid var(--c-hairline-accent);
    box-shadow: 0 18px 44px -18px rgb(0 0 0 / 0.55);
}
.datepick__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    margin-bottom: 0.6rem;
}
.datepick__title { font-family: 'Clash Display', sans-serif; font-size: 0.95rem; color: var(--c-text-0); }
.datepick__nav {
    width: 1.8rem;
    height: 1.8rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--c-text-2);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline);
    cursor: pointer;
    transition: color var(--t-quick) var(--ease-out-quart), background var(--t-quick) var(--ease-out-quart);
}
.datepick__nav:hover { color: var(--c-accent-text); background: var(--c-surface-tint-2); }

.datepick__weekdays,
.datepick__grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 0.2rem;
}
.datepick__weekdays {
    margin-bottom: 0.35rem;
}
.datepick__weekdays span {
    text-align: center;
    font-size: 0.65rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--c-text-3);
}
.datepick__grid {
    grid-auto-rows: clamp(2.1rem, 7vw, 2.6rem);
}

.datepick__cell {
    position: relative;
    border: 1px solid transparent;
    border-radius: 10px;
    background: var(--c-surface-tint);
    color: var(--c-text-1);
    font-size: 0.78rem;
    cursor: pointer;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    transition: background var(--t-quick) var(--ease-out-quart),
                color var(--t-quick) var(--ease-out-quart),
                border-color var(--t-quick) var(--ease-out-quart);
    font-family: inherit;
    align-self: stretch;
    justify-self: stretch;
}
.datepick__cell:disabled { cursor: not-allowed; opacity: 0.55; }
.datepick__cell.is-outside {
    background: transparent;
    border: 1px dashed var(--c-hairline);
    color: var(--c-text-3);
    opacity: 0.45;
}
.datepick__cell.is-today    {
    border-color: var(--c-hairline-accent);
    background: rgb(187 176 129 / 0.14);
    color: var(--c-accent-text);
    font-weight: 700;
}
[data-theme="light"] .datepick__cell.is-today {
    background: rgb(187 176 129 / 0.32);
    border-color: #a59573;
    color: #5e5430;
}
.datepick__cell.is-selected { background: var(--c-accent); color: #1a1814; border-color: var(--c-accent); font-weight: 700; }

.datepick__cell--past     { opacity: 0.4; background: transparent; }
.datepick__cell--closed   {
    background: rgb(217 139 139 / 0.14);
    color: #d98b8b;
    border-color: rgb(217 139 139 / 0.35);
}
/* Light-mode contrast bump — the dark-mode tints wash out on a light
   surface. Stronger fill + a darker red so closed cells (and the
   restricted/partial variants) stay obvious. */
[data-theme="light"] .datepick__cell--closed {
    background: rgb(217 139 139 / 0.28);
    color: #8a3535;
    border-color: rgb(184 78 78 / 0.55);
}
.datepick__cell--restricted {
    background: rgb(217 162 58 / 0.14);
    color: #d9a23a;
    border-color: rgb(217 162 58 / 0.4);
}
[data-theme="light"] .datepick__cell--restricted {
    background: rgb(217 162 58 / 0.26);
    color: #7a5b1e;
    border-color: rgb(184 134 30 / 0.55);
}
.datepick__cell--partial {
    background: var(--c-surface-tint-2);
    color: var(--c-text-0);
    border-color: var(--c-hairline);
}
[data-theme="light"] .datepick__cell--partial {
    border-color: var(--c-hairline-strong);
}
/* Only the restricted state gets a corner indicator — partially
   booked days look identical to open ones (no marker), since the
   tooltip already shows the per-slot remaining capacity. */
.datepick__cell--restricted::after {
    content: '';
    position: absolute;
    bottom: 3px;
    left: 50%;
    transform: translateX(-50%);
    width: 4px;
    height: 4px;
    border-radius: 50%;
    background: currentColor;
}
.datepick__cell:hover:not(:disabled):not(.is-outside) {
    transform: translateY(-1px);
    border-color: var(--c-accent-text);
}

.datepick__legend {
    display: flex;
    flex-wrap: wrap;
    gap: 0.45rem 0.85rem;
    margin-top: 0.75rem;
    padding-top: 0.6rem;
    border-top: 1px dashed var(--c-hairline);
    font-size: 0.72rem;
    color: var(--c-text-3);
}
.datepick__legend .dot {
    display: inline-block;
    width: 0.7rem;
    height: 0.7rem;
    border-radius: 50%;
    margin-right: 0.3rem;
    vertical-align: middle;
}
.datepick__legend .dot--free       { background: var(--c-hairline-accent); }
.datepick__legend .dot--partial    { background: var(--c-text-0); }
.datepick__legend .dot--closed     { background: #d98b8b; }
.datepick__legend .dot--restricted { background: #d9a23a; }

@media (max-width: 540px) {
    .datepick__pop { width: calc(100vw - 1rem); }
}

/* ====================================================================
 | Custom dropdown (.cs) — wraps native <select> via JS enhancer in
 | assets/js/app.js. The native control stays in the DOM (hidden so it
 | still submits, validates and emits change events) and the visible
 | button + popup list inherits the site's glass + gold aesthetic so
 | dropdowns look identical across Windows, macOS, iOS and Android.
 |==================================================================== */
.cs {
    position: relative;
    display: block;
    width: 100%;
}
/* Hide the native select but keep it focusable for form/validation. */
.cs > .cs__native {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    pointer-events: none;
    z-index: -1;
    /* Required so HTML5 validation messages anchor to the right place. */
    appearance: none;
    border: 0;
}
.cs__btn {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    width: 100%;
    padding: 0.85rem 1rem;
    border-radius: var(--r-md);
    background: var(--c-surface-tint);
    border: 1px solid var(--c-hairline-strong);
    color: var(--c-text-0);
    font: inherit;
    font-size: 16px;
    line-height: 1.25;
    text-align: left;
    cursor: pointer;
    transition: border-color var(--t-quick) var(--ease-out-quart),
                background var(--t-quick) var(--ease-out-quart);
}
.cs__btn:focus-visible {
    outline: none;
    border-color: var(--c-accent);
    background: var(--c-surface-tint-2);
}
.cs.is-open .cs__btn {
    border-color: var(--c-accent);
    background: var(--c-surface-tint-2);
}
.cs.is-disabled .cs__btn {
    opacity: 0.55;
    cursor: not-allowed;
}
.cs__label {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.cs__caret {
    flex: 0 0 auto;
    font-size: 1rem;
    color: var(--c-text-2);
    transition: transform var(--t-quick) var(--ease-out-quart);
}
.cs.is-open .cs__caret { transform: rotate(180deg); }

.cs__list {
    /* Fixed (not absolute) so the popup escapes any overflow:hidden
       ancestor — notably the bezel which clips otherwise. JS sets the
       explicit top/left/width based on the button's bounding rect.
       The list is also reparented to <body> so transformed ancestors
       (anything with [data-reveal]) can't trap the fixed positioning.
       That's why the open/up state is on the list itself instead of
       cascaded from .cs.is-open .cs__list — the list is no longer a
       descendant of .cs once it's been enhanced. */
    position: fixed;
    top: 0;
    left: 0;
    z-index: 100;
    max-height: 14rem;
    overflow-y: auto;
    padding: 0.35rem;
    border-radius: var(--r-md);
    background: var(--c-bg-1);
    border: 1px solid var(--c-hairline-strong);
    box-shadow: 0 18px 38px rgb(0 0 0 / 0.42), 0 4px 10px rgb(0 0 0 / 0.18);
    opacity: 0;
    transform: translateY(-6px);
    pointer-events: none;
    transition: opacity var(--t-quick) var(--ease-out-quart),
                transform var(--t-quick) var(--ease-out-quart);
}
.cs__list.is-open {
    opacity: 1;
    transform: translateY(0);
    pointer-events: auto;
}
.cs__list.is-up { transform: translateY(6px); }
.cs__list.is-up.is-open { transform: translateY(0); }

.cs__opt {
    padding: 0.6rem 0.8rem;
    border-radius: calc(var(--r-md) - 4px);
    color: var(--c-text-1);
    font-size: 0.95rem;
    line-height: 1.35;
    cursor: pointer;
    user-select: none;
}
.cs__opt:hover,
.cs__opt.is-focus {
    background: var(--c-surface-tint-2);
    color: var(--c-text-0);
}
.cs__opt.is-selected {
    background: rgb(187 176 129 / 0.14);
    color: var(--c-text-0);
    font-weight: 600;
}
.cs__opt.is-disabled {
    color: var(--c-text-3);
    cursor: not-allowed;
    opacity: 0.6;
}
.cs__group {
    padding: 0.55rem 0.8rem 0.2rem;
    color: var(--c-text-3);
    font-size: 0.7rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
}

[data-theme="light"] .cs__list { background: #ffffff; }
