/* Pulse pages (set, city, artist, sound, festivals), v4, 16 Oct 2026. Shares the hub's idea: colour is tempo.
   Loaded after /css/sp-v3.css, which gives the tokens (--g, --g2, --acid, --bone, --boned, --disp, --sans, --mono). */
:root{--p-slow:#D84A9C;--p-mid:#FF6B47;--p-warm:#FFA831;--p-fast:#C9F02C;--line:#2a241d;--line2:#3a332b;--surf:#15110d;--surf2:#1d1813;--glass:rgba(14,11,8,.86);--dock-h:0px;--c:#E6E1D4}
html{scroll-behavior:smooth}
body.pulse{background:var(--g2)}
.pulse .tnum{font-variant-numeric:tabular-nums}
.pulse .k{color:var(--boned);font:500 11px/1.4 var(--mono);letter-spacing:.12em;text-transform:uppercase}
.pulse .dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--c,var(--bone));box-shadow:0 0 8px var(--c,transparent);margin-right:8px;vertical-align:middle;flex:none}
.pulse .pill{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;font:500 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;padding:11px 14px;border-radius:999px;border:1px solid var(--line2);text-decoration:none;color:var(--bone);background:none;cursor:pointer;min-height:40px}
.pulse .pill:hover{border-color:var(--acid);color:var(--acid)}
.pulse .pill svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;flex:none}
.pulse .pill.solid svg{fill:currentColor;stroke:none}
.pulse .pill.sm{padding:8px 11px;min-height:34px;font-size:10px}
.pulse .pill.solid{background:var(--acid);color:var(--ink);border-color:var(--acid)}
.pulse .pill[aria-pressed="true"]{background:var(--bone);color:var(--ink);border-color:var(--bone)}
.pulse h2{font:800 clamp(30px,3.6vw,48px)/.95 var(--disp);text-transform:uppercase;margin:0 0 14px;letter-spacing:-.005em}
.pulse h3{font:800 22px/1 var(--disp);text-transform:uppercase;margin:0}
.pulse section{padding:48px 0;border-top:1px solid var(--line);scroll-margin-top:70px}
.pulse section.flush{border-top:0;padding-top:34px}
.pulse .lede{max-width:62ch;color:#d5cfc2;font-size:17px;line-height:1.6}
.pulse .prose{max-width:66ch;color:#d5cfc2;font-size:16px;line-height:1.65}
.pulse .prose p{margin:0 0 14px}
.pulse .note{border-left:2px solid var(--line2);padding:2px 0 2px 12px;color:var(--boned);font-size:13.5px;line-height:1.5;margin:0;max-width:66ch}
.pulse .tags{display:flex;flex-wrap:wrap;gap:6px}
.pulse .ptag{font:500 10px/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;padding:6px 9px;border-radius:999px;border:1px solid var(--line2);color:var(--boned);text-decoration:none}
a.ptag:hover{border-color:var(--acid);color:var(--acid)}
.pulse .srcref{font:500 9.5px/1 var(--mono);color:var(--boned);text-decoration:none;vertical-align:super;margin-left:2px}
.pulse .srcref:hover{color:var(--acid)}
.pulse .two{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:40px;align-items:start}
.pulse .three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.mark{display:block;overflow:visible}.mark rect{fill:var(--bone)}
/* share and page controls beside names, never over a photo */
.acts{display:inline-flex;align-items:center;gap:6px;flex:none}
.shr{width:32px;height:32px;border-radius:50%;border:1px solid var(--line2);background:none;color:var(--boned);display:inline-grid;place-items:center;cursor:pointer;padding:0;text-decoration:none;flex:none}
.shr svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2}
.shr:hover,.shr:focus-visible{border-color:var(--acid);color:var(--acid);outline:none}
.hs-ptog{margin:14px 0 0;display:inline-grid!important}
.seg{display:inline-grid;grid-auto-flow:column;gap:2px;border:1px solid var(--line2);border-radius:999px;padding:3px;background:rgba(26,22,18,.9);max-width:100%;overflow-x:auto}
.seg button{border:0;background:none;color:var(--boned);font:500 10.5px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;padding:9px 13px;border-radius:999px;cursor:pointer;white-space:nowrap;min-height:34px}
.seg button[aria-pressed="true"]{background:var(--bone);color:var(--ink)}

/* ---------- the Pulse sub-nav (sticky) ---------- */
.psub{position:sticky;top:0;z-index:30;background:rgba(14,11,8,.92);backdrop-filter:blur(10px);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.psub .wrap{display:flex;align-items:center;gap:14px;min-height:58px}
.psub .pm{display:flex;align-items:center;gap:10px;text-decoration:none;font:800 18px/1 var(--disp);text-transform:uppercase;letter-spacing:.03em;flex:none}
.psub .pm .mark{width:40px;height:auto}
.psub .tabs{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;min-width:0}
.psub .tabs::-webkit-scrollbar{display:none}
.psub .tabs a{font:500 11.5px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;text-decoration:none;color:var(--boned);padding:12px 12px;border-radius:999px;white-space:nowrap}
.psub .tabs a:hover,.psub .tabs a.on{color:var(--bone)}
.psub .tabs a.on{background:rgba(230,225,212,.08)}
.psub .right{margin-left:auto;display:flex;gap:8px;flex:none}

/* ---------- page hero ---------- */
.phero{position:relative;overflow:hidden;background:var(--g2);background-image:linear-gradient(rgba(230,225,212,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(230,225,212,.045) 1px,transparent 1px);background-size:28px 28px;background-position:-1px -1px;padding:104px 0 44px}
.phero:before{content:"";position:absolute;inset:0;background:radial-gradient(70% 90% at 80% 20%,color-mix(in srgb,var(--c) 14%,transparent),transparent 65%);pointer-events:none}
.phero .wrap{position:relative}
.phero .crumb{margin-bottom:22px}
.phero .kick{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 10px}
.phero h1{font:800 clamp(40px,6vw,92px)/.88 var(--disp);text-transform:uppercase;margin:0;letter-spacing:-.01em;max-width:14ch;overflow-wrap:anywhere}
.phero h1.long{font-size:clamp(34px,4.8vw,74px);max-width:18ch}
.phero h1 small{display:block;font:500 clamp(14px,1.4vw,18px)/1.3 var(--sans);text-transform:none;letter-spacing:0;color:var(--boned);margin-top:14px;max-width:48ch}
.phero .sub{font:500 clamp(18px,2vw,24px)/1.3 var(--sans);margin:18px 0 0;max-width:40ch;color:var(--bone)}
.phero .intro{font-size:clamp(16px,1.2vw,17px);line-height:1.65;max-width:66ch;color:#d5cfc2;margin:16px 0 0}
.phero .row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:22px}
.phero .meta{margin:18px 0 0;display:flex;flex-wrap:wrap;gap:6px 20px;color:var(--boned)}
.phero .meta b{color:var(--c);font-weight:600}
.pulseline{display:flex;align-items:baseline;gap:12px;margin:14px 0 0}
.pulseline b{font:900 clamp(56px,7vw,96px)/.8 var(--disp);color:var(--c);letter-spacing:-.01em}
.pulseline span{font:500 11px/1.5 var(--mono);color:var(--boned);letter-spacing:.06em;text-transform:uppercase;max-width:28ch}
.ring{position:relative;width:14px;height:14px;border-radius:50%;background:var(--c);box-shadow:0 0 12px var(--c);flex:none}
/* 21 Oct 2026: rings fire once per bar (4 beats), as on the hub since 19 Oct; they were firing on every beat (Lagos twice a second) */
.ring:after{content:"";position:absolute;inset:-4px;border-radius:50%;border:1.5px solid var(--c);animation:ring calc(var(--per,.5s) * 4) infinite ease-out}
@keyframes ring{0%{transform:scale(.6);opacity:.9}100%{transform:scale(2.6);opacity:0}}
/* the one bold thing on a set page: the play target, ringed at the city's tempo */
.bigplay{position:relative;width:min(44vw,200px);height:min(44vw,200px);border-radius:50%;border:0;background:var(--c);color:var(--ink);display:grid;place-items:center;cursor:pointer;flex:none;box-shadow:0 0 0 0 color-mix(in srgb,var(--c) 45%,transparent);animation:bigpulse calc(var(--per,.5s) * 4) infinite}
.bigplay .pb{display:grid;place-items:center;width:100%;height:100%}
.bigplay svg{width:36%;height:36%;fill:currentColor;margin-left:6%}
.bigplay:hover{filter:brightness(1.08)}
.bigplay.nudge{animation-duration:calc(var(--per,.5s) * 2)}
@keyframes bigpulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--c) 45%,transparent)}70%{box-shadow:0 0 0 28px color-mix(in srgb,var(--c) 0%,transparent)}100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--c) 0%,transparent)}}
.setstage{display:grid;grid-template-columns:auto minmax(0,1fr);gap:clamp(22px,4vw,56px);align-items:center}
.setstage .k.live{display:inline-flex;align-items:center;gap:8px}
.setstage .k.live i{width:8px;height:8px;border-radius:50%;background:var(--c);display:inline-block;animation:blink 1.2s infinite}
body:not(.is-playing) .setstage .k.live i{animation:none;background:var(--boned)}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.35}}
.setstage h1{font-size:clamp(40px,6vw,96px)}
.setstage .set-title{font:500 clamp(18px,2.2vw,26px)/1.3 var(--sans);margin:12px 0 0;color:var(--bone);max-width:36ch}
.setstage .set-meta{margin:10px 0 0}
.playhint{margin:14px 0 0;font:500 11px/1.5 var(--mono);color:var(--boned);letter-spacing:.06em;text-transform:uppercase}
.playhint b{color:var(--bone);font-weight:500}

/* the city hero: copy left, the continent with this city lit on the right */
.cityhero{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(280px,.85fr);gap:clamp(20px,4vw,60px);align-items:center}
.minimap{position:relative;aspect-ratio:1/1.04;max-width:460px;margin-left:auto;width:100%}
.minimap canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
@media (max-width:900px){.cityhero{grid-template-columns:1fr}.minimap{max-width:360px;margin:0 auto;aspect-ratio:1/1}}
/* ---------- rows, cards ---------- */
.playrow{display:grid;grid-template-columns:44px 1fr;gap:12px;align-items:center;width:100%;text-align:left;background:rgba(230,225,212,.03);border:1px solid var(--line2);border-radius:12px;padding:10px 12px;color:var(--bone);cursor:pointer;text-decoration:none;font:inherit}
.playrow:hover,.playrow.on{border-color:var(--c,var(--bone))}
.playrow .pb{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--c,var(--bone));color:var(--ink);font-size:14px}
.playrow .pb svg{width:18px;height:18px;fill:currentColor;margin-left:2px}
.playrow.out .pb{background:none;border:1px solid var(--line2);color:var(--bone)}
.playrow b{display:block;font-weight:600;font-size:15px;line-height:1.25}
.playrow small{display:block;font:500 10px/1.4 var(--mono);color:var(--boned);margin-top:3px;letter-spacing:.06em;text-transform:uppercase}
.setlist{display:grid;gap:8px;max-width:760px}
.setrow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.setrow .acts a.k{text-decoration:none;color:var(--boned);border-bottom:1px solid var(--line2)}
.setrow .acts a.k:hover{color:var(--acid);border-color:var(--acid)}
.agrid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,215px),1fr));gap:14px}
.acard{border:1px solid var(--line);border-radius:16px;overflow:hidden;background:var(--surf);display:flex;flex-direction:column;transition:border-color .2s}
.acard:hover{border-color:var(--c)}
.tile{position:relative;aspect-ratio:1/1;overflow:hidden;background:var(--surf2)}
.tile img{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.9)}
.tile .ini{display:none}
.tile.gen{background:repeating-linear-gradient(90deg,transparent 0 var(--gap),color-mix(in srgb,var(--c) 55%,transparent) var(--gap) calc(var(--gap) + 5px)),radial-gradient(120% 90% at 20% 110%,color-mix(in srgb,var(--c) 45%,transparent),transparent 60%),#120e0a}
.tile.gen .ini{display:block;position:absolute;left:14px;bottom:8px;font:900 72px/.9 var(--disp);color:var(--bone);opacity:.92;text-shadow:0 2px 18px rgba(0,0,0,.6)}
.acard-b{padding:12px 14px 14px;display:grid;gap:5px}
.acard-row{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;min-width:0}
.acard-row h3{min-width:0;overflow-wrap:anywhere;hyphens:auto}
.acard-b{min-width:0}
.acard h3{font:800 20px/1 var(--disp);text-transform:uppercase;margin:3px 0 0}
.acard h3 a{text-decoration:none}.acard h3 a:hover{color:var(--c)}
.play-sm{flex:none;width:38px;height:38px;border-radius:50%;border:0;background:var(--c);color:var(--ink);display:grid;place-items:center;cursor:pointer}
.play-sm svg{width:16px;height:16px;fill:currentColor;margin-left:2px}
.play-sm.bc{background:none;border:1px solid var(--line2);color:var(--bone)}
.acard-tag{margin:2px 0 0;font-size:12.5px;line-height:1.4;color:var(--bone)}
.acard-meta{margin:0;font:500 10px/1.6 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--boned)}
.acard-tags{margin:0;font-size:13px;color:#d5cfc2;line-height:1.4}
.acard-credit{margin:4px 0 0;font:400 9.5px/1.4 var(--mono);color:#948c7e;letter-spacing:.04em}
.acard-credit a{color:inherit}
/* the artist portrait on an artist page, or its designed stand-in */
.portrait{position:relative;aspect-ratio:4/5;border-radius:18px;overflow:hidden;background:var(--surf2);max-width:420px}
.portrait img{width:100%;height:100%;object-fit:cover;display:block}
.portrait.gen{background:repeating-linear-gradient(90deg,transparent 0 var(--gap),color-mix(in srgb,var(--c) 50%,transparent) var(--gap) calc(var(--gap) + 6px)),radial-gradient(120% 90% at 20% 110%,color-mix(in srgb,var(--c) 40%,transparent),transparent 60%),#120e0a}
.portrait.gen .ini{position:absolute;left:18px;bottom:8px;font:900 clamp(96px,22vw,160px)/.9 var(--disp);color:var(--bone);opacity:.92}
.portrait.gen .gk{position:absolute;right:16px;top:14px;text-align:right}
.credit{font:400 10.5px/1.4 var(--mono);color:#948c7e;margin:6px 0 0;letter-spacing:.04em}
.credit a{color:inherit}
.links{display:flex;flex-wrap:wrap;gap:6px 14px;font:500 11px/1.4 var(--mono);letter-spacing:.08em;text-transform:uppercase}
.links a{color:var(--bone);text-decoration:none;border-bottom:1px solid var(--line2)}
.links a:hover{color:var(--acid);border-color:var(--acid)}
.cardlist{list-style:none;margin:0;padding:0;display:grid;gap:10px;max-width:760px}
.cardlist li{border:1px solid var(--line);border-radius:14px;padding:14px 16px;background:var(--surf);display:grid;gap:5px}
.cardlist li b{font-weight:600;font-size:15.5px}
.cardlist li p{margin:0;color:#d5cfc2;font-size:14px;line-height:1.5}
.cardlist li .k{font-size:9.5px}
.status{display:inline-flex;align-items:center;gap:6px;font:500 9.5px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;padding:5px 8px;border-radius:999px;border:1px solid var(--line2);color:var(--boned)}
.status.open{color:var(--acid);border-color:color-mix(in srgb,var(--acid) 50%,transparent)}
.status.closed{color:var(--coral);border-color:color-mix(in srgb,var(--coral) 50%,transparent)}
.facts{margin:0;display:grid;border-top:1px solid var(--line2);max-width:760px}
.facts div{display:grid;grid-template-columns:140px 1fr;gap:12px;padding:11px 0;border-bottom:1px solid var(--line2)}
.facts dt{font:500 10px/1.6 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--c)}
.facts dd{margin:0;font-size:14.5px;line-height:1.55;color:#d5cfc2}
.facts a{color:var(--bone)}
.evlist{list-style:none;margin:0;padding:0;display:grid}
.evlist li{display:grid;grid-template-columns:150px 1fr auto;gap:16px;align-items:center;border-top:1px solid var(--line);padding:12px 0}
.evlist .when{font:800 20px/1 var(--disp);color:var(--acid);text-transform:uppercase}
.evlist .what a{color:var(--bone);text-decoration:none;font-weight:600}
.evlist .what a:hover{color:var(--acid)}
.evlist .what small{display:block;font:500 10.5px/1.4 var(--mono);color:var(--boned);letter-spacing:.06em;text-transform:uppercase;margin-top:2px}
.evlist li.past{opacity:.6}
.golist{display:grid;gap:8px;max-width:760px}
.golist a{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:center;border:1px solid var(--line2);border-radius:12px;padding:10px 12px;text-decoration:none;color:var(--bone)}
.golist a:hover{border-color:var(--acid)}
.golist a .k{font-size:9px;color:var(--acid);min-width:52px}
.golist a small{display:block;color:var(--boned);font-size:12px}
.faq details{border-top:1px solid var(--line);padding:14px 0}
.faq details:last-child{border-bottom:1px solid var(--line)}
.faq summary{cursor:pointer;font:600 16px/1.4 var(--sans);color:var(--bone);list-style:none;display:flex;justify-content:space-between;gap:12px}
.faq summary::-webkit-details-marker{display:none}
.faq summary:after{content:"+";color:var(--acid);font:500 18px var(--mono)}
.faq details[open] summary:after{content:"\2212"}
.faq p{margin:10px 0 0;color:#d5cfc2;font-size:15px;line-height:1.6;max-width:66ch}
.sources{margin:0;padding-left:0;list-style:none;display:grid;gap:6px;font:12px/1.5 var(--mono);color:var(--boned)}
.sources li{display:grid;grid-template-columns:28px 1fr;gap:8px}
.sources a{color:var(--boned);overflow-wrap:anywhere;text-decoration:none}
.sources a b{color:var(--bone);font-weight:500}
.sources a span{opacity:.75}
.sources a:hover b,.sources a:hover span{color:var(--acid);opacity:1}
.sources a:hover{color:var(--acid)}
.checked{font:500 11px/1.5 var(--mono);color:var(--boned);letter-spacing:.08em;text-transform:uppercase;margin:0}
.scenegrid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,230px),1fr));gap:12px}
.scenegrid a{display:grid;gap:4px;border:1px solid var(--line);border-radius:14px;padding:14px;text-decoration:none;color:var(--bone);background:var(--surf)}
.scenegrid a:hover{border-color:var(--c)}
.scenegrid b{font:800 24px/1 var(--disp);text-transform:uppercase}
.scenegrid .n{font:900 30px/.9 var(--disp);color:var(--c)}
.scenegrid small{font:500 10px/1.5 var(--mono);color:var(--boned);letter-spacing:.06em;text-transform:uppercase}
.tempotable{width:100%;border-collapse:collapse;font-size:14px;max-width:900px}
.tempotable th{text-align:left;font:500 10px/1.6 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--boned);padding:8px 10px 8px 0;border-bottom:1px solid var(--line2)}
.tempotable td{padding:10px 10px 10px 0;border-bottom:1px solid var(--line);vertical-align:top;color:#d5cfc2;line-height:1.45}
.tempotable td:first-child{color:var(--bone);font-weight:600}
.tempotable .tnum{color:var(--c)}
.tempotable a{color:var(--bone)}
.disagree{border:1px dashed var(--line2);border-radius:14px;padding:14px 18px;color:#d5cfc2;font-size:14px;line-height:1.55;max-width:760px}
.disagree b{color:var(--amber);font-weight:600}
.timeline{list-style:none;margin:0;padding:0;display:grid;gap:0;max-width:760px}
.timeline li{display:grid;grid-template-columns:110px 1fr;gap:14px;padding:10px 0;border-top:1px solid var(--line);font-size:14.5px;line-height:1.5;color:#d5cfc2}
.timeline .d{font:800 16px/1.4 var(--disp);color:var(--acid)}
.thin{border:1px dashed var(--line2);border-radius:16px;padding:18px 22px;max-width:760px;color:#d5cfc2;font-size:15px;line-height:1.6}
.thin a{color:var(--acid)}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:0}
.fchip{font:500 11px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;padding:9px 12px;border:1px solid var(--line2);border-radius:999px;background:none;color:var(--bone);cursor:pointer}
.fchip[aria-pressed="true"]{background:var(--bone);color:var(--ink);border-color:var(--bone)}
.fchip i{font-style:normal;color:var(--boned);margin-left:6px}
.fchip[aria-pressed="true"] i{color:var(--ink)}

/* ---------- the dock (fixed, follows you) ---------- */
#dock{position:fixed;z-index:45;left:16px;bottom:calc(env(safe-area-inset-bottom,0px) + 14px);width:min(620px,calc(100vw - 32px));background:rgba(14,11,8,.94);backdrop-filter:blur(16px);border:1px solid var(--line2);border-radius:18px;padding:10px 12px;box-shadow:0 18px 50px rgba(0,0,0,.55);display:grid;gap:8px}
#dock[hidden]{display:none}
#dock .d1{display:grid;grid-template-columns:48px minmax(0,1fr) auto;gap:12px;align-items:center}
#dock .art{width:48px;height:48px;border-radius:10px;background:var(--surf2) center/cover no-repeat;border:1px solid var(--line2)}
#dock .meta{min-width:0}
#dock .meta b{display:block;font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#dock .meta span{display:block;font:500 10px/1.4 var(--mono);color:var(--boned);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#dock .meta span b{display:inline;color:var(--c,var(--bone));font-weight:600;font-size:inherit}
#dock .ctl{display:flex;gap:6px;align-items:center}
.cbtn{width:38px;height:38px;border-radius:50%;border:1px solid var(--line2);background:none;color:var(--bone);display:grid;place-items:center;cursor:pointer}
.cbtn svg{width:16px;height:16px;fill:currentColor}
.cbtn:hover{border-color:var(--bone)}
.cbtn.main{width:46px;height:46px;border:0;background:var(--c,var(--bone));color:var(--ink)}
#dock .d2{height:6px;border-radius:3px;background:rgba(230,225,212,.12);cursor:pointer;position:relative;overflow:hidden}
#dock .d2 i{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--c,var(--bone))}
#dock .d3{display:flex;gap:10px;align-items:center;font:500 10px/1 var(--mono);color:var(--boned);letter-spacing:.06em;text-transform:uppercase;flex-wrap:wrap}
#dock .d3 .t{color:var(--bone)}
#dock .d3 a{color:var(--boned);text-decoration:none;margin-left:auto}
.native{display:none;border-radius:12px;overflow:hidden;background:#000}
.native.on{display:block}
.native iframe{display:block;width:100%;border:0}
#scwrap{position:fixed;left:-9999px;top:0;width:300px;height:166px;opacity:0;pointer-events:none}
#scwrap.reveal{position:static;left:auto;opacity:1;pointer-events:auto;width:100%}
#scwrap.reveal iframe{display:block;width:100%;border:0}
.upnext{list-style:none;margin:0;padding:0;display:grid;gap:6px;max-width:760px}
.upnext li{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;border-top:1px solid var(--line);padding:10px 0 4px}
.upnext .n{font:800 22px/1 var(--disp);color:var(--c);min-width:28px}
.upnext b{display:block;font-weight:600;font-size:14.5px;line-height:1.3}
.upnext small{display:block;font:500 10px/1.4 var(--mono);color:var(--boned);letter-spacing:.06em;text-transform:uppercase}
.x{background:none;border:1px solid var(--line2);border-radius:999px;padding:7px 12px;font:500 10px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--bone);cursor:pointer;min-height:32px}
.x:hover{border-color:var(--bone)}
.toast{bottom:auto;top:76px}
.pulse footer{padding-bottom:calc(60px + var(--dock-h))}
.pulse.has-dock .hs-fab{bottom:calc(var(--dock-h) + 6px)}

@media (max-width:900px){.pulse .two,.pulse .three{grid-template-columns:1fr}}
@media (max-width:760px){
  .pulse section{padding:38px 0}
  .phero{padding:108px 0 32px}
  .acard .acts{gap:4px}.acard .shr{width:30px;height:30px}.play-sm{width:34px;height:34px}.play-sm svg{width:14px;height:14px}
  .acard h3{font-size:17px}
  .setrow{grid-template-columns:minmax(0,1fr);gap:6px}.setrow .acts{justify-content:flex-end;margin-top:-2px}
  .setstage{grid-template-columns:1fr;gap:18px}
  .setstage .bigplay{width:124px;height:124px}
  .agrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .acard h3{font-size:18px}.acard-b{padding:10px 11px 12px}
  .facts div{grid-template-columns:1fr;gap:3px}
  .evlist li{grid-template-columns:1fr;gap:6px}
  .psub .wrap{gap:8px}.psub .pm span{display:none}
  /* 21 Oct 2026: no floating share button on Pulse (it covered card Share buttons); the sub-nav Share stays on phones as an icon */
  .psub .right .pill{font-size:0;gap:0;padding:0;width:36px;height:36px;min-height:36px;justify-content:center}.psub .right .pill .ishr{width:15px;height:15px}
  .psub .tabs{-webkit-mask-image:linear-gradient(90deg,#000 82%,transparent);mask-image:linear-gradient(90deg,#000 82%,transparent);padding-right:18px}
  #dock{left:8px;width:calc(100vw - 16px);bottom:calc(env(safe-area-inset-bottom,0px) + 8px);padding:9px 10px}
  .portrait{max-width:none}
}
@media (prefers-reduced-motion:reduce){.bigplay,.ring:after,.setstage .k.live i{animation:none}}
/* 20 Oct 2026: the city opening (voice lede) and the Recraft scene art above the sourced sections */
.sceneart{margin:0 0 26px;border-radius:18px;overflow:hidden;border:1px solid var(--line2);background:#0E0B08}
.sceneart img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover}
.sceneart figcaption{padding:10px 14px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#7d766a;border-top:1px solid var(--line2)}
.opening{max-width:72ch;font-size:19px;line-height:1.6;color:var(--bone)}
.opening p{margin:0 0 16px}
.opening p.note{font-size:13px;color:#8d8678;margin-top:4px}
@media (max-width:760px){.sceneart{margin:0 -16px 22px;border-radius:0;border-left:0;border-right:0}.opening{font-size:17px}}
/* an artist with no page yet expands in place on the city page: bio, links, sources, so no card is a dead end */
.acard h3 .aexp{all:unset;cursor:pointer;font:inherit;text-transform:inherit;color:inherit;border-bottom:1px dotted var(--line2)}
.acard h3 .aexp:hover,.acard h3 .aexp:focus-visible{color:var(--c)}
.acard h3 .aexp:after{content:" +";font-weight:400;color:#8d8678}
.acard h3 .aexp[aria-expanded="true"]:after{content:" \2212"}
.aexp-body{grid-column:1/-1;margin-top:8px;padding-top:10px;border-top:1px solid var(--line2);font-size:14px;line-height:1.55;color:#d5cfc2}
.aexp-body p{margin:0 0 8px}.aexp-body .k{margin:10px 0 4px;display:block}.aexp-body .links{margin-bottom:6px}
.acard.open{grid-column:1/-1}
@media (min-width:761px){.acard.open{flex-direction:row;align-items:flex-start}.acard.open .tile{flex:0 0 240px;width:240px}.acard.open .acard-b{flex:1}}
/* 21 Oct 2026 (pulse nav): the artist index dressed as part of Pulse: city chips, a back-to-the-map pill, and each city a Pulse tile with its artists */
.cityrow{display:flex;gap:8px;flex-wrap:wrap;margin:22px 0 0}
.cityrow a{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 14px;border:1px solid var(--line2);border-radius:999px;font:500 13px var(--sans);color:var(--bone);text-decoration:none;background:var(--surf)}
.cityrow a:hover,.cityrow a:focus-visible{border-color:var(--c);outline:none}
.cityrow a .dot{width:8px;height:8px;border-radius:50%;background:var(--c);flex:none}
.cityrow a .k{font-size:10px;color:var(--c)}
.aidx-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:14px 20px;margin-bottom:16px}
.aidx-head .t{display:flex;align-items:flex-end;gap:14px;min-width:0}
.aidx-head .n{font:900 clamp(40px,4vw,54px)/.8 var(--disp);color:var(--c);flex:none}
.aidx-head h2{margin:0;font:800 clamp(26px,3vw,38px)/.95 var(--disp);text-transform:uppercase}
.aidx-head h2 a{color:var(--bone);text-decoration:none}
.aidx-head h2 a:hover{color:var(--c)}
.aidx-head p.k{margin:6px 0 0;color:var(--boned)}
.aidx-head .row{display:flex;gap:8px;flex-wrap:wrap}
.alist{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));gap:2px 28px}
.alist li{display:grid;grid-template-columns:10px 1fr;gap:10px;align-items:baseline;padding:9px 0;border-bottom:1px solid var(--line)}
.alist li:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--c);opacity:.5;transform:translateY(-1px)}
.alist li.plays:before{opacity:1;box-shadow:0 0 8px var(--c)}
.alist a{color:var(--bone);font-weight:600;text-decoration:none}
.alist a:hover{color:var(--c)}
.alist .k{display:block;margin-top:2px;font:500 10.5px/1.45 var(--mono);letter-spacing:.04em;color:var(--boned);text-transform:none}
.alist .k.on{display:inline;color:var(--acid);text-transform:uppercase;letter-spacing:.08em;margin-left:6px}
@media (max-width:760px){.cityrow{flex-wrap:nowrap;overflow-x:auto;margin:18px -16px 0;padding:2px 16px 10px;scrollbar-width:none}.cityrow::-webkit-scrollbar{display:none}.cityrow a{flex:0 0 auto}}
