/* STIKLET web player · World (experimental): the globe page (js/world.js).
   Uses the player's colour system: --pw the pale tint, --pd the deep colour, --pm the light, --display and --body. */
#player .wrap.page.world{max-width:none;margin:0;padding:0}
#player .w{--wpw:var(--pw,#D8C5FF);--wpd:var(--pd,#2A1452);--wglass:rgba(255,255,255,.06);--wline:rgba(255,255,255,.1);
  position:relative;display:grid;grid-template-columns:minmax(0,1fr) clamp(320px,26vw,400px);height:var(--wh,100vh);min-height:520px;color:var(--text)}
#player .w [hidden]{display:none!important}
#player .w-stage{position:relative;min-width:0;overflow:hidden;isolation:isolate}
#player .w-gl{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none}
#player .w-cv{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none;cursor:grab;outline:none;-webkit-tap-highlight-color:transparent}
#player .w-cv:active{cursor:grabbing}
#player .w-cv:focus-visible{box-shadow:inset 0 0 0 2px var(--wpw)}
#player .w-stage::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;
  background:linear-gradient(180deg,rgba(0,0,0,.18),transparent 28%,transparent 72%,rgba(0,0,0,.22))}

/* headline, top left */
#player .w-head{position:absolute;z-index:2;left:clamp(20px,3vw,40px);top:clamp(20px,3.4vh,36px);max-width:min(520px,60%);pointer-events:none}
#player .w-kick{margin:0 0 6px;display:flex;align-items:center;gap:10px;font-size:11.5px;font-weight:800;letter-spacing:.2em;text-transform:uppercase;color:color-mix(in srgb,var(--wpw) 70%,transparent)}
#player .w-lab{padding:3px 8px;border-radius:999px;background:var(--wpw);color:var(--ink,#140C22);letter-spacing:.12em;font-size:10.5px}
#player .w-title{margin:0;font-family:var(--display);font-weight:700;font-size:clamp(48px,6.4vw,104px);line-height:.92;letter-spacing:-.03em;color:var(--wpw)}
#player .w-sub{margin:12px 0 0;max-width:34ch;font-size:14.5px;line-height:1.45;color:color-mix(in srgb,var(--text) 82%,transparent)}

/* controls, bottom left */
#player .w-ctrls{position:absolute;z-index:3;left:clamp(20px,3vw,40px);right:clamp(20px,3vw,40px);bottom:clamp(18px,3vh,32px);display:flex;flex-direction:column;align-items:flex-start;gap:12px;pointer-events:none}
#player .w-ctrls>*{pointer-events:auto}
#player .w-zones{display:flex;flex-wrap:wrap;gap:8px}
#player .w-zones button{height:36px;padding:0 15px;border-radius:999px;background:rgba(10,6,18,.42);box-shadow:inset 0 0 0 1px var(--wline);font-size:13.5px;font-weight:700;color:var(--soft);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:background .2s,color .2s,transform .2s}
#player .w-zones button:hover{background:rgba(255,255,255,.12);color:var(--text)}
#player .w-zones button:active{transform:scale(.96)}
#player .w-zb{display:flex;align-items:center;gap:10px}
#player .w-spin{display:inline-flex;align-items:center;gap:9px;height:46px;padding:0 20px 0 16px;border-radius:999px;background:var(--wpw);color:var(--ink,#140C22);font-weight:800;font-size:14.5px;
  box-shadow:0 10px 30px color-mix(in srgb,var(--wpw) 28%,transparent);transition:transform .25s cubic-bezier(.3,1.5,.4,1),box-shadow .25s}
#player .w-spin:hover{transform:translateY(-1px);box-shadow:0 14px 36px color-mix(in srgb,var(--wpw) 38%,transparent)}
#player .w-spin:active{transform:scale(.97)}
#player .w-zoom{display:inline-flex;border-radius:999px;background:rgba(10,6,18,.42);box-shadow:inset 0 0 0 1px var(--wline);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
#player .w-zoom button{width:46px;height:46px;font-size:22px;font-weight:600;line-height:1;color:var(--text);border-radius:999px}
#player .w-zoom button:hover{background:rgba(255,255,255,.1)}

/* hover label and the station card */
#player .w-tip{position:absolute;z-index:4;left:0;top:0;padding:6px 11px;border-radius:10px;background:rgba(10,6,18,.78);box-shadow:inset 0 0 0 1px var(--wline);
  font-size:12.5px;font-weight:700;white-space:nowrap;pointer-events:none;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
#player .w-card{--wc:var(--wpw);position:absolute;z-index:5;left:0;top:0;width:290px;padding:16px 16px 14px;border-radius:20px;
  background:linear-gradient(160deg,color-mix(in srgb,var(--wc) 22%,rgba(16,10,26,.9)),rgba(16,10,26,.9));box-shadow:inset 0 0 0 1px rgba(255,255,255,.12),0 24px 60px rgba(0,0,0,.45);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);transition:opacity .25s;will-change:transform}
#player .w-card.away{opacity:0;pointer-events:none}
#player .w-ck{margin:0 0 6px;font-size:11px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:color-mix(in srgb,var(--wc) 75%,#fff)}
#player .w-cn{display:block;font-family:var(--display);font-weight:700;font-size:19px;line-height:1.15;letter-spacing:-.01em;overflow-wrap:anywhere}
#player .w-cp{display:block;margin-top:4px;font-size:13px;color:var(--muted)}
#player .w-cb{display:flex;align-items:center;gap:6px;margin-top:14px}
#player .w-play{display:inline-flex;align-items:center;gap:8px;height:42px;padding:0 18px 0 14px;margin-right:auto;border-radius:999px;background:var(--wpw);color:var(--ink,#140C22);font-weight:800;font-size:14px}
#player .w-play:active{transform:scale(.97)}
#player .w-ib{width:40px;height:40px;display:inline-grid;place-items:center;border-radius:999px;color:var(--soft);flex:none}
#player .w-ib:hover{background:rgba(255,255,255,.1);color:var(--text)}
#player .w-ib[aria-pressed=true]{color:var(--wpw)}

/* the list */
#player .w-panel{position:relative;z-index:2;display:flex;flex-direction:column;min-height:0;padding:22px 18px 14px;border-left:1px solid var(--wline);
  background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.01))}
#player .w-find{position:relative;display:flex;align-items:center;gap:10px;height:46px;padding:0 14px;border-radius:14px;background:var(--wglass);box-shadow:inset 0 0 0 1px var(--wline);color:var(--muted)}
#player .w-find:focus-within{box-shadow:inset 0 0 0 2px var(--wpw)}
#player .w-find input{flex:1;min-width:0;height:100%;border:0;outline:0;background:none;color:var(--text);font:inherit;font-size:15px}
#player .w-find input::placeholder{color:var(--dim)}
#player .w-find input::-webkit-search-cancel-button{display:none}
#player .w-sug{position:absolute;z-index:6;left:0;right:0;top:52px;padding:6px;border-radius:16px;background:#120B1E;box-shadow:inset 0 0 0 1px var(--wline),0 18px 40px rgba(0,0,0,.45)}
#player .w-sug button{display:flex;align-items:baseline;justify-content:space-between;gap:12px;width:100%;padding:10px 12px;border-radius:10px;text-align:left}
#player .w-sug button:hover,#player .w-sug button:focus-visible{background:rgba(255,255,255,.08);outline:none}
#player .w-sug b{font-weight:700;font-size:14.5px}
#player .w-sug small{font-size:12px;color:var(--muted)}
#player .w-ph{display:flex;align-items:center;gap:6px;margin:20px 0 10px;min-height:44px}
#player .w-ph [data-w=back]{margin-left:-8px}
#player .w-ph>span{min-width:0}
#player .w-pt{display:block;font-family:var(--display);font-weight:700;font-size:20px;letter-spacing:-.01em;line-height:1.15}
#player .w-pc{display:block;margin-top:3px;font-size:12.5px;color:var(--muted)}
#player .w-list{flex:1;min-height:0;overflow-y:auto;margin:0 -8px;padding:0 8px 8px;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.18) transparent}
#player .w-row{display:flex;align-items:center;border-radius:14px;transition:background .2s}
#player .w-row:hover{background:rgba(255,255,255,.06)}
#player .w-row.on{background:color-mix(in srgb,var(--wpw) 12%,transparent)}
#player .w-rh{flex:1;min-width:0;display:flex;align-items:center;gap:12px;padding:10px 6px 10px 10px;text-align:left}
#player .w-dot{--wc:#fff;flex:none;width:10px;height:10px;border-radius:50%;background:var(--wc);box-shadow:0 0 12px var(--wc),0 0 3px #fff inset}
#player .w-rt{flex:1;min-width:0}
#player .w-rt b{display:block;font-weight:700;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#player .w-rt small{display:block;margin-top:2px;font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#player .w-row .eq{flex:none}
#player .w-empty{margin:18px 6px;font-size:14px;line-height:1.5;color:var(--muted)}
#player .w-src{margin:10px 2px 0;font-size:11.5px;color:var(--dim)}
#player .w-src a{color:var(--muted)}

/* phone and tablet: the globe on top, the list under it */
@media (max-width:999px){
  #player .w{display:block;height:auto;min-height:0}
  #player .w-stage{height:max(440px,calc(var(--wh,100vh) * .76))}
  #player .w-head{left:16px;top:14px;max-width:calc(100% - 32px)}
  #player .w-title{font-size:clamp(40px,11vw,64px)}
  #player .w-sub{display:none}
  #player .w-ctrls{left:0;right:0;bottom:14px;gap:10px}
  #player .w-zones{flex-wrap:nowrap;max-width:100%;overflow-x:auto;padding:2px 16px;scrollbar-width:none}
  #player .w-zones::-webkit-scrollbar{display:none}
  #player .w-zones button{flex:none}
  #player .w-zb{padding:0 16px}
  #player .w-card{left:12px;right:12px;top:auto;bottom:118px;width:auto;padding:14px 14px 12px;transform:none!important}
  #player .w-cn{font-size:17px}
  #player .w-cb{margin-top:10px}
  #player .w-panel{border-left:0;border-top:1px solid var(--wline);padding:18px 16px 8px;background:none}
  #player .w-list{overflow:visible;margin:0 -6px;padding:0 6px}
}
@media (max-width:999px) and (max-height:500px) and (orientation:landscape){
  #player .w-stage{height:max(240px,var(--wh,100vh))}
  #player .w-head{max-width:44%}
  #player .w-title{font-size:40px}
  #player .w-ctrls{right:auto;max-width:46%;padding-left:16px;align-items:flex-start}
  #player .w-zones{flex-wrap:wrap;overflow:visible;padding:0}
  #player .w-zones button{height:32px;padding:0 12px;font-size:12.5px}
  #player .w-zb{padding:0}
  #player .w-card{left:auto;right:12px;bottom:12px;width:min(320px,48%)}
}
#player .w-spin{white-space:nowrap}
#player .w-kick{white-space:nowrap;overflow:hidden}
@media (max-width:360px){
  #player .w-spin{padding:0 16px 0 13px;font-size:13.5px;gap:7px}
  #player .w-zoom button{width:42px}
  #player .w-kick span+*,#player .w-kick{font-size:10.5px;letter-spacing:.14em}
}
@media (prefers-reduced-motion:reduce){#player .w-card,#player .w-spin,#player .w-zones button{transition:none}}

/* ---------- round 2: clearer ---------- */
/* the headline steps aside when you zoom in, so the map has the room */
#player .w-head{transition:opacity .35s,transform .45s cubic-bezier(.2,.9,.25,1);transform-origin:0 0}
#player .w-zoomed .w-head{transform:scale(.5);opacity:.85}
#player .w-zoomed .w-sub{opacity:0}
#player .w-sub{transition:opacity .25s}
/* the zone you flew to */
#player .w-zones button[aria-pressed=true]{background:var(--wpw);color:var(--ink,#140C22);box-shadow:none}
/* first-visit hints, over the globe */
#player .w-tips{position:absolute;z-index:3;left:50%;bottom:clamp(128px,17vh,150px);transform:translateX(-50%);display:flex;gap:6px;margin:0;padding:6px;border-radius:999px;
  background:rgba(10,6,18,.62);box-shadow:inset 0 0 0 1px var(--wline);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);pointer-events:none;white-space:nowrap;
  animation:wtips .6s .6s both cubic-bezier(.2,.9,.25,1)}
#player .w-tips span{padding:6px 12px;border-radius:999px;font-size:13px;color:var(--soft)}
#player .w-tips span+span{box-shadow:-1px 0 0 rgba(255,255,255,.1)}
#player .w-tips b{color:var(--text);font-weight:800}
#player .w-tips.out{opacity:0;transform:translateX(-50%) translateY(8px);transition:opacity .4s,transform .4s}
@keyframes wtips{from{opacity:0;transform:translateX(-50%) translateY(10px)}to{opacity:1;transform:translateX(-50%)}}
/* the station on air, at the top of the list */
#player .w-live{--wc:var(--wpw);display:flex;align-items:center;gap:12px;width:100%;margin-top:12px;padding:10px 12px;border-radius:14px;text-align:left;
  background:color-mix(in srgb,var(--wc) 16%,rgba(255,255,255,.04));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--wc) 35%,transparent);transition:background .2s}
#player .w-live:hover{background:color-mix(in srgb,var(--wc) 24%,rgba(255,255,255,.05))}
#player .w-live>span{flex:1;min-width:0}
#player .w-live small{display:block;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:color-mix(in srgb,var(--wc) 70%,#fff)}
#player .w-live b{display:block;margin-top:2px;font-weight:700;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#player .w-live em{flex:none;font-style:normal;font-size:12.5px;font-weight:700;color:var(--soft);padding:6px 10px;border-radius:999px;background:rgba(255,255,255,.08)}
#player .w-live .w-dot{animation:wlive 1.6s ease-in-out infinite}
@keyframes wlive{50%{transform:scale(.6);opacity:.6}}
/* back to the stations in view */
#player .w-ph{flex-direction:column;align-items:flex-start;gap:8px}
#player .w-back{display:inline-flex;align-items:center;gap:4px;height:32px;padding:0 12px 0 8px;margin:0 0 2px -2px;border-radius:999px;background:rgba(255,255,255,.07);font-size:12.5px;font-weight:700;color:var(--soft)}
#player .w-back:hover{background:rgba(255,255,255,.12);color:var(--text)}
@media (max-width:999px){
  #player .w-zoomed .w-head{transform:scale(.62)}
  #player .w-tips{bottom:118px;font-size:12px}
  #player .w-tips span{padding:5px 9px;font-size:12px}
}
@media (max-width:420px){#player .w-tips span:first-child{display:none}}
@media (prefers-reduced-motion:reduce){#player .w-tips{animation:none}#player .w-live .w-dot{animation:none}#player .w-head{transition:none}}

/* ---------- round 3: a quiet header, a richer list ---------- */
#player .w-head{top:clamp(18px,3vh,30px)}
#player .w-title{display:flex;align-items:center;gap:12px;font-size:clamp(34px,3vw,44px);line-height:1;letter-spacing:-.025em;color:var(--text)}
#player .w-title .w-lab{font-family:var(--body);font-size:10.5px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;padding:4px 8px;border-radius:999px;
  background:color-mix(in srgb,var(--wpw) 20%,transparent);color:var(--wpw);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--wpw) 35%,transparent)}
#player .w-sub{margin:8px 0 0;font-size:13.5px;color:var(--muted);transition:none}
#player .w-zoomed .w-head{transform:none;opacity:1}
#player .w-zoomed .w-sub{opacity:1}
/* rows: cover, name, place · genre, quality; the star on hover or when saved */
#player .w-row{border-radius:12px}
#player .w-rh{gap:12px;padding:8px 6px 8px 8px}
#player .w-art{position:relative;flex:none;width:44px;height:44px;border-radius:10px;overflow:hidden;background:rgba(255,255,255,.06)}
#player .w-art img{width:100%;height:100%;object-fit:cover;display:block}
#player .w-art .eq{position:absolute;inset:0;display:grid;place-items:center;background:rgba(8,5,14,.5)}
#player .w-rt b{font-size:14.5px}
#player .w-rt small{font-size:12.5px}
#player .w-q{flex:none;font-style:normal;font-size:11px;font-weight:800;letter-spacing:.06em;color:var(--dim);padding:3px 7px;border-radius:6px;background:rgba(255,255,255,.05)}
#player .w-q.hq{color:var(--wpw);background:color-mix(in srgb,var(--wpw) 14%,transparent)}
#player .w-row.on .w-rt b{color:var(--wpw)}
@media (hover:hover){
  #player .w-row .w-star{opacity:0;transition:opacity .15s}
  #player .w-row:hover .w-star,#player .w-row.fav .w-star,#player .w-row .w-star:focus-visible{opacity:1}
}
#player .w-list{scrollbar-gutter:stable}
@media (max-width:999px){#player .w-title{font-size:34px}}

/* ---------- round 4: calm (DESIGN.md: little chrome, little text, pills only for what you press) ---------- */
/* places to fly to: quiet words, the one you're on is white and underlined */
#player .w-zones{gap:2px;padding:4px 6px;border-radius:999px;background:rgba(10,6,18,.38);box-shadow:inset 0 0 0 1px var(--wline);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);width:max-content;max-width:100%}
#player .w-zones button{height:34px;padding:0 12px;border-radius:999px;background:none;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;font-size:13.5px;font-weight:700;color:var(--muted)}
#player .w-zones button:hover{background:none;color:var(--text)}
#player .w-zones button[aria-pressed=true]{background:none;color:var(--text);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:6px;text-decoration-color:var(--wpw)}
#player .w-zones button:focus-visible{outline:2px solid var(--wpw);outline-offset:-2px}
/* the first-visit hint: one quiet line */
#player .w-tips{padding:9px 16px;font-size:13px;font-weight:600;color:var(--soft)}
/* the station on air, above the list */
#player .w-live .w-loc{flex:none;color:var(--muted);transition:color .2s}
#player .w-live:hover .w-loc{color:var(--text)}
#player .w-q{display:none}
@media (max-width:999px){
  #player .w-zones{padding:3px 4px;margin:0 16px;max-width:calc(100% - 32px);background:rgba(10,6,18,.5)}
  #player .w-zones button{flex:none;height:32px;padding:0 11px;font-size:13px}
}
/* a spot shared by several stations: the card lists them */
#player .w-card.spot{width:320px;padding:14px 8px 8px 16px}
#player .w-sh{display:flex;align-items:flex-start;gap:8px;padding-right:2px}
#player .w-sh>span{flex:1;min-width:0}
#player .w-sh .w-cn{font-size:17px}
#player .w-sl{margin:10px 0 0 -8px;max-height:min(312px,46vh);overflow-y:auto;padding-right:4px;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.18) transparent;overscroll-behavior:contain}
#player .w-si{display:flex;align-items:center;gap:11px;width:100%;padding:7px 8px;border-radius:12px;text-align:left;transition:background .15s}
#player .w-si:hover{background:rgba(255,255,255,.07)}
#player .w-si.on{background:color-mix(in srgb,var(--wpw) 13%,transparent)}
#player .w-si.on .w-rt b{color:var(--wpw)}
#player .w-si .w-art{width:36px;height:36px;border-radius:9px}
#player .w-si .w-rt b{font-size:14px}
#player .w-si .w-rt small{font-size:12px}
@media (max-width:999px){#player .w-card.spot{width:auto}#player .w-sl{max-height:34vh}}
/* search results: a town shows its country beside it */
#player .w-sug .w-sc{margin-left:8px;font-weight:600;font-size:12.5px;color:var(--muted)}
/* until its cover is drawn, a row shows its genre colour */
#player .w-art{background:color-mix(in srgb,var(--wc,#B18CFF) 35%,#1A1326)}
#player .w-art img:not([src]){visibility:hidden}
/* searching a big spot */
#player .w-sf{display:flex;align-items:center;gap:8px;height:40px;margin:12px 8px 0 0;padding:0 12px;border-radius:12px;background:rgba(255,255,255,.07);box-shadow:inset 0 0 0 1px var(--wline);color:var(--muted)}
#player .w-sf:focus-within{box-shadow:inset 0 0 0 2px var(--wpw)}
#player .w-sf input{flex:1;min-width:0;height:100%;border:0;outline:0;background:none;color:var(--text);font:inherit;font-size:14px}
#player .w-sf input::placeholder{color:var(--dim)}
#player .w-sf input::-webkit-search-cancel-button{display:none}
#player .w-sg{display:flex;gap:6px;margin:10px 8px 0 0;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
#player .w-sg::-webkit-scrollbar{display:none}
#player .w-sg button{flex:none;height:30px;padding:0 12px;border-radius:999px;background:rgba(255,255,255,.08);font-size:12.5px;font-weight:700;color:var(--soft)}
#player .w-sg button:hover{background:rgba(255,255,255,.14);color:var(--text)}
#player .w-sg button[aria-pressed=true]{background:#fff;color:var(--ink,#140C22)}
#player .w-card.spot .w-empty{margin:14px 8px}
/* the spot card never grows past the stage: the list scrolls inside it */
#player .w-card.spot{display:flex;flex-direction:column;max-height:calc(100% - 32px)}
#player .w-card.spot .w-sl{flex:1 1 auto;min-height:72px;max-height:none}
@media (max-width:999px){#player .w-card.spot{max-height:calc(100% - 136px)}}
/* the card's head, search and genres keep their size; only the list scrolls */
#player .w-card.spot>*:not(.w-sl){flex-shrink:0}
#player .w-sug.up{top:auto;bottom:52px;box-shadow:inset 0 0 0 1px var(--wline),0 -18px 40px rgba(0,0,0,.45)}
