/* ==========================================================================
   RTV4 — basisstijl (1-op-1 overgenomen van de RTV4 Radioplayer)
   ========================================================================== */
:root{
  --rtv4:#ee20a7;
  --ink:#180f1e;
  --ink-2:#4d4358;
  --ink-3:#8a8195;
  --paper:#f5f2f8;
  --card:#ffffff;
  --line:rgba(24,15,30,.10);
  --line-2:rgba(24,15,30,.06);
  --bar-h:80px;
  --r-lg:24px;
  --r-md:16px;
  --r-sm:12px;
  --shadow-card:0 1px 2px rgba(24,15,30,.04), 0 12px 32px -22px rgba(24,15,30,.45);
  --shadow-lift:0 2px 6px rgba(24,15,30,.05), 0 26px 50px -26px rgba(24,15,30,.45);
  --display:"Barlow",system-ui,-apple-system,"Segoe UI",sans-serif;
  --body:"Barlow",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:"Barlow",system-ui,-apple-system,"Segoe UI",sans-serif;

  /* Compatibiliteitsaliassen voor inline styles elders in de views */
  --rtv4-muted: var(--ink-2);
  --rtv4-pink-dim: rgba(238,32,167,.16);
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  font-family:var(--body);
  color:var(--ink);
  background:
    radial-gradient(900px 520px at 50% -140px, rgba(238,32,167,.20), transparent 62%),
    radial-gradient(700px 420px at 100% 8%, rgba(42,59,216,.10), transparent 60%),
    linear-gradient(180deg,#fbfaFC 0%, var(--paper) 100%);
  background-attachment:fixed;
  min-height:100dvh;
}
body.player-open{overflow:hidden}
img{display:block;max-width:100%}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid var(--rtv4);outline-offset:3px;border-radius:6px}

/* ---------- Header ---------- */
.site{
  position:sticky;top:0;z-index:30;
  display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:12px;
  padding:14px clamp(16px,4vw,40px);
  background:rgba(251,250,252,.82);
  backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line-2);
}
.brand{grid-column:2;display:flex;align-items:center;gap:12px;min-width:0;justify-self:center}
.brand img{height:26px;width:auto}
.brand span{
  font-family:var(--display);font-weight:700;font-size:15px;letter-spacing:-.01em;
  padding-left:12px;border-left:1px solid var(--line);color:var(--ink-2);
}
.headerRight{grid-column:3;display:flex;align-items:center;gap:8px;justify-self:end}
.clock{
  display:flex;align-items:center;gap:8px;
  font-family:var(--mono);font-size:13px;font-weight:500;color:var(--ink-2);
  font-variant-numeric:tabular-nums;
  background:var(--card);border:1px solid var(--line);
  padding:7px 12px;border-radius:999px;
}
.live-dot{width:7px;height:7px;border-radius:50%;background:var(--rtv4);position:relative}
.live-dot::after{
  content:"";position:absolute;inset:-4px;border-radius:50%;
  border:1px solid var(--rtv4);opacity:.5;animation:pulse 2.4s ease-out infinite;
}
@keyframes pulse{0%{transform:scale(.6);opacity:.6}100%{transform:scale(1.5);opacity:0}}
@media (max-width:560px){ .clock{display:none} }
.iconBtn{
  width:38px;height:38px;border-radius:50%;
  display:grid;place-items:center;
  background:var(--card);border:1px solid var(--line);color:var(--ink-2);
  transition:transform .15s ease, color .15s ease, border-color .15s ease;
}
.iconBtn:hover{color:var(--rtv4);border-color:rgba(238,32,167,.4)}
.iconBtn:active{transform:scale(.94)}

/* ---------- Intro ---------- */
main{max-width:900px;margin:0 auto;padding:clamp(28px,6vw,56px) clamp(16px,4vw,24px) 40px}
.intro{text-align:center;margin-bottom:clamp(24px,4vw,36px)}
.eyebrow{
  font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--rtv4);margin:0 0 10px;
}
.intro h1{
  font-family:var(--display);font-weight:900;letter-spacing:-.025em;line-height:1.02;
  font-size:clamp(36px,7.4vw,60px);margin:0;
}
.intro p{margin:12px auto 0;max-width:38ch;color:var(--ink-2);font-size:15px;line-height:1.55}

/* ---------- Zenders 2x2 (basisstijl radioplayer) ---------- */
.grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:clamp(14px,2.2vw,20px);
  align-items:stretch;
}
@media (max-width:660px){ .grid{grid-template-columns:minmax(0,1fr)} }

.card{
  --st:var(--rtv4);
  position:relative;display:flex;flex-direction:column;gap:14px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:18px 18px 16px;box-shadow:var(--shadow-card);
  transition:box-shadow .25s ease, transform .25s ease, border-color .25s ease;
}
.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lift)}
.card::before{
  content:"";position:absolute;left:18px;right:18px;top:0;height:3px;border-radius:0 0 3px 3px;
  background:var(--st);opacity:.85;
}
.card.is-active{border-color:color-mix(in srgb, var(--st) 45%, transparent)}
.card.is-active::after{
  content:"";position:absolute;inset:-1px;border-radius:var(--r-lg);pointer-events:none;
  box-shadow:0 0 0 3px color-mix(in srgb, var(--st) 16%, transparent);
}

.cardTop{display:flex;gap:13px;align-items:flex-start}
.logoTile{
  width:54px;height:54px;flex:0 0 auto;border-radius:15px;
  display:grid;place-items:center;padding:8px;
  background:color-mix(in srgb, var(--st) 9%, #fff);
  border:1px solid color-mix(in srgb, var(--st) 18%, transparent);
}
.logoTile img{width:100%;height:100%;object-fit:contain}
.cardHead{min-width:0;flex:1}
.stationName{
  font-family:var(--display);font-weight:800;font-size:20px;letter-spacing:-.015em;
  line-height:1.15;margin:1px 0 0;
}
.freq{
  font-family:var(--mono);font-size:12.5px;font-weight:500;color:var(--ink-2);
  margin-top:4px;letter-spacing:.01em;font-variant-numeric:tabular-nums;
}
.note{font-size:11px;color:var(--ink-3);margin-top:3px}
.desc{font-size:13px;color:var(--ink-2);margin:0}

.np{
  display:flex;align-items:center;gap:11px;
  background:#faf8fb;border:1px solid var(--line-2);border-radius:var(--r-md);
  padding:10px;min-height:66px;margin-top:auto;
}
.npCover{
  width:44px;height:44px;flex:0 0 auto;border-radius:10px;overflow:hidden;
  background:color-mix(in srgb, var(--st) 8%, #fff);
  display:grid;place-items:center;
}
.npCover img{width:100%;height:100%;object-fit:cover}
.npCover img.is-logo{object-fit:contain;padding:7px}
.npText{min-width:0;flex:1}
.npLabel{
  display:block;
  font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:2px;
}
.npTrack{display:block;font-size:13.5px;font-weight:600;line-height:1.3}
.npArtist{display:block;font-size:12px;line-height:1.3;color:var(--ink-2)}

.eq{display:none;align-items:flex-end;gap:2.5px;height:16px;flex:0 0 auto;padding-right:2px}
.card.is-playing .eq{display:flex}
.eq i{width:2.5px;border-radius:2px;background:var(--st);height:5px;animation:eq .9s ease-in-out infinite}
.eq i:nth-child(2){animation-delay:.18s;height:12px}
.eq i:nth-child(3){animation-delay:.36s;height:8px}
.eq i:nth-child(4){animation-delay:.54s;height:14px}
@keyframes eq{0%,100%{transform:scaleY(.35)}50%{transform:scaleY(1)}}
.eq i{transform-origin:bottom}

.playBtn{
  display:flex;align-items:center;justify-content:center;gap:9px;
  width:100%;padding:12px 16px;border-radius:999px;
  background:var(--st);color:#fff;font-weight:600;font-size:14.5px;
  transition:filter .15s ease, transform .12s ease;
}
.playBtn:hover{filter:brightness(1.08)}
.playBtn:active{transform:scale(.985)}
.playBtn svg{flex:0 0 auto}

.pageFoot{
  text-align:center;margin:40px auto 0;font-size:12.5px;color:var(--ink-3);
  font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;font-weight:500;
}
.pageFoot a{color:var(--ink-2);text-decoration:none;border-bottom:1px solid rgba(24,15,30,.18)}
.pageFoot a:hover{color:var(--rtv4);border-bottom-color:var(--rtv4)}

.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important}
}

/* ==========================================================================
   RTV4 Stemtool — eigen onderdelen (stemflow, formulieren, beheerpaneel)
   Zelfde ontwerptaal (tokens, kaarten, ronde knoppen) als hierboven, maar met
   eigen klassen zodat de stemtool-specifieke onderdelen niet botsen met de
   radioplayer-klassen (.card, .grid, etc. hierboven).
   ========================================================================== */
.rtv4-container {
    max-width: 960px;
    margin: 0 auto;
    padding: 24px 20px 120px;
}

a { color: var(--rtv4); text-decoration: none; }

/* ---------- Hero / intro (stemtool) ---------- */
.rtv4-hero {
    text-align: center;
    padding: clamp(20px, 4vw, 32px) 4px clamp(24px, 4vw, 36px);
    margin-bottom: 8px;
}
.rtv4-hero .eyebrow { margin: 0 0 10px; }
.rtv4-hero h1 {
    font-family: var(--display);
    font-weight: 900;
    letter-spacing: -.025em;
    line-height: 1.03;
    font-size: clamp(30px, 6.4vw, 48px);
    margin: 0;
    color: var(--ink);
}
.rtv4-hero p.subtitle {
    margin: 12px auto 0;
    max-width: 42ch;
    color: var(--ink-2);
    font-size: 16px;
    line-height: 1.55;
}
.rtv4-hero .meta {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 10px;
    margin-top: 18px;
    font-size: 13px;
    color: var(--ink-2);
}

/* ---------- Kaarten (stemtool) ---------- */
.rtv4-card {
    position: relative;
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: var(--r-lg);
    padding: 22px;
    margin-bottom: 18px;
    box-shadow: var(--shadow-card);
    transition: box-shadow .25s ease, transform .25s ease;
}
.rtv4-card h2 {
    font-family: var(--display);
    font-weight: 800;
    letter-spacing: -.01em;
    font-size: 19px;
    margin: 0 0 12px;
    color: var(--ink);
}
.rtv4-card h3 {
    font-family: var(--display);
    font-weight: 700;
    font-size: 15px;
    margin: 18px 0 10px;
    color: var(--ink);
}

/* ---------- Badges (pilvorm) ---------- */
.rtv4-badge {
    display: inline-block;
    padding: 5px 13px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 600;
    background: rgba(238, 32, 167, .16);
    color: var(--rtv4);
    border: 1px solid rgba(238, 32, 167, .28);
}

/* ---------- Knoppen ---------- */
.rtv4-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    font-family: var(--display);
    font-weight: 600;
    font-size: 15px;
    padding: 13px 22px;
    min-height: 44px;
    border-radius: 999px;
    border: none;
    cursor: pointer;
    background: var(--rtv4);
    color: #fff;
    transition: filter .15s ease, transform .12s ease;
}
.rtv4-btn:hover { filter: brightness(1.08); }
.rtv4-btn:active { transform: scale(.98); }
.rtv4-btn:disabled { opacity: 0.45; cursor: not-allowed; filter: none; }
.rtv4-btn.secondary {
    background: var(--card);
    color: var(--ink);
    border: 1px solid var(--line);
}
.rtv4-btn.secondary:hover { border-color: rgba(238, 32, 167, .4); color: var(--rtv4); filter: none; }
.rtv4-btn.ghost {
    background: transparent;
    color: var(--rtv4);
    padding: 8px 14px;
    min-height: unset;
}
.rtv4-btn.ghost:hover { background: rgba(238, 32, 167, .16); filter: none; }
.rtv4-btn.danger { color: #c2186f; }
.rtv4-btn.danger:hover { background: rgba(194, 24, 111, .12); }

/* ---------- Stappenindicator ---------- */
.rtv4-steps {
    display: flex;
    gap: 8px;
    list-style: none;
    padding: 0;
    margin: 0 0 24px;
}
.rtv4-steps li {
    flex: 1;
    text-align: center;
    padding: 11px 6px;
    border-radius: 999px;
    background: var(--card);
    border: 1px solid var(--line);
    font-size: 12.5px;
    color: var(--ink-3);
    font-family: var(--display);
    font-weight: 600;
    box-shadow: var(--shadow-card);
}
.rtv4-steps li[aria-current="step"] {
    background: var(--rtv4);
    color: #fff;
    border-color: var(--rtv4);
}

/* ---------- Formuliervelden ---------- */
label {
    display: block;
    font-family: var(--display);
    font-weight: 600;
    margin-bottom: 6px;
    font-size: 13.5px;
    color: var(--ink);
}
input[type=text], input[type=email], input[type=tel], input[type=number],
input[type=search], input[type=password], input[type=datetime-local], input[type=date],
textarea, select {
    width: 100%;
    padding: 12px 14px;
    border-radius: var(--r-sm);
    border: 1px solid var(--line);
    background: var(--paper);
    color: var(--ink);
    font-size: 15px;
    font-family: var(--body);
    margin-bottom: 14px;
}
input:focus, textarea:focus, select:focus { background: var(--card); }
.field-error { color: #c2186f; font-size: 13px; margin-top: -10px; margin-bottom: 12px; }
.checkbox-row { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 14px; }
.checkbox-row input { width: 20px; height: 20px; min-width: 44px; min-height: 24px; margin-top: 2px; accent-color: var(--rtv4); }
.checkbox-row label { font-weight: 400; margin: 0; color: var(--ink-2); }

/* ---------- Nummer-resultaten ---------- */
.track-result {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 12px;
    border-radius: var(--r-md);
    border: 1px solid var(--line);
    margin-bottom: 10px;
    background: var(--card);
    box-shadow: var(--shadow-card);
}
.track-result img, .track-cover-fallback {
    width: 54px; height: 54px; border-radius: 13px; object-fit: cover;
    background: rgba(238, 32, 167, .12);
    border: 1px solid rgba(238, 32, 167, .18);
    flex-shrink: 0;
}
.track-info { flex: 1; min-width: 0; }
.track-info .artist { font-weight: 700; font-family: var(--display); }
.track-info .title { color: var(--ink-2); font-size: 14px; }

/* ---------- Mobiele navigatiebalk (donker, zoals de speler-balk) ---------- */
.rtv4-mobile-nav {
    position: fixed;
    bottom: 0; left: 0; right: 0;
    background: var(--ink);
    box-shadow: 0 -18px 44px -28px rgba(24, 15, 30, .85);
    display: flex;
    gap: 10px;
    padding: 12px 14px calc(12px + env(safe-area-inset-bottom));
    z-index: 50;
}
.rtv4-mobile-nav::before {
    content: "";
    position: absolute;
    left: 0; right: 0; top: 0;
    height: 3px;
    background: var(--rtv4);
}
.rtv4-mobile-nav .rtv4-btn { flex: 1; }
.rtv4-mobile-nav .rtv4-btn.secondary { background: rgba(255,255,255,.08); color: #fff; border-color: rgba(255,255,255,.14); }

@media (min-width: 800px) {
    .rtv4-mobile-nav { display: none; }
}

/* ---------- Meldingen ---------- */
.rtv4-alert {
    padding: 14px 16px;
    border-radius: var(--r-md);
    border: 1px solid var(--line);
    margin-bottom: 16px;
    background: var(--card);
    box-shadow: var(--shadow-card);
}
.rtv4-alert.info { border-color: rgba(42, 59, 216, .3); background: rgba(42, 59, 216, .06); }
.rtv4-alert.warning { border-color: rgba(238, 32, 167, .35); background: rgba(238, 32, 167, .1); color: #9c1370; }
.rtv4-alert.success { border-color: rgba(24, 170, 110, .35); background: rgba(24, 170, 110, .08); color: #0f7a4f; }

.rtv4-footer { text-align: center; color: var(--ink-3); font-size: 12.5px; padding: 30px 0; letter-spacing: .05em; }

table.rtv4-table { width: 100%; border-collapse: collapse; font-size: 14px; }
table.rtv4-table th, table.rtv4-table td { padding: 10px 12px; border-bottom: 1px solid var(--line-2); text-align: left; }
table.rtv4-table th { color: var(--ink-3); font-family: var(--display); font-weight: 600; font-size: 12.5px; text-transform: uppercase; letter-spacing: .04em; }

/* ---------- Beheerpaneel ---------- */
.admin-shell { display: flex; min-height: 100vh; }
.admin-sidebar {
    width: 240px;
    background: var(--card);
    border-right: 1px solid var(--line);
    padding: 20px;
}
.admin-sidebar a {
    display: block;
    padding: 10px 14px;
    border-radius: 999px;
    color: var(--ink-2);
    margin-bottom: 4px;
    font-weight: 600;
    font-size: 14px;
}
.admin-sidebar a:hover, .admin-sidebar a.active { background: rgba(238, 32, 167, .16); color: var(--rtv4); }
.admin-content { flex: 1; padding: 30px; max-width: 1200px; background: var(--paper); }
.admin-stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 16px; margin-bottom: 24px; }
.admin-stat { background: var(--card); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 18px; box-shadow: var(--shadow-card); }
.admin-stat .value { font-size: 28px; font-weight: 800; font-family: var(--display); color: var(--ink); }
.admin-stat .label { color: var(--ink-2); font-size: 13px; }
