/* Felles for index.html og pameldte.html: tokens, header, footer, kort, spiller, laste- og feiltilstander.
   Stemming (knapper, lommebok, Vipps-dialog) kommer i plan 2. */
:root{
  --bg:oklch(97.2% .004 260); --surface:oklch(99.5% .002 260); --sunk:oklch(94.5% .006 260);
  --ink:oklch(18% .014 260); --ink-2:oklch(32% .014 260); --muted:oklch(50% .012 260);
  --line:oklch(88% .008 260); --line-2:oklch(80% .01 260); --field:oklch(65% .01 260);
  --player:#121212; --vipps:#ff5b24; --ok:oklch(52% .13 150); --bad:oklch(50% .19 25);
  --r:14px; --r-sm:10px;
  --out:cubic-bezier(.16,1,.3,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;scroll-behavior:smooth;scroll-padding-top:72px;scrollbar-color:var(--line-2) var(--bg);accent-color:var(--ink)}
body{font-family:"Inter Tight",system-ui,sans-serif;font-size:16px;line-height:1.55;letter-spacing:-.01em;background:var(--bg);caret-color:var(--ink);overflow-x:clip}
::selection{background:var(--ink);color:var(--surface)}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid var(--ink);outline-offset:3px;border-radius:6px}
[hidden]{display:none!important}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
img{display:block}
.wrap{max-width:1200px;margin:0 auto;padding:0 20px}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--muted)}
svg.i{width:18px;height:18px;flex:none;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

.top{position:sticky;top:0;z-index:30;background:var(--bg);border-bottom:1px solid var(--line)}
.top .wrap{height:60px;display:flex;align-items:center;gap:28px}
.wm{font-weight:700;letter-spacing:-.03em;font-size:17px;white-space:nowrap}
.top nav{display:flex;gap:22px;font-size:15px;color:var(--ink-2)}
.top nav a{position:relative}
.top nav a[aria-current]{color:var(--ink)}
.top nav a::after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:1.5px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .3s var(--out)}
.top nav a[aria-current]::after{transform:scaleX(1)}
.top .btn{margin-left:auto}
.btn{height:44px;padding:0 18px;border-radius:var(--r-sm);display:inline-flex;align-items:center;justify-content:center;gap:8px;font-weight:600;font-size:15px;white-space:nowrap;transition:background .15s,transform .12s}
.btn:active{transform:scale(.98)}
.btn.dark{background:var(--ink);color:var(--surface)}
.btn.dark:hover{background:var(--ink-2)}
.btn.out{border:1px solid var(--ink)}
.btn.out:hover{background:var(--ink);color:var(--surface)}
.ar{transition:transform .25s var(--out)}

.sec-h{display:flex;justify-content:space-between;align-items:end;gap:20px;flex-wrap:wrap;margin-bottom:20px}
.sec-h h2,.sec-h h1{font-weight:600;font-size:clamp(34px,4.6vw,56px);line-height:1;letter-spacing:-.03em}
.sec-h p{font-size:17px;color:var(--muted);margin-top:10px;max-width:52ch}
.sec-h p a{color:var(--ink-2);text-decoration:underline;text-underline-offset:3px}

/* ---- søk ---- */
.ctrl{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 0;margin-bottom:20px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.ctrl:empty,.ctrl:not(:has(> :not([hidden]))){display:none}
.search{height:44px;width:min(320px,100%);border-radius:var(--r-sm);border:1px solid var(--field);background:var(--surface);padding:0 14px;font:inherit;font-size:16px;color:var(--ink)}
.search:focus{outline:none;border-color:var(--ink)}

/* ---- cards: one per snekk ---- */
.cards{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.card{position:relative;display:grid;gap:14px;align-content:start;padding:16px;background:var(--surface);border:1px solid var(--line);border-radius:16px;scroll-margin-top:80px;transition:border-color .2s}
.c-head{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 10px;align-items:baseline}
.c-rk{font-weight:600;font-size:15px;color:var(--muted)}
.card.top .c-rk{color:var(--ink)}
.c-head h3{font-weight:700;font-size:22px;line-height:1.15;letter-spacing:-.025em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.c-head p{grid-column:2;font-size:14px;color:var(--muted)}

/* the player block has the same height as Spotify's embed, so nothing jumps when it loads */
.player{position:relative;height:152px;border-radius:12px;background:var(--player);color:#fff;display:grid;grid-template-columns:128px minmax(0,1fr);gap:14px;padding:12px;overflow:hidden}
.player .cv{width:128px;height:128px;border-radius:8px;object-fit:cover;background:#2a2a2a;transition:transform .5s var(--out)}
.pi{min-width:0;display:grid;align-content:start;gap:2px;padding:4px 40px 0 0}
.pi b{font-weight:700;font-size:16px;line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pi span{font-size:14px;color:rgba(255,255,255,.7);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp-logo{position:absolute;top:4px;right:4px;width:44px;height:44px;display:grid;place-items:center;color:#fff;border-radius:50%;transition:color .2s}
.sp-logo svg{width:26px;height:26px;fill:currentColor}
.pp{position:absolute;right:12px;bottom:12px;width:44px;height:44px;border-radius:50%;background:#fff;color:var(--player);display:grid;place-items:center;transition:transform .15s var(--out)}
.pp svg{width:18px;height:18px;fill:currentColor;stroke:none;margin-left:2px}
.pp:active{transform:scale(.92)}
.pp:focus-visible,.sp-logo:focus-visible{outline-color:#fff}
.player.live{display:block;padding:0;background:none}
.player iframe{display:block;width:100%;height:152px;border:0;border-radius:12px}
.player.ask{grid-template-columns:1fr;align-content:center;gap:10px;padding:16px 18px}
.player.ask p{font-size:14px;line-height:1.4;color:rgba(255,255,255,.85);max-width:34ch}
.player.ask p a{text-decoration:underline;text-underline-offset:3px}
.player.ask .acts{display:flex;gap:8px;align-items:center}
.player.ask .acts button{height:40px;padding:0 14px;border-radius:8px;font-weight:600;font-size:14px}
.player.ask [data-sp-ok]{background:#fff;color:var(--player)}
.player.ask [data-sp-no]{color:rgba(255,255,255,.7)}

.c-foot{display:flex;align-items:center;gap:8px;min-height:44px}
.share{height:44px;min-width:44px;padding:0 12px;border-radius:var(--r-sm);border:1px solid var(--line-2);display:inline-flex;align-items:center;justify-content:center;gap:8px;font-weight:600;font-size:14px;color:var(--ink-2)}
.share.wide{margin-right:auto}
.share svg.i{width:17px;height:17px}
.card.flash{animation:flash 1.6s var(--out)}
@keyframes flash{0%{background-color:oklch(92% .03 150);border-color:var(--ok)}100%{background-color:var(--surface)}}

.more{display:flex;justify-content:center;margin-top:24px}
.empty{padding:28px 0;color:var(--muted)}

footer{margin-top:96px;border-top:1px solid var(--line)}
footer .wrap{padding:28px 20px 48px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:14px;color:var(--muted)}
footer nav{display:flex;flex-wrap:wrap;gap:8px 18px}


@media (hover:hover) and (pointer:fine){
  .btn:hover .ar{transform:translateX(4px)}
  .top nav a:hover{color:var(--ink)}
  .top nav a:hover::after{transform:scaleX(1)}
  .card:hover{border-color:var(--line-2)}
  .card:hover .player .cv{transform:scale(1.04)}
  .sp-logo:hover{color:#1ed760}
  .pp:hover{transform:scale(1.08)}
  .share:hover{border-color:var(--ink);color:var(--ink)}
}
@media (hover:none){
  .btn,.share,.pp,.sp-logo{-webkit-tap-highlight-color:transparent}
  .share:active{transform:scale(.96)}
}
@media (max-width:1000px){.cards{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:860px){
  .top nav{display:none}
  .top .btn{padding:0 14px;font-size:14px}
  .ctrl{gap:8px}.search{width:100%}
}
@media (max-width:640px){
  .cards{grid-template-columns:1fr;gap:12px}
  .card{padding:14px}
  .player{gap:12px}
}
@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms!important;animation-duration:.01ms!important;scroll-behavior:auto!important}.card.flash{animation-duration:1.6s!important}}

/* ---- loading and error states ---- */
.spin{display:inline-block;width:14px;height:14px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .7s linear infinite;flex:none}
@keyframes spin{to{transform:rotate(360deg)}}
.state{display:grid;justify-items:start;gap:12px;padding:24px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}
.state p{font-size:16px;color:var(--ink-2);max-width:48ch}
.state.err{border-color:oklch(85% .05 25)}
.cv-x{width:128px;height:128px;border-radius:8px;background:#2a2a2a;display:grid;place-items:center;color:rgba(255,255,255,.5)}
.cv-x svg.i{width:32px;height:32px}
/* skeleton: same shape as a card, so nothing jumps when the real ones arrive */
.card.sk{pointer-events:none}
.sk-l{display:block;height:16px;border-radius:6px;background:var(--sunk)}
.sk-l.sm{height:12px;margin-top:8px}
.card.sk .c-head{display:block}
.card.sk .player{background:var(--sunk)}
.card.sk .player .pi .sk-l{background:oklch(90% .006 260)}
.sk-c{width:128px;height:128px;border-radius:8px;background:oklch(90% .006 260)}
.card.sk .c-foot .sk-l{height:14px}
.card.sk{animation:sk 1.4s ease-in-out infinite}
@keyframes sk{50%{opacity:.55}}
/* page-wide fallback when the page itself fails to start */
.fatal{position:fixed;inset:0;z-index:100;background:var(--bg,#f6f6f7);display:grid;place-items:center;padding:24px;font-family:"Inter Tight",system-ui,sans-serif}
.fatal div{max-width:420px;display:grid;gap:12px;justify-items:start}
.fatal h1{font-size:28px;font-weight:700;letter-spacing:-.02em}
.fatal p{color:var(--muted,#666)}
.toast{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);z-index:90;background:var(--ink);color:var(--surface);padding:10px 14px;border-radius:10px;font-size:14px;font-weight:600;display:flex;gap:12px;align-items:center;max-width:calc(100% - 32px)}
.toast button{color:var(--surface);text-decoration:underline;font-weight:600}
@media (prefers-reduced-motion:reduce){.spin{animation-duration:1.6s!important}.card.sk{animation:none}}

/* ---- uten plassering før stemmingen åpner ---- */
.c-head.norank{grid-template-columns:minmax(0,1fr)}
.c-head.norank p{grid-column:1}
/* skjelett-bredder (CSP tillater ikke style-attributter) */
.w30{width:30%}.w40{width:40%}.w50{width:50%}.w55{width:55%}.w80{width:80%}
