/* ══════════════════════════════════════════════════════════════════
   Domstad Radio — Design System
   ══════════════════════════════════════════════════════════════════ */
:root {
    --primary: #FF4B3E;
    --primary-dark: #E23A2E;
    --secondary: #FF8478;
    --navy: #171717;
    --navy-soft: #262626;
    --bg: #FFFFFF;
    --bg-soft: #F4F4F4;
    --text: #1A1A1A;
    --text-muted: #5C5C5C;
    --border: #E2E2E2;
    --radius-sm: 10px;
    --radius: 18px;
    --radius-lg: 28px;
    --shadow: 0 10px 30px -12px rgba(0, 0, 0, .18);
    --shadow-sm: 0 4px 14px -6px rgba(0, 0, 0, .14);
    --header-h: 100px;
    --subnav-h: 50px;
    --header-total-h: calc(var(--header-h) + var(--subnav-h));
    --topbar-h: 38px;
    --player-h: 76px;
    --logo-h: 76px;
    /* Header (logo bar) + on-air DJ bar backgrounds — independently configurable (admin panel). */
    --header-bg: #FF4B3E;
    --onair-bg: #FF4B3E;
    --font-body: 'Inter', system-ui, sans-serif;
    --font-head: 'Poppins', system-ui, sans-serif;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: calc(var(--header-total-h) + 12px); }
body {
    margin: 0;
    font-family: var(--font-body);
    color: var(--text);
    background: var(--bg);
    line-height: 1.6;
    padding-top: calc(var(--topbar-h) + var(--header-total-h));
    transition: background .2s ease, color .2s ease;
}

/* Dark mode override — toggled via [data-theme="dark"] on <html>, user preference only (light stays the brand default) */
[data-theme="dark"] {
    --bg: #0D0D0D;
    --bg-soft: #161616;
    --navy: #202020;
    --navy-soft: #2A2A2A;
    --text: #F0F0F0;
    --text-muted: #A3A3A3;
    --border: #2E2E2E;
    --card: #1C1C1C;
}
[data-theme="dark"] .header { background: rgba(13,13,13,.9); }
[data-theme="dark"] .show-card,
[data-theme="dark"] .news-card,
[data-theme="dark"] .gemist-card,
[data-theme="dark"] .dj-card,
[data-theme="dark"] .day-tab,
[data-theme="dark"] .hero__badge,
[data-theme="dark"] .hero__nowplaying,
[data-theme="dark"] .btn--outline { background: var(--card); color: var(--text); }
[data-theme="dark"] .newsletter { background: var(--bg-soft); }
h1, h2, h3, h4 { font-family: var(--font-head); color: var(--text); margin: 0 0 .5em; line-height: 1.2; }
p { margin: 0 0 1em; color: var(--text-muted); }
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
button { font-family: inherit; cursor: pointer; }
/* Author display rules (img/flex/etc.) can otherwise beat the UA [hidden] rule — never let that happen. */
[hidden] { display: none !important; }

.container { max-width: 1180px; margin: 0 auto; padding: 0 24px; }

.gradient-text {
    background: linear-gradient(135deg, var(--primary), var(--navy));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

.eyebrow {
    display: inline-block;
    font-weight: 700;
    font-size: 13px;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--primary);
    margin-bottom: 10px;
}
.eyebrow--light { color: #fff; }

.live-dot {
    width: 9px; height: 9px; border-radius: 50%;
    background: var(--primary);
    display: inline-block;
    box-shadow: 0 0 0 0 rgba(255, 75, 62, .6);
    animation: pulse 1.8s infinite;
}
@keyframes pulse {
    0% { box-shadow: 0 0 0 0 rgba(255, 75, 62, .55); }
    70% { box-shadow: 0 0 0 8px rgba(255, 75, 62, 0); }
    100% { box-shadow: 0 0 0 0 rgba(255, 75, 62, 0); }
}

/* ── Buttons ─────────────────────────────────────────────────────── */
.btn {
    display: inline-flex; align-items: center; gap: 8px;
    padding: 12px 22px;
    border-radius: 999px;
    font-weight: 600;
    font-size: 14.5px;
    border: 2px solid transparent;
    transition: transform .15s ease, box-shadow .15s ease, background .15s ease, color .15s ease;
    white-space: nowrap;
}
.btn--primary { background: var(--primary); color: #fff; box-shadow: var(--shadow-sm); }
.btn--primary:hover { background: var(--primary-dark); transform: translateY(-1px); }
.btn--secondary { background: var(--navy); color: #fff; box-shadow: var(--shadow-sm); }
.btn--secondary:hover { background: var(--navy-soft); transform: translateY(-1px); }
.btn--outline { border-color: var(--border); color: var(--navy); background: #fff; }
.btn--outline:hover { border-color: var(--primary); color: var(--primary); }
.btn--lg { padding: 15px 28px; font-size: 16px; }
.btn--sm { padding: 8px 16px; font-size: 13px; }

/* ══════════════════════════════════════════════════════════════════
   TOPBAR
   ══════════════════════════════════════════════════════════════════ */
.topbar {
    position: fixed; top: 0; left: 0; right: 0; z-index: 60;
    height: var(--topbar-h);
    background: var(--navy);
    color: #D6D6D6;
    font-size: 12.5px;
    display: flex; align-items: center;
}
.topbar__inner { display: flex; align-items: center; justify-content: space-between; width: 100%; }
.topbar__social { display: flex; gap: 12px; }
.topbar__social a { color: #D6D6D6; opacity: .85; }
.topbar__social a:hover { color: var(--primary); opacity: 1; }
.topbar__info { display: flex; align-items: center; gap: 18px; }
.topbar__info a:hover { color: var(--primary); }
.theme-toggle {
    background: rgba(255,255,255,.1); border: 1px solid rgba(255,255,255,.18);
    color: #D6D6D6; border-radius: 50%; width: 26px; height: 26px;
    display: flex; align-items: center; justify-content: center; padding: 0;
    transition: background .15s ease;
}
.theme-toggle:hover { background: rgba(255,255,255,.2); }

/* ══════════════════════════════════════════════════════════════════
   HEADER / NAV
   ══════════════════════════════════════════════════════════════════ */
.header {
    position: fixed; top: var(--topbar-h); left: 0; right: 0; z-index: 55;
    height: var(--header-total-h);
    /* Logo bar background — configurable red tint (admin panel), overridden in dark mode above. */
    background: var(--header-bg);
    border-bottom: 1px solid var(--border);
    display: flex; flex-direction: column;
    transition: box-shadow .2s ease, background .2s ease;
}
.header.is-scrolled { box-shadow: var(--shadow-sm); }
.nav { display: flex; align-items: center; justify-content: space-between; width: 100%; height: var(--header-h); flex: 0 0 auto; }
.nav__logo { display: flex; align-items: center; gap: 10px; color: #fff; }
.logo-mark { color: #fff; flex-shrink: 0; width: 44px; height: 44px; }
.nav__logo-img { height: var(--logo-h); width: auto; max-width: 260px; object-fit: contain; flex-shrink: 0; }
.nav__logo-text { font-family: var(--font-head); font-weight: 700; font-size: 24px; }
.nav__logo-text em { font-style: normal; color: var(--navy); }
.nav__logo-text--footer { color: #fff; font-size: 22px; }
.footer__logo-img { height: 48px; width: auto; max-width: 220px; object-fit: contain; display: block; margin-bottom: 10px; }

/* Second header row: full-bleed colored bar (radio10-style), holds the nav links only */
.subnav { flex: 0 0 auto; height: var(--subnav-h); background: var(--navy); overflow: hidden; }
.nav__menu { list-style: none; display: flex; align-items: center; justify-content: center; height: 100%; gap: 28px; margin: 0 auto; padding: 0; }
.nav__link { font-weight: 500; font-size: 14.5px; color: var(--text); position: relative; }
.subnav .nav__link { color: #fff; }
.nav__link::after {
    content: ''; position: absolute; left: 0; bottom: -6px; height: 2px; width: 0;
    background: var(--primary); transition: width .2s ease;
}
.nav__link:hover::after { width: 100%; }
.nav__link.is-active { color: var(--primary); }
.nav__link.is-active::after { width: 100%; }

.nav__actions { display: flex; align-items: center; gap: 14px; }
.nav__toggle {
    display: none; flex-direction: column; gap: 5px;
    background: none; border: none; padding: 6px;
}
.nav__toggle span { width: 22px; height: 2px; background: var(--navy); border-radius: 2px; }

/* ══════════════════════════════════════════════════════════════════
   HERO
   ══════════════════════════════════════════════════════════════════ */
.hero { position: relative; overflow: hidden; padding: 72px 0 90px; }
.hero__bg { position: absolute; inset: 0; z-index: 0; overflow: hidden; }
.hero__blob { position: absolute; border-radius: 50%; filter: blur(60px); opacity: .35; }
.hero__blob--1 { width: 460px; height: 460px; background: var(--primary); top: -180px; right: -120px; }
.hero__blob--2 { width: 380px; height: 380px; background: var(--navy); bottom: -160px; left: -100px; }
.hero__waves { position: absolute; bottom: 0; left: 0; right: 0; height: 60px; display: flex; align-items: flex-end; gap: 6px; padding: 0 24px; opacity: .18; }
.hero__waves span { flex: 1; background: var(--primary); border-radius: 4px 4px 0 0; animation: wave 1.6s ease-in-out infinite; }
.hero__waves span:nth-child(odd) { animation-delay: .2s; }
.hero__waves span:nth-child(3n) { animation-delay: .4s; background: var(--navy); }
@keyframes wave { 0%, 100% { height: 14px; } 50% { height: 52px; } }

.hero__content { position: relative; z-index: 1; text-align: center; max-width: 760px; margin: 0 auto; }
.hero__badge {
    display: inline-flex; align-items: center; gap: 8px;
    background: #fff; border: 1px solid var(--border); border-radius: 999px;
    padding: 8px 16px; font-size: 13px; font-weight: 600; color: var(--navy);
    box-shadow: var(--shadow-sm); margin-bottom: 24px;
}
.hero__title { font-size: clamp(2.4rem, 6vw, 4.2rem); font-weight: 800; margin-bottom: 20px; }
.hero__subtitle { font-size: clamp(1rem, 2vw, 1.15rem); max-width: 560px; margin: 0 auto 32px; }
.hero__cta { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; margin-bottom: 44px; }

/* ══════════════════════════════════════════════════════════════════
   ON AIR — DJ photo + play + now playing (radio10-style), homepage only.
   The live badge overlays the lower-left corner of the photo.
   ══════════════════════════════════════════════════════════════════ */
/* Subtle diagonal gradient (radio10-style) around the configurable base color, instead of a flat fill. */
.onair {
    background: linear-gradient(135deg,
        color-mix(in srgb, var(--onair-bg) 80%, white) 0%,
        var(--onair-bg) 50%,
        color-mix(in srgb, var(--onair-bg) 82%, black) 100%);
    padding: 16px 0;
}
.onair__inner { display: flex; align-items: center; justify-content: center; gap: 40px; flex-wrap: wrap; }
.onair__photo-col { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.onair__live {
    position: absolute; left: 14px; bottom: 18px; z-index: 3;
    display: inline-flex; align-items: center; gap: 5px;
    background: var(--navy); color: #fff; font-size: 11px; font-weight: 700;
    text-transform: uppercase; letter-spacing: .04em;
    padding: 5px 12px; border-radius: 999px; white-space: nowrap;
}
/* The photo is a real <button>: clicking/tapping it toggles playback, same as the round play button. */
.onair__photo-wrap {
    position: relative; width: 300px; height: 300px;
    display: flex; align-items: center; justify-content: center;
    background: none; border: none; padding: 0; font: inherit; color: inherit;
    cursor: pointer;
}
.onair__photo-wrap:focus-visible { outline: 3px solid var(--primary); outline-offset: 4px; border-radius: var(--radius-lg); }
/* Decorative Domstad Radio mark behind the photo, echoing radio10's soft glow shape.
   Centered explicitly (not just via the flex parent) so it reliably peeks out around the photo.
   Uses the admin-configured site logo when set; falls back to the built-in SVG mark otherwise.
   Full contrast, own bottom fade to transparent so it never ends in a hard edge. */
.onair__logo-bg {
    position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
    z-index: 0; width: 340px; height: 340px; color: var(--text);
    /* Starts fading earlier than the photo's own fade (below) so it's already dimmed by the
       time the photo starts revealing what's behind it — otherwise a fully-opaque logo would
       punch through a still-fading (semi-transparent) photo. */
    -webkit-mask-image: linear-gradient(to bottom, #000 60%, transparent 90%);
            mask-image: linear-gradient(to bottom, #000 60%, transparent 90%);
}
img.onair__logo-bg { object-fit: contain; }
.onair__photo {
    position: relative; z-index: 1;
    width: 260px; height: 260px; border-radius: var(--radius-lg);
    display: flex; align-items: center; justify-content: center;
    overflow: hidden;
    /* No fill — transparent parts of the uploaded photo stay transparent (showing the logo behind). */
    -webkit-mask-image: linear-gradient(to bottom, #000 80%, transparent 100%);
            mask-image: linear-gradient(to bottom, #000 80%, transparent 100%);
}
.onair__photo img { width: 100%; height: 100%; object-fit: cover; }
.onair__photo-fallback { font-size: 64px; color: var(--text-muted); }
.onair__playbtn {
    /* Navy instead of --primary: the banner itself is now the same red family, navy keeps it visible. */
    flex-shrink: 0; width: 72px; height: 72px; border-radius: 50%;
    background: var(--navy); color: #fff; border: none; cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    box-shadow: var(--shadow-sm); transition: transform .15s ease, background .15s ease;
}
.onair__playbtn:hover { background: var(--navy-soft); transform: scale(1.05); }
.onair__meta { display: flex; flex-direction: column; align-items: center; gap: 14px; text-align: center; }
/* DJ name + slogan pill, stacked tight against each other and centered (radio10-style). */
.onair__identity { display: flex; flex-direction: column; align-items: center; gap: 4px; }
/* DJ name — white pill, radio10-style. */
.onair__dj {
    display: inline-block; width: fit-content;
    font-family: var(--font-head); font-weight: 800; font-size: 22px; color: var(--navy);
    background: #fff; padding: 10px 22px; border-radius: 999px; box-shadow: var(--shadow-sm);
}
/* Station slogan pill underneath — always the site's own tagline (hero_title setting),
   not the live show name (that's already covered by the "Nu / Zo dadelijk" strip below). */
.onair__show {
    display: inline-block; font-size: 14px; font-weight: 700; color: #fff;
    background: rgba(0,0,0,.3); backdrop-filter: blur(3px);
    padding: 6px 18px; border-radius: 999px; width: fit-content;
}
/* Now playing — bordered box, fixed width so it never jumps around with text length,
   2-line text (title bold, artist smaller underneath). */
.onair__nowplaying {
    display: flex; align-items: center; gap: 10px;
    width: 400px; flex-shrink: 0; text-align: left;
    border: 3px solid rgba(255,255,255,.4); border-radius: 14px;
    padding: 10px 16px;
}
.onair__nowplaying-label { font-size: 13px; font-weight: 700; color: rgba(255,255,255,.75); flex-shrink: 0; }
.onair__cover { width: 40px; height: 40px; border-radius: 6px; object-fit: cover; flex-shrink: 0; }
.onair__cover-fallback { display: flex; align-items: center; justify-content: center; background: var(--bg-soft); font-size: 18px; }
.onair__nowplaying-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.onair__track-title { font-size: 16px; font-weight: 700; font-style: italic; color: #fff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.onair__track-artist { font-size: 13px; color: rgba(255,255,255,.75); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ══════════════════════════════════════════════════════════════════
   PAGE TITLE BAR — same gradient as the DJ bar (shared --onair-bg var),
   so every subpage's title area matches the homepage's look and feel.
   ══════════════════════════════════════════════════════════════════ */
.page-titlebar {
    background: linear-gradient(135deg,
        color-mix(in srgb, var(--onair-bg) 80%, white) 0%,
        var(--onair-bg) 50%,
        color-mix(in srgb, var(--onair-bg) 82%, black) 100%);
    padding: 28px 0;
}
.page-titlebar .eyebrow { color: #fff; opacity: .85; }
.page-titlebar h2 { color: #fff; margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.2rem); }

/* ══════════════════════════════════════════════════════════════════
   STICKY PLAYER — fixed to the viewport bottom, independent from the header/nav.
   Hidden by default; slides into view (see js/main.js) whenever the sponsor bar
   below it hides, so the bottom of the screen always shows one or the other.
   ══════════════════════════════════════════════════════════════════ */
.player {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 45;
    height: var(--player-h);
    background: var(--navy);
    color: #fff;
    display: flex; align-items: center;
    box-shadow: 0 -6px 20px -10px rgba(0,0,0,.35);
    transform: translateY(100%);
    transition: transform .3s ease;
}
.player--visible { transform: translateY(0); }
/* Seek/progress bar — thin strip along the top edge of the player. Disabled (and dimmed) while
   playing the live stream, since a live broadcast has no meaningful duration to scrub through;
   enabled with a real duration/position once a gemist (catch-up) episode is loaded (see main.js). */
.player__seek {
    position: absolute; top: 0; left: 0; right: 0; z-index: 1;
    width: 100%; height: 5px; margin: 0; padding: 0;
    -webkit-appearance: none; appearance: none;
    background: rgba(255,255,255,.15);
    accent-color: var(--primary);
    cursor: pointer;
}
.player__seek:disabled { opacity: .4; cursor: default; }
.player__seek::-webkit-slider-runnable-track { height: 5px; background: transparent; }
.player__seek::-webkit-slider-thumb {
    -webkit-appearance: none; width: 13px; height: 13px; margin-top: -4px;
    border-radius: 50%; background: var(--primary); box-shadow: 0 0 0 2px rgba(0,0,0,.25);
}
.player__seek::-moz-range-track { height: 5px; background: transparent; border: none; }
.player__seek::-moz-range-thumb {
    width: 13px; height: 13px; border: none; border-radius: 50%;
    background: var(--primary); box-shadow: 0 0 0 2px rgba(0,0,0,.25);
}
.player__inner { display: flex; align-items: center; gap: 16px; width: 100%; }
.player__playbtn {
    width: 46px; height: 46px; border-radius: 50%; flex-shrink: 0;
    background: var(--primary); color: #fff; border: none;
    display: flex; align-items: center; justify-content: center;
    transition: transform .15s ease, background .15s ease;
}
.player__playbtn:hover { background: var(--primary-dark); transform: scale(1.05); }
.player__cover { width: 36px; height: 36px; border-radius: 6px; object-fit: cover; flex-shrink: 0; }
.player__cover-fallback { display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,.12); font-size: 15px; }
.player__meta { display: flex; flex-direction: column; min-width: 0; margin-right: auto; }
.player__title { font-family: var(--font-head); font-weight: 700; font-size: 14px; }
.player__track { font-size: 12.5px; color: #BFBFBF; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 320px; }
.player__live {
    display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700;
    letter-spacing: .04em; color: #fff; flex-shrink: 0;
}
.player__volume { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.player__mute { background: none; border: none; color: #D6D6D6; display: flex; }
.player__volume input[type="range"] { width: 90px; accent-color: var(--primary); }
.player__request { flex-shrink: 0; border-color: rgba(255,255,255,.25); color: #fff; background: transparent; }
.player__request:hover { border-color: #fff; color: #fff; }

/* ══════════════════════════════════════════════════════════════════
   STRIP (now/next)
   ══════════════════════════════════════════════════════════════════ */
.strip { background: var(--navy); }
.strip__inner { display: flex; align-items: center; gap: 20px; padding: 14px 24px; flex-wrap: wrap; }
.strip__item { display: flex; align-items: center; gap: 10px; }
.strip__item div { display: flex; flex-direction: column; }
.strip__item strong { font-family: var(--font-head); font-size: 14.5px; color: #fff; }
.strip__item span:last-child { font-size: 12px; color: #BFBFBF; }
.strip__tag {
    font-size: 11px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase;
    background: #fff; color: var(--navy); padding: 4px 10px; border-radius: 999px;
}
.strip__tag--now { background: var(--primary); color: #fff; }
.strip__arrow { color: #fff; opacity: .5; }
.strip__cta { margin-left: auto; font-weight: 700; font-size: 13.5px; color: #fff; }
.strip__cta:hover { text-decoration: underline; }

/* ══════════════════════════════════════════════════════════════════
   SECTIONS (generic)
   ══════════════════════════════════════════════════════════════════ */
.section { padding: 88px 0; }
/* Whatever section follows the onair DJ bar (homepage: the news teaser) sits right underneath it,
   so it doesn't need the generic section's full top padding on top of the DJ bar's own padding. */
.onair + .section { padding-top: 24px; }
.section--soft { background: var(--bg-soft); }
.section--navy { background: var(--navy); color: #fff; }
.section--navy .eyebrow { color: var(--secondary); }
.section--navy h2 { color: #fff; }
.section--navy p { color: #BFBFBF; }

.section__head { max-width: 640px; margin: 0 0 48px; }
.section__head .btn { margin-top: 18px; }
.section__head--row { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; max-width: none; flex-wrap: wrap; }
.section__head h2 { font-size: clamp(1.7rem, 3.4vw, 2.4rem); }

/* ══════════════════════════════════════════════════════════════════
   PROGRAMMA / SCHEDULE
   ══════════════════════════════════════════════════════════════════ */
.day-tabs { display: flex; gap: 8px; margin-bottom: 32px; flex-wrap: wrap; }
.day-tab {
    padding: 9px 18px; border-radius: 999px; border: 1px solid var(--border);
    background: #fff; color: var(--text); font-weight: 600; font-size: 13.5px;
    transition: all .15s ease;
}
.day-tab:hover { border-color: var(--primary); }
.day-tab.is-active { background: var(--navy); border-color: var(--navy); color: #fff; }

.schedule__day { display: none; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 18px; }
.schedule__day.is-active { display: grid; }

.show-card {
    background: #fff; border: 1px solid var(--border); border-radius: var(--radius);
    padding: 20px; transition: transform .15s ease, box-shadow .15s ease;
}
.show-card:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
/* Currently airing slot — subtle red gradient instead of the plain card background. */
.show-card--live {
    background: linear-gradient(135deg, rgba(255,75,62,.18) 0%, rgba(255,75,62,.04) 100%);
    border-color: var(--primary);
}
[data-theme="dark"] .show-card--live {
    background: linear-gradient(135deg, rgba(255,75,62,.3) 0%, rgba(255,75,62,.08) 100%);
    border-color: var(--primary);
}
.show-card__img { width: 100%; height: 110px; object-fit: cover; border-radius: var(--radius-sm); margin-bottom: 12px; }
.show-card__time { display: block; font-size: 12.5px; font-weight: 700; color: var(--text-muted); margin-bottom: 8px; }
.show-card__tag {
    display: inline-block; font-size: 11px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase;
    background: rgba(255,75,62,.1); color: var(--primary); padding: 3px 10px; border-radius: 999px; margin-bottom: 10px;
}
.show-card h3 { font-size: 16px; margin-bottom: 6px; }
.show-card p { font-size: 13.5px; margin: 0; }
.show-card__djs { display: block; margin-top: 10px; font-size: 12px; font-weight: 600; color: var(--text-muted); }

/* ══════════════════════════════════════════════════════════════════
   NIEUWS — text overlaid on the image (dark scrim), not below it.
   ══════════════════════════════════════════════════════════════════ */
.news-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }
/* Homepage teaser (exactly 3 items, data-limit="3"): 1 big tile + 2 stacked smaller tiles,
   radio10-style proportions (2:1 width ratio) — normal-flow auto-placement naturally stacks
   the 2nd/3rd card in the narrow column since the big one already spans both rows in column 1. */
.news-grid[data-limit="3"] { grid-template-columns: 2fr 1fr; }
.news-grid[data-limit="3"] .news-card--big { grid-column: 1; grid-row: span 2; }
.news-cta { text-align: center; margin-top: 32px; }
.news-card--big { grid-column: span 2; grid-row: span 2; }
.news-card {
    position: relative; overflow: hidden;
    border-radius: var(--radius);
    min-height: 240px;
    display: flex; flex-direction: column;
    box-shadow: var(--shadow-sm);
    transition: transform .15s ease, box-shadow .15s ease;
}
.news-card--big { min-height: 380px; }
/* Combined height of the 2 stacked small tiles must match the big tile's height. */
.news-grid[data-limit="3"] .news-card:not(.news-card--big) { min-height: 179px; }
.news-card:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
.news-card__img {
    position: absolute; inset: 0; z-index: 0;
    background: linear-gradient(135deg, var(--c1), var(--c2));
    display: flex; align-items: center; justify-content: center; font-size: 42px;
}
.news-card__img--photo { width: 100%; height: 100%; object-fit: cover; background: var(--bg-soft); font-size: 0; }
.news-card__body {
    position: relative; z-index: 1; margin-top: auto;
    padding: 40px 18px 16px;
    background: linear-gradient(to top, rgba(0,0,0,.8) 0%, rgba(0,0,0,.4) 55%, transparent 100%);
    display: flex; flex-direction: column;
}
.news-card__cat {
    font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .04em;
    color: #fff; opacity: .85; margin-bottom: 6px;
}
.news-card h3 { font-size: 17px; margin-bottom: 6px; color: #fff; }
.news-card p { font-size: 13.5px; color: rgba(255,255,255,.85); margin: 0; }
.news-card__link { font-weight: 700; font-size: 13.5px; color: #fff; margin-top: 8px; }
.news-card__link:hover { color: var(--secondary); }

/* ══════════════════════════════════════════════════════════════════
   HITLIJSTEN
   ══════════════════════════════════════════════════════════════════ */
.hitlijsten-frame {
    border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow);
    background: #fff; border: 1px solid var(--border);
}
.hitlijsten-frame iframe { width: 100%; height: 720px; border: 0; display: block; }

/* ══════════════════════════════════════════════════════════════════
   GEMIST
   ══════════════════════════════════════════════════════════════════ */
.gemist-search {
    display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap;
    margin-bottom: 22px; padding: 16px 20px; background: var(--bg-soft); border-radius: var(--radius);
}
.gemist-search label { display: flex; flex-direction: column; gap: 4px; font-size: 12.5px; font-weight: 600; }
.gemist-search__count { font-size: 12.5px; color: var(--text-muted); align-self: center; }
.gemist-search input {
    padding: 9px 12px; border-radius: 8px; border: 1px solid var(--border);
    font-family: inherit; font-size: 14px; background: #fff;
}
.gemist-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; margin-bottom: 24px; }
.gemist-card {
    position: relative; aspect-ratio: 1 / 1; border-radius: var(--radius); overflow: hidden;
    background: var(--navy); transition: box-shadow .15s ease, transform .15s ease;
}
.gemist-card:hover { box-shadow: var(--shadow); transform: translateY(-2px); }
.gemist-card__thumb { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.gemist-card__thumb--empty {
    position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
    font-size: 40px; background: var(--navy); color: #fff;
}
.gemist-card__playbtn {
    position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 2;
    width: 52px; height: 52px; border-radius: 50%; border: none; cursor: pointer;
    background: rgba(16, 27, 51, .55); color: #fff; display: flex; align-items: center; justify-content: center;
    transition: background .15s ease, transform .15s ease;
}
.gemist-card__playbtn:hover { background: var(--primary); transform: translate(-50%, -50%) scale(1.08); }
.gemist-card__overlay {
    position: absolute; z-index: 1; left: 0; right: 0; bottom: 0; padding: 18px 14px 14px; color: #fff;
    background: linear-gradient(to top, rgba(0,0,0,.85) 0%, rgba(0,0,0,.55) 55%, rgba(0,0,0,0) 100%);
}
.gemist-card__show { font-size: 10.5px; font-weight: 800; text-transform: uppercase; letter-spacing: .04em; color: var(--secondary); }
.gemist-card__overlay h3 { font-size: 13.5px; margin: 4px 0 2px; color: #fff; line-height: 1.25; }
.gemist-card__meta { font-size: 11px; color: rgba(255,255,255,.75); }
.gemist-card__stats { position: absolute; z-index: 2; top: 10px; right: 10px; display: flex; gap: 6px; align-items: center; }
.gemist-card__plays, .gemist-card__like, .gemist-card__share {
    display: flex; align-items: center; gap: 4px; background: rgba(16,27,51,.6); color: #fff;
    border: none; border-radius: 999px; padding: 4px 8px; font-size: 11px; font-weight: 700; line-height: 1;
}
.gemist-card__like, .gemist-card__share { cursor: pointer; transition: background .15s ease; }
.gemist-card__like:hover, .gemist-card__share:hover { background: var(--primary); }
.gemist-card__like.is-liked .icon-heart-filled { color: var(--secondary); }
.gemist-note { font-size: 13.5px; color: var(--text-muted); text-align: center; }
.gemist-pagination { display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; margin-bottom: 20px; }
.gemist-pagination span { font-size: 13.5px; color: var(--text-muted); }

/* Small bottom snackbar, e.g. "Link gekopieerd!" after using a share button. */
.site-toast {
    position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%) translateY(20px);
    background: var(--navy); color: #fff; padding: 12px 20px; border-radius: 999px;
    font-size: 13.5px; font-weight: 600; box-shadow: var(--shadow); z-index: 999;
    opacity: 0; pointer-events: none; transition: opacity .2s ease, transform .2s ease;
}
.site-toast.is-visible { opacity: 1; transform: translateX(-50%) translateY(0); pointer-events: auto; }

/* ══════════════════════════════════════════════════════════════════
   PRIVACY
   ══════════════════════════════════════════════════════════════════ */
.privacy-body { max-width: 760px; }
.privacy-body p { margin: 0 0 18px; line-height: 1.7; color: var(--text-soft, rgba(0,0,0,.75)); }

/* ══════════════════════════════════════════════════════════════════
   DJ'S
   ══════════════════════════════════════════════════════════════════ */
.dj-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; margin-bottom: 36px; }
.dj-card { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 26px 20px; text-align: center; transition: transform .15s ease, box-shadow .15s ease; }
.dj-card:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
.dj-card__avatar {
    width: 76px; height: 76px; border-radius: 50%; margin: 0 auto 16px;
    background: linear-gradient(135deg, var(--primary), var(--navy));
    display: flex; align-items: center; justify-content: center; font-size: 30px;
}
.dj-card__avatar--photo { background: none; object-fit: cover; }
.dj-card h3 { font-size: 16px; margin-bottom: 4px; }
.dj-card p { font-size: 13px; margin: 0; }
.dj-cta { text-align: center; }

/* ══════════════════════════════════════════════════════════════════
   VERZOEKJES
   ══════════════════════════════════════════════════════════════════ */
.verzoek { background: linear-gradient(120deg, var(--primary), var(--navy)); color: #fff; }
.verzoek__inner { display: flex; align-items: center; justify-content: space-between; gap: 30px; flex-wrap: wrap; }
.verzoek h2 { color: #fff; }
.verzoek p { color: rgba(255,255,255,.85); max-width: 480px; margin: 0; }
.verzoek-links { display: flex; flex-wrap: wrap; gap: 12px; max-width: 460px; }
.verzoek .eyebrow--light { color: #fff; }
.verzoek-iframe-wrap { margin-top: 32px; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow); background: #fff; }
.verzoek-iframe-head {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 10px 16px; background: var(--navy); color: #fff; font-size: 13.5px; font-weight: 600;
}
.verzoek-iframe-close {
    background: none; border: none; color: #fff; font-size: 16px; line-height: 1; cursor: pointer;
    padding: 4px 8px; border-radius: 6px;
}
.verzoek-iframe-close:hover { background: rgba(255,255,255,.15); }
.verzoek-iframe-wrap iframe { width: 100%; height: 900px; border: 0; display: block; }

/* ══════════════════════════════════════════════════════════════════
   SPONSORING
   ══════════════════════════════════════════════════════════════════ */
.sponsor-cta { text-align: center; font-size: 14px; }
.sponsor-cta a { color: var(--primary); font-weight: 700; }
.sponsor-intro p { margin: 0 0 18px; line-height: 1.75; font-size: 16px; color: var(--text-soft, rgba(0,0,0,.75)); }
.sponsor-intro p:last-child { margin-bottom: 0; }

/* ══════════════════════════════════════════════════════════════════
   ACADEMY (admin-configurable pricing tiles, Instellingen tab)
   ══════════════════════════════════════════════════════════════════ */
.academy-intro { max-width: 760px; margin: 0 auto 48px; text-align: center; }
.academy-intro p { line-height: 1.75; font-size: 16px; color: var(--text-soft, rgba(0,0,0,.75)); margin: 0 0 16px; }
.academy-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; }
.academy-card { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 28px 24px; display: flex; flex-direction: column; gap: 4px; }
.academy-card h3 { margin: 0; font-size: 19px; }
.academy-card__subtitle { color: var(--text-muted); font-size: 13px; margin: 0 0 6px; }
.academy-card__price { font-size: 24px; font-weight: 800; color: var(--primary); margin: 4px 0 14px; }
.academy-card__bullets { list-style: none; margin: 0 0 20px; padding: 0; display: flex; flex-direction: column; gap: 8px; font-size: 13.5px; }
.academy-card__bullets li { display: flex; align-items: flex-start; gap: 8px; }
.academy-card__bullets li::before { content: "✓"; color: var(--primary); font-weight: 800; flex-shrink: 0; }
.academy-card .btn { margin-top: auto; align-self: flex-start; }

/* ══════════════════════════════════════════════════════════════════
   CONTENT PAGE (steunen.html — long-form static text)
   ══════════════════════════════════════════════════════════════════ */
.content-body { max-width: 720px; margin: 0 auto; }
.content-body p { margin: 0 0 18px; line-height: 1.75; font-size: 16px; color: var(--text-soft, rgba(0,0,0,.75)); }
.content-body h3 { margin: 32px 0 12px; }
.content-body ul { margin: 0 0 18px; padding-left: 20px; line-height: 1.75; color: var(--text-soft, rgba(0,0,0,.75)); }

.news-article { max-width: 760px; margin: 0 auto; }
.news-article__back { display: inline-block; margin-bottom: 20px; font-weight: 600; font-size: 14px; color: var(--text-muted); }
.news-article__back:hover { color: var(--primary); }
.news-article__cat { display: inline-block; font-weight: 700; font-size: 12.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--primary); margin-bottom: 10px; }
.news-article h1 { font-size: clamp(1.8rem, 4vw, 2.6rem); margin-bottom: 10px; }
.news-article__meta { display: block; font-size: 13.5px; color: var(--text-muted); margin-bottom: 24px; }
.news-article__img { width: 100%; max-height: 420px; object-fit: cover; border-radius: var(--radius); margin-bottom: 28px; background: var(--bg-soft); }
.news-article__body p { color: var(--text); font-size: 16px; line-height: 1.75; margin-bottom: 1.2em; }

/* ══════════════════════════════════════════════════════════════════
   APPS / LUISTEREN
   ══════════════════════════════════════════════════════════════════ */
.apps-grid { display: flex; gap: 14px; flex-wrap: wrap; }
.app-chip {
    background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.18);
    padding: 12px 22px; border-radius: 999px; font-weight: 600; font-size: 14px; color: #fff;
    transition: all .15s ease;
}
.app-chip:hover { background: var(--primary); border-color: var(--primary); }

/* ══════════════════════════════════════════════════════════════════
   NEWSLETTER
   ══════════════════════════════════════════════════════════════════ */
.newsletter { display: flex; align-items: center; justify-content: space-between; gap: 30px; flex-wrap: wrap; background: var(--bg-soft); border-radius: var(--radius-lg); padding: 48px; }
.newsletter h2 { max-width: 420px; }
.newsletter p { max-width: 420px; margin: 0; }
.newsletter__form { display: flex; gap: 10px; flex-wrap: wrap; }
.newsletter__form input {
    padding: 13px 18px; border-radius: 999px; border: 1px solid var(--border);
    font-family: inherit; font-size: 14px; min-width: 240px;
}
.newsletter__form input:focus { outline: none; border-color: var(--primary); }

/* ══════════════════════════════════════════════════════════════════
   CONTACT FORM
   ══════════════════════════════════════════════════════════════════ */
.contact-form-wrap { max-width: 640px; margin: 0 auto; }
.contact-form-wrap > div p { color: var(--text-soft, rgba(0,0,0,.65)); margin: 8px 0 0; }
.contact-form { display: flex; flex-direction: column; gap: 16px; margin-top: 24px; }
.contact-form label { display: flex; flex-direction: column; gap: 6px; font-weight: 600; font-size: 14px; }
.contact-form input, .contact-form textarea {
    padding: 12px 16px; border-radius: var(--radius, 10px); border: 1px solid var(--border);
    font-family: inherit; font-size: 14px; background: var(--bg, #fff); color: inherit; resize: vertical;
}
.contact-form input:focus, .contact-form textarea:focus { outline: none; border-color: var(--primary); }
.contact-form button { align-self: flex-start; }
.contact-status { padding: 14px 18px; border-radius: var(--radius, 10px); font-size: 14px; margin: 0 0 8px; }
.contact-status--success { background: rgba(34,197,94,.12); color: #16803c; }
.contact-status--error { background: rgba(220,38,38,.12); color: #b91c1c; }

/* ══════════════════════════════════════════════════════════════════
   FOOTER
   ══════════════════════════════════════════════════════════════════ */
.footer { background: var(--navy); color: #D6D6D6; padding: 64px 0 0; }
.footer__grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 36px; padding-bottom: 48px; border-bottom: 1px solid rgba(255,255,255,.1); }
.footer__brand p { color: #A3A3A3; font-size: 13.5px; max-width: 320px; margin: 14px 0 18px; }
.footer__social { display: flex; gap: 12px; }
.footer__social a { color: #D6D6D6; }
.footer__social a:hover { color: var(--primary); }
.footer__col h4 { color: #fff; font-size: 14px; margin-bottom: 16px; }
.footer__col a, .footer__col span.footer__meta { display: block; font-size: 13.5px; color: #A3A3A3; margin-bottom: 10px; }
.footer__col a:hover { color: var(--primary); }

.footer__bottom { padding: 22px 24px; font-size: 12.5px; color: #8A8A8A; text-align: center; }

/* ══════════════════════════════════════════════════════════════════
   SPONSOR CAROUSEL (used inside the sponsor bar)
   ══════════════════════════════════════════════════════════════════ */
.sponsor-carousel { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.sponsor-carousel__track { display: flex; align-items: center; gap: 48px; width: max-content; animation: sponsor-scroll 32s linear infinite; }
.sponsor-carousel:hover .sponsor-carousel__track { animation-play-state: paused; }
@keyframes sponsor-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
.sponsor-carousel__item { display: flex; align-items: center; justify-content: center; height: 48px; flex-shrink: 0; opacity: .85; transition: opacity .15s ease; }
.sponsor-carousel__item:hover { opacity: 1; }
.sponsor-carousel__item img { max-height: 100%; max-width: 160px; object-fit: contain; }
.sponsor-carousel__fallback { font-size: 13.5px; font-weight: 700; color: #D6D6D6; white-space: nowrap; }

/* ══════════════════════════════════════════════════════════════════
   SPONSOR BAR — fixed to the viewport bottom, hides on scroll-down,
   reappears on scroll-up (see js/main.js). Independent of the footer.
   ══════════════════════════════════════════════════════════════════ */
.sponsor-bar {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
    background: var(--navy); border-top: 1px solid rgba(255,255,255,.12);
    box-shadow: 0 -6px 20px -10px rgba(0,0,0,.35);
    transition: transform .3s ease;
}
.sponsor-bar--hidden { transform: translateY(100%); }
.sponsor-bar__inner { display: flex; align-items: center; gap: 20px; padding: 20px 24px; }
.sponsor-bar__label { flex-shrink: 0; color: #fff; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; }
.sponsor-bar .sponsor-carousel { flex: 1; min-width: 0; }
.sponsor-bar .sponsor-carousel__item { height: 72px; }
.sponsor-bar .sponsor-carousel__item img { max-width: 220px; }

/* ══════════════════════════════════════════════════════════════════
   RESPONSIVE
   ══════════════════════════════════════════════════════════════════ */
@media (max-width: 960px) {
    .news-grid { grid-template-columns: repeat(2, 1fr); }
    .news-card--big { grid-column: span 2; grid-row: span 1; }
    /* Trio teaser reverts to the standard 2-equal-column stack on narrow screens. */
    .news-grid[data-limit="3"] { grid-template-columns: repeat(2, 1fr); }
    .news-grid[data-limit="3"] .news-card--big { grid-column: span 2; grid-row: span 1; }
    .news-grid[data-limit="3"] .news-card:not(.news-card--big) { min-height: 240px; }
    .dj-grid { grid-template-columns: repeat(2, 1fr); }
    .footer__grid { grid-template-columns: 1fr 1fr; }
    .gemist-grid { grid-template-columns: repeat(3, 1fr); }
}

@media (max-width: 760px) {
    :root { --header-h: 64px; --subnav-h: 0px; --player-h: 128px; }
    .topbar__info span:first-child { display: none; }
    /* !important: the admin-configured --logo-h is inlined on <html> and must not win on small screens */
    .nav__logo-img { height: 44px !important; max-width: 180px; }
    .nav__menu { display: none; }
    .nav__toggle { display: flex; }
    .nav__menu.is-open {
        display: flex; flex-direction: column; height: auto; position: fixed;
        top: calc(var(--topbar-h) + var(--header-total-h)); left: 0; right: 0;
        background: #fff; padding: 20px 24px; gap: 16px; border-bottom: 1px solid var(--border);
        box-shadow: var(--shadow); z-index: 54;
    }
    .nav__menu.is-open .nav__link { color: var(--text); }
    .nav__listen { display: none; }
    .player__inner { flex-wrap: wrap; }
    .player__meta { order: 2; flex: 1 1 auto; margin-right: 0; }
    .player__live { order: 3; }
    .player__volume { order: 4; }
    .player__request { order: 5; margin-left: auto; }
    .gemist-grid { grid-template-columns: repeat(2, 1fr); }
    .dj-grid { grid-template-columns: 1fr 1fr; }
    .verzoek__inner, .newsletter { flex-direction: column; align-items: flex-start; }
    .newsletter { padding: 32px 24px; }
    .hitlijsten-frame iframe { height: 520px; }
    .verzoek-iframe-wrap iframe { height: 640px; }
    .sponsor-bar__label { display: none; }
}
