/* ILN TTRPG — shared CosmicSundae / ILN theme.
   Dark near-black, violet/cyan accents, monospace. Mirrors the roster/overlay look. */
:root{
  --bg:#04060f; --bg2:#070a18; --panel:rgba(8,12,28,.66);
  --cyan:#2fe6ff; --violet:#b676ff; --red:#ff3b54; --green:#7CFFB0; --amber:#ffd86b; --gold:#ffd86b;
  --ink:#dff4ff; --dim:#8aa0b8; --line:rgba(47,230,255,.22);
}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:
  radial-gradient(1100px 700px at 80% -10%, rgba(182,118,255,.16), transparent 60%),
  radial-gradient(900px 600px at -10% 110%, rgba(47,230,255,.12), transparent 55%),
  var(--bg);
  color:var(--ink); font-family:'Consolas','SF Mono',ui-monospace,monospace; }
a{color:var(--cyan);text-decoration:none}
.wrap{max-width:1180px;margin:0 auto;padding:18px}

/* header */
.top{display:flex;align-items:center;gap:14px;padding:14px 18px;border:1px solid var(--line);
  border-radius:12px;background:linear-gradient(100deg,rgba(182,118,255,.14),rgba(47,230,255,.05));
  box-shadow:0 0 34px rgba(182,118,255,.14);margin-bottom:16px}
.top h1{margin:0;font-size:clamp(16px,2.2vw,22px);letter-spacing:3px;text-transform:uppercase;
  color:#fff;text-shadow:0 0 14px var(--violet)}
.top .sub{color:var(--cyan);font-size:11px;letter-spacing:2px;text-transform:uppercase;opacity:.8}
.top .spacer{flex:1}
.badge{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:#02040c;background:var(--cyan);
  padding:3px 8px;border-radius:3px;font-weight:700}
.badge.dm{background:var(--violet);color:#fff}
.badge.live{background:var(--red);color:#fff;animation:blink 1.3s steps(1) infinite}
@keyframes blink{50%{opacity:.35}}
.conn{font-size:11px;letter-spacing:1px;color:var(--dim)}
.conn.on{color:var(--green)} .conn.off{color:var(--red)}

/* layout */
.grid{display:grid;gap:16px}
.cols-2{grid-template-columns:1fr 1fr}
.cols-3{grid-template-columns:1.1fr 1fr .9fr}
@media(max-width:900px){.cols-2,.cols-3{grid-template-columns:1fr}}
@media(max-width:900px){.action-helper-grid,.dm-notes-grid{grid-template-columns:1fr}}
.panel{border:1px solid var(--line);border-radius:12px;background:var(--panel);padding:14px}
.panel h2{margin:0 0 10px;font-size:12px;letter-spacing:3px;text-transform:uppercase;
  color:var(--violet);border-bottom:1px dashed rgba(182,118,255,.35);padding-bottom:8px}

/* cards / character sheets */
.party{display:grid;gap:12px}
.pc{border:1px solid var(--line);border-radius:10px;padding:12px;background:rgba(6,9,22,.5);
  transition:box-shadow .2s,border-color .2s}
.pc.disconnected{opacity:.5}
.pc .nm{font-size:16px;color:#fff;letter-spacing:.5px;display:flex;align-items:center;gap:8px}
.pc .concept{color:var(--dim);font-size:12px;margin:3px 0 8px;font-style:italic}
.pc-head{display:flex;gap:10px;align-items:center;margin-bottom:8px}
.pc-av{border-radius:9px;object-fit:contain;border:1px solid var(--line);flex:none;background:#06101f;box-shadow:0 0 10px rgba(47,230,255,.12)}
.pc-av.ph{display:flex;align-items:center;justify-content:center;color:var(--dim);font-weight:800}
.av-edit{display:flex;gap:14px;align-items:center;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.av-edit .pc-av{width:72px;height:72px}
.dot{width:8px;height:8px;border-radius:50%;flex:none}
.dot.on{background:var(--green);box-shadow:0 0 7px var(--green)}
.dot.off{background:#46566b}

/* HP bar */
.hpbar{height:14px;border-radius:8px;background:rgba(6,9,22,.8);border:1px solid var(--line);
  overflow:hidden;position:relative;margin:4px 0}
.hpfill{height:100%;background:linear-gradient(90deg,#ff3b54,#ffd86b 60%,var(--green));
  transition:width .35s ease}
.hp-num{font-size:12px;color:var(--ink);display:flex;justify-content:space-between;align-items:center}

.stats{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.stat{border:1px solid var(--line);border-radius:6px;padding:4px 9px;font-size:12px;
  background:rgba(47,230,255,.06)}
.stat b{color:var(--cyan)}
.tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.tag{font-size:11px;padding:2px 8px;border-radius:20px;border:1px solid rgba(255,216,107,.45);
  color:var(--amber);background:rgba(255,216,107,.08)}
.tag.item{border-color:rgba(47,230,255,.4);color:var(--cyan);background:rgba(47,230,255,.07)}
.tag.skill{border-color:rgba(182,118,255,.45);color:var(--violet);background:rgba(182,118,255,.08)}

/* controls */
input,textarea,select,button{font-family:inherit}
input,textarea,select{background:rgba(6,9,22,.8);border:1px solid var(--line);color:var(--ink);
  border-radius:7px;padding:8px 10px;font-size:13px;width:100%}
input:focus,textarea:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 10px rgba(47,230,255,.25)}
label{font-size:11px;letter-spacing:1px;color:var(--dim);text-transform:uppercase;display:block;margin:8px 0 3px}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
button{cursor:pointer;border:1px solid var(--line);border-radius:8px;padding:8px 14px;font-size:13px;
  font-weight:600;letter-spacing:.5px;color:var(--ink);background:rgba(47,230,255,.08);transition:all .15s}
button:hover{background:rgba(47,230,255,.18);box-shadow:0 0 16px rgba(47,230,255,.2)}
button.primary{background:rgba(182,118,255,.16);border-color:rgba(182,118,255,.5);color:#fff}
button.primary:hover{background:rgba(182,118,255,.3)}
button.go{background:rgba(124,255,176,.14);border-color:rgba(124,255,176,.5);color:var(--green)}
button.danger{background:rgba(255,59,84,.12);border-color:rgba(255,59,84,.45);color:#ff7d8c}
button.mini{padding:4px 9px;font-size:11px}

/* dice */
.dicebar{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.dquick{padding:5px 11px;font-size:12px}
.dieflash{position:fixed;inset:0;display:none;align-items:center;justify-content:center;pointer-events:none;z-index:2000;background:radial-gradient(circle,rgba(7,13,32,.82),rgba(2,4,12,.35) 55%,transparent 78%)}
.dieflash.show{display:flex}
.roll-stage{min-width:min(620px,88vw);padding:24px;text-align:center;border:1px solid var(--violet);border-radius:18px;background:linear-gradient(145deg,rgba(18,10,42,.97),rgba(4,25,39,.97));box-shadow:0 0 70px rgba(182,118,255,.38)}
.roll-who{font-size:clamp(18px,3vw,30px);font-weight:800;color:#fff}.roll-label{margin:5px 0 18px;color:var(--cyan);font-size:12px;font-weight:800;letter-spacing:.2em}
.roll-dice{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}.roll-dice span{display:grid;place-items:center;width:clamp(48px,8vw,76px);aspect-ratio:1;border:2px solid rgba(255,255,255,.55);border-radius:13px;background:rgba(255,255,255,.08);font-size:clamp(25px,5vw,46px);font-weight:900;color:#fff;box-shadow:inset 0 0 18px rgba(255,255,255,.08)}
.roll-stage.rolling .roll-dice span{animation:diceTumble .28s ease-in-out infinite alternate}.roll-dice span.max{color:var(--gold);border-color:var(--gold);box-shadow:0 0 22px rgba(255,205,90,.45)}
.roll-result{min-height:54px;margin-top:18px;font-size:clamp(30px,6vw,58px);font-weight:950;letter-spacing:.08em;color:#fff;text-shadow:0 0 24px var(--cyan)}
.roll-stage.resolved{animation:rollImpact .45s cubic-bezier(.2,1.7,.35,1)}.roll-stage.crit .roll-result{color:var(--green);text-shadow:0 0 35px var(--green)}.roll-stage.fumble .roll-result{color:var(--red);text-shadow:0 0 35px var(--red)}
@keyframes diceTumble{from{transform:translateY(-4px) rotate(-8deg) scale(.96)}to{transform:translateY(4px) rotate(8deg) scale(1.05)}}
@keyframes rollImpact{0%{transform:scale(.88)}55%{transform:scale(1.05)}100%{transform:scale(1)}}
.roll-request{position:fixed;inset:0;z-index:2010;display:grid;place-items:center;background:rgba(2,4,12,.72)}
.request-card{width:min(520px,88vw);padding:26px;text-align:center;border:1px solid var(--cyan);border-radius:18px;background:linear-gradient(145deg,#17102f,#071d28);box-shadow:0 0 70px rgba(34,211,238,.32);animation:rollImpact .4s cubic-bezier(.2,1.7,.35,1)}
.request-card small{color:var(--cyan);letter-spacing:.18em}.request-card h2{font-size:30px;margin:8px}.request-card p{font-size:17px}.request-card strong{display:block;font-size:34px;color:var(--gold);margin:15px}.request-actions{display:flex;justify-content:center;gap:8px}
.library-card-stage{padding:2vh 3vw}.library-card-large{width:min(980px,94vw);max-height:96vh;overflow:auto;text-align:left}.library-card-large h2{font-size:clamp(30px,4vw,56px);margin:6px 0}.library-card-large p{font-size:clamp(16px,1.8vw,24px);line-height:1.45}.library-card-art{height:min(62vh,680px);margin:14px 0;background:#03050c;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:8px}.library-card-art img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}.library-card-large .request-actions{justify-content:flex-end}
.cast-focus-stage{display:none;position:fixed;inset:0;padding:3vh max(3vw,24px);background:#03040a;z-index:1500;place-items:center}.cast-focus-card{width:min(1320px,94vw);height:min(88vh,900px);display:grid;grid-template-columns:minmax(0,1.35fr) minmax(300px,.65fr);border:1px solid var(--violet);border-radius:8px;overflow:hidden;background:#070a18;box-shadow:0 0 60px rgba(0,0,0,.65)}.cast-focus-art{min-width:0;background:#02030a;display:flex;align-items:center;justify-content:center;font-size:90px;color:var(--dim)}.cast-focus-art img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}.cast-focus-copy{padding:clamp(24px,4vw,58px);display:flex;flex-direction:column;justify-content:center}.cast-focus-copy small{color:var(--cyan);letter-spacing:.18em}.cast-focus-copy h1{font-size:clamp(42px,6vw,84px);line-height:1;margin:12px 0 24px}.cast-focus-copy p{font-size:clamp(18px,2vw,28px);line-height:1.5;color:#dce5f2}
.director-cast{display:grid;gap:8px;margin-top:10px}.cast-row{display:grid;grid-template-columns:84px minmax(0,1fr);gap:12px;border:1px solid var(--line);padding:10px;background:rgba(5,8,20,.7);border-radius:8px}.cast-row.locked{opacity:.72}.cast-row.focused{border-color:var(--cyan);box-shadow:0 0 18px rgba(47,230,255,.18)}.cast-portrait{width:84px;height:96px;display:flex;align-items:center;justify-content:center;background:#03050c;border-radius:6px;overflow:hidden;color:var(--dim);font-size:24px}.cast-portrait img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}.cast-main h3{margin:2px 0;font-size:18px}.cast-main small{color:var(--cyan);letter-spacing:.12em}.cast-main p{margin:6px 0;color:var(--dim);font-size:12px}.cast-connections{margin-top:8px}.cast-connections summary{cursor:pointer;color:var(--amber);font-size:11px}.connection-row{display:grid;grid-template-columns:minmax(90px,1fr) 130px minmax(150px,auto);align-items:center;gap:8px;padding:5px 0;border-top:1px solid rgba(255,255,255,.05)}.connection-row span{display:flex;align-items:center;gap:5px}.gate-match{padding:16px;border:1px solid var(--cyan);background:rgba(5,24,35,.55);border-radius:8px}.gate-match small{color:var(--cyan);letter-spacing:.15em}.gate-match h3{font-size:clamp(22px,3vw,36px);margin:8px 0}.gate-match h3 span{color:var(--dim);font-size:.65em}.match-winner{color:var(--green);font-weight:700}.league-teams{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:7px;margin-top:10px}.league-teams div{padding:8px;border:1px solid var(--line);background:rgba(7,10,24,.65);border-radius:6px}.league-teams small{display:block;color:var(--dim);margin-top:3px}
.gate-table{width:100%;border-collapse:collapse;margin:10px 0 4px;font-size:12px}
.gate-table th,.gate-table td{padding:5px 6px;text-align:center;border-bottom:1px solid rgba(255,255,255,.06)}
.gate-table th{color:var(--cyan);font-size:10px;letter-spacing:.08em;text-transform:uppercase}
.gate-table th.l,.gate-table td.l{text-align:left}
.gate-table tbody tr:nth-child(-n+3) td{color:#fff}
.gate-table tbody tr:first-child td b{color:var(--green)}
.gate-table td b{color:var(--gold)}
.gate-venue{color:var(--gold);font-size:11px;letter-spacing:.06em;margin:2px 0 4px;opacity:.85}
.fx-list{display:flex;flex-direction:column;gap:6px;margin:8px 0 4px}
.fx-card{border:1px solid var(--line);border-radius:6px;padding:7px 9px;background:rgba(7,10,24,.5)}
.fx-row{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px}
.fx-teams b{color:#fff;font-weight:600}
.fx-odds{color:var(--cyan);font-variant-numeric:tabular-nums;font-size:12px}
.fx-res{color:var(--green);font-weight:700;font-size:12px}.fx-res.champ{color:var(--gold)}
.fx-betform{display:flex;gap:6px;margin-top:7px;align-items:center;flex-wrap:wrap}
.fx-betform select{flex:1;min-width:120px}
.fx-bet{margin-top:6px;font-size:12px;color:var(--gold)}
.gate-final-tag{color:var(--gold);font-weight:700;letter-spacing:.06em;margin:2px 0 6px}
.match-winner.gate-champ{color:var(--gold);font-weight:800;font-size:15px;text-shadow:0 0 14px rgba(240,190,80,.5)}
.vfx-list{display:flex;flex-direction:column;gap:3px;margin-top:4px;width:100%}
.vfx{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;font-size:13px}
.vfx span:first-child{text-align:right}.vfx span:last-child{text-align:left}
.vfx em{font-style:normal;color:var(--green);font-size:11px;white-space:nowrap}.vfx em.champ{color:var(--gold);font-weight:700}
.vchamp{color:var(--gold);font-weight:800;text-align:center;margin:2px 0 6px;letter-spacing:.04em}
.gate-match.is-final{border:1px solid var(--gold);box-shadow:0 0 0 1px rgba(240,190,80,.25) inset}
.gate-rewards{margin:12px 0 4px;padding:10px;border:1px dashed var(--line);border-radius:6px;background:rgba(7,10,24,.4)}
.gate-rewards small{color:var(--cyan);letter-spacing:.1em;display:block;margin-bottom:6px}
.viewer-match{flex-direction:column;align-items:stretch;gap:6px}
.viewer-match.is-final{border-color:var(--gold);box-shadow:0 0 22px rgba(240,190,80,.28)}
.viewer-match em.champ{color:var(--gold);font-weight:800}
@media(max-width:760px){.cast-focus-card{grid-template-columns:1fr;grid-template-rows:minmax(0,1.2fr) auto}.cast-focus-copy{padding:20px}.cast-focus-copy h1{font-size:38px;margin:8px 0}.connection-row{grid-template-columns:1fr}.cast-row{grid-template-columns:64px 1fr}.cast-portrait{width:64px;height:76px}}
.stream-timer{display:inline-flex;align-items:center;gap:12px;padding:7px 12px;border:1px solid var(--violet);border-radius:10px;background:rgba(12,8,31,.88)}.stream-timer small{letter-spacing:.12em;color:var(--dim)}.stream-timer b{font-size:24px;color:#fff}.stream-timer.urgent{border-color:var(--red);animation:timerPulse .7s infinite alternate}.stream-timer.urgent b{color:var(--red)}
.viewer-hud{display:flex;gap:12px;align-items:stretch;margin:10px 0 14px}.hud-focus{min-width:210px;padding:10px 14px;border:1px solid var(--cyan);border-radius:10px;background:rgba(5,24,35,.9)}.hud-focus small,.hud-pc small{display:block;color:var(--dim);font-size:9px}.hud-focus b{font-size:20px;color:#fff}.hud-party{display:flex;gap:7px;overflow-x:auto;flex:1}.hud-pc{display:flex;align-items:center;gap:7px;min-width:155px;padding:7px 9px;border:1px solid var(--line);border-radius:10px;background:rgba(7,10,24,.88)}.hud-pc span{min-width:0}.hud-pc b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hud-pc small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.condition-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}.condition-chip{font-size:9px;padding:3px 7px}.condition-chip.active{color:#fff;border-color:var(--red);background:rgba(255,59,84,.3)}
.success-spend{margin-top:8px;padding:8px;border:1px solid rgba(255,205,90,.35);border-radius:8px;color:var(--gold);font-size:11px}
.atlas-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px}.atlas-card{border:1px solid var(--line);border-radius:10px;padding:10px;background:rgba(5,9,22,.65)}.atlas-card summary{font-size:17px;font-weight:800;color:var(--cyan);cursor:pointer}.atlas-card p{color:var(--dim);font-size:11px;line-height:1.45}.atlas-place{border-top:1px solid var(--line);padding-top:8px;margin-top:8px}.atlas-place h3{margin:0;color:#fff}.atlas-npc{padding:6px;margin-top:5px;background:rgba(182,118,255,.08);border-radius:6px;font-size:11px}.atlas-npc small{display:block;color:var(--dim);margin-top:3px}
@media(max-width:700px){.viewer-hud{display:block}.hud-focus{margin-bottom:8px}}
@keyframes timerPulse{to{box-shadow:0 0 18px rgba(255,59,84,.55)}}
@media (prefers-reduced-motion:reduce){.roll-stage.rolling .roll-dice span,.roll-stage.resolved{animation:none}}

/* event log */
.log{max-height:340px;overflow-y:auto;display:flex;flex-direction:column;gap:5px}
.ev{font-size:12.5px;line-height:1.4;padding:6px 9px;border-left:2px solid var(--line);
  background:rgba(6,9,22,.4);border-radius:0 6px 6px 0}
.ev .k{font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--violet);margin-right:6px}
.ev.k-roll{border-left-color:var(--cyan)} .ev.k-roll .k{color:var(--cyan)}
.ev.k-dm{border-left-color:var(--violet)}
.ev.k-image{border-left-color:var(--amber)} .ev.k-image .k{color:var(--amber)}
.ev.k-system{opacity:.7}

/* map + scene */
#map{height:420px;border-radius:10px;border:1px solid var(--line);overflow:hidden;background:#0a0f1c}
.viewer #map{height:62vh}
.scene{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:rgba(6,9,22,.5);position:relative}
.scene img{width:100%;display:block}
.scene .cap{padding:8px 12px;font-size:13px;letter-spacing:1px;color:#fff;
  background:linear-gradient(0deg,rgba(4,6,15,.9),transparent);position:absolute;bottom:0;left:0;right:0}
.scene.empty{padding:40px;text-align:center;color:var(--dim);font-size:12px;letter-spacing:2px;text-transform:uppercase}
.gen-note{font-size:11px;color:var(--amber);margin-top:6px;min-height:14px}

/* character sheet sub-tabs + inline list editing */
.player-primary-grid{align-items:start}
#my-character-panel{border-color:rgba(47,230,255,.35);box-shadow:0 0 22px rgba(47,230,255,.08)}
.save-status{min-height:18px;margin:-4px 0 8px;font-size:11px;color:var(--dim)}
.save-status.saving{color:var(--amber)}
.save-status.ok{color:var(--green)}
.save-status.bad{color:#ff7d8c;font-weight:800}
.section-label{font-size:11px;color:var(--cyan);font-weight:900;letter-spacing:.12em;text-transform:uppercase;margin:2px 0 7px}
.subtabs{display:flex;gap:8px;margin-bottom:12px;overflow-x:auto;scrollbar-width:thin}
.subtab{padding:9px 12px;font-size:12px;font-weight:800;letter-spacing:.03em;color:var(--dim);
  cursor:pointer;border:1px solid var(--line);background:rgba(6,9,22,.55);border-radius:10px;width:auto;white-space:nowrap}
.subtab:hover{color:var(--ink);border-color:rgba(47,230,255,.45);background:rgba(47,230,255,.08);box-shadow:none}
.subtab.active{color:#fff;border-color:var(--cyan);background:rgba(47,230,255,.14);box-shadow:0 0 14px rgba(47,230,255,.14)}
.subtab{flex:none}
.subpane{display:none} .subpane.active{display:block}
.editlist{display:flex;flex-direction:column;gap:6px;margin:4px 0}
.editrow{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--line);
  border-radius:7px;background:rgba(6,9,22,.5)}
.editrow .txt{flex:1;font-size:13px;color:var(--ink)}
.editrow .x{flex:none;cursor:pointer;color:#ff7d8c;font-size:14px;background:none;border:none;padding:0 4px;width:auto}
.editrow .x:hover{color:#ff3b54;background:none;box-shadow:none}
.addrow{display:flex;gap:8px;margin-top:8px}
.addrow input{flex:1}
.addrow button{flex:none}
.emptylist{color:var(--dim);font-size:12px;font-style:italic;padding:8px 2px}
.statgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:8px 0}
.statedit{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:7px;padding:6px 10px;background:rgba(47,230,255,.05)}
.statedit label{margin:0;flex:1;color:var(--cyan)}
.statedit input{width:54px;text-align:center;padding:5px}
.field{margin-bottom:10px}
.hint{color:var(--dim);font-size:12px;line-height:1.5}

/* battle map */
.battle-banner{display:flex;align-items:center;gap:10px;justify-content:center;margin-bottom:12px;
  padding:8px;border:1px solid rgba(255,59,84,.5);border-radius:10px;
  background:linear-gradient(90deg,transparent,rgba(255,59,84,.14),transparent);
  color:#ff7d8c;letter-spacing:5px;text-transform:uppercase;font-weight:800;font-size:14px;
  animation:blink 1.6s steps(1) infinite}
.battle-layout{display:grid;grid-template-columns:minmax(720px,2fr) minmax(300px,.72fr);gap:16px;align-items:start}
.battle-layout>div{min-width:0}
#battlewrap{overflow:auto}
.hexmap{width:100%;height:auto;display:block;touch-action:none;user-select:none}
.hexmap .grid-cell{fill:rgba(10,16,30,.55);stroke:rgba(47,230,255,.22);stroke-width:1.2;transition:fill .1s}
.hexmap .grid-cell:hover{fill:rgba(47,230,255,.09)}
.hexmap .grid-cell.terrain{stroke:rgba(255,255,255,.32);stroke-width:1.5;fill-opacity:.78}
.hexmap .grid-cell.t-blocked,.hexmap .grid-cell.t-wall{stroke:rgba(255,205,215,.65);stroke-width:2.4}
.hexmap .grid-cell.t-door{stroke:rgba(255,216,107,.85);stroke-width:2.2;stroke-dasharray:7 4}
.hexmap .terrain-mark{fill:rgba(255,255,255,.72);font-weight:900;font-size:17px;text-anchor:middle;pointer-events:none;text-shadow:0 1px 3px #000}
.hexmap .terrain-mark.t-wall{font-size:12px}.hexmap .terrain-mark.t-difficult{font-size:20px}.hexmap .terrain-mark.t-door{fill:#ffd86b;font-size:18px}
.hexmap .token circle{stroke:rgba(255,255,255,.7);stroke-width:1.5;filter:drop-shadow(0 0 5px rgba(0,0,0,.6))}
.hexmap .token.k-enemy circle{stroke:#ffd1d8}
.hexmap.remove-mode .token circle{stroke:#ff7d8c;stroke-width:3;filter:drop-shadow(0 0 10px rgba(255,59,84,.6))}
.hexmap .token .tlbl{fill:#04060f;font-weight:800;font-size:15px;text-anchor:middle;dominant-baseline:middle;pointer-events:none}
.hexmap .token .thp{fill:#fff;font-size:9px;font-weight:900;text-anchor:middle;pointer-events:none;paint-order:stroke;stroke:#050711;stroke-width:3px}
.terrain-tools{margin-top:10px;padding:10px;border:1px solid var(--line);border-radius:9px;background:rgba(6,9,22,.55)}
.terrain-title{display:flex;align-items:center;gap:8px;margin-bottom:8px}.terrain-title b{font-size:12px;color:#fff}.terrain-title span{font-size:10px;color:var(--dim)}
.terrain-palette{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.terrain-brush{display:flex;align-items:center;gap:5px;padding:5px 8px;font-size:10px;width:auto}
.terrain-brush i{display:inline-flex;width:13px;height:13px;border:1px solid rgba(255,255,255,.45);border-radius:3px;align-items:center;justify-content:center;font-style:normal}
.terrain-brush.active{border-color:var(--cyan);color:#fff;box-shadow:0 0 8px rgba(47,230,255,.22)}
.terrain-custom{display:flex;align-items:center;gap:5px;margin:0;padding:3px 7px;border:1px solid var(--line);border-radius:6px;font-size:10px;color:var(--dim)}
.terrain-custom input{width:24px;height:22px;padding:1px;border:0;background:none}
.tokpalette{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.tok-manage{display:flex;flex-direction:column;gap:5px;margin-top:8px;max-height:180px;overflow-y:auto}
.tokrow{display:flex;align-items:center;gap:8px;font-size:12px;padding:5px 8px;border:1px solid var(--line);border-radius:7px;background:rgba(6,9,22,.4)}
.tokrow .sw{width:11px;height:11px;border-radius:50%;flex:none}
.tokrow .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tokrow.current{border-color:var(--cyan);box-shadow:0 0 12px rgba(34,211,238,.2)}
.token-gm-block{flex-basis:100%;margin-top:4px;padding:7px;border:1px solid rgba(255,179,71,.22);border-radius:7px;background:rgba(255,179,71,.06)}
.token-gm-actions{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-bottom:5px}
.token-gm-notes{font-size:11px;color:var(--amber);white-space:pre-wrap;line-height:1.4}
.token-manual-roll{display:inline-flex;align-items:center;gap:4px;margin-left:auto}
.token-manual-roll input{width:52px;padding:4px;text-align:center}
.init-edit{display:flex;align-items:center;gap:4px;color:var(--muted);font-size:9px;font-weight:800}
.init-edit input{width:48px;padding:4px;text-align:center}
.fight-builder,.initiative-coach,.initiative-box{margin-top:10px;padding:11px;border:1px solid var(--line);border-radius:10px;background:rgba(6,9,22,.58)}
.player-helper{margin-top:10px}.helper-card{padding:10px;border:1px solid rgba(182,118,255,.28);border-radius:10px;background:rgba(63,32,94,.13)}
.helper-card>b{display:block;color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em}.helper-card>span{display:block;color:var(--dim);font-size:11px;margin:2px 0 7px}
.helper-card select{margin-bottom:7px}.helper-actions{display:flex;gap:6px;flex-wrap:wrap}
.player-jumpbar{position:sticky;top:0;z-index:20;margin-bottom:12px}
.jump-card{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:rgba(5,8,20,.92);backdrop-filter:blur(10px);box-shadow:0 8px 24px rgba(0,0,0,.24)}
.jump-card span{color:var(--cyan);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}.jump-card select{max-width:260px}
.action-helper summary{cursor:pointer;list-style:none;font-weight:900;color:#fff;letter-spacing:.04em}
.action-helper summary span{display:inline-block;margin-left:8px;color:var(--dim);font-size:11px;font-weight:500;letter-spacing:0}
.action-helper-grid{display:grid;grid-template-columns:minmax(210px,.55fr) minmax(280px,1fr);gap:12px;margin-top:12px}
.action-card{padding:11px;border:1px solid rgba(47,230,255,.2);border-radius:9px;background:rgba(4,12,28,.66)}
.action-card h3{margin:0 0 8px;color:var(--cyan)}
.action-card p{margin:6px 0;font-size:12px;line-height:1.45}
.action-helper-footer{margin-top:9px;color:var(--amber);font-size:11px;line-height:1.45}
.player-roll-helper{margin:8px 0 10px;padding:10px;border:1px solid rgba(47,230,255,.24);border-radius:10px;background:rgba(4,12,28,.6)}
.player-roll-helper label{margin:0 0 6px;color:#fff;font-size:11px;letter-spacing:.08em;text-transform:uppercase}
#skill-roll-preview{white-space:normal;line-height:1.25;max-width:100%;text-align:left}
.quick-skill-buttons{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}
.dm-notes-grid{display:grid;grid-template-columns:1.1fr 1fr 1fr;gap:12px}
.dm-notes-grid textarea{margin-top:6px;min-height:96px;resize:vertical}
.select-search{margin-bottom:6px;border-color:rgba(47,230,255,.32);background:rgba(3,14,28,.78)}
.select-search::placeholder{color:rgba(138,160,184,.78)}
.star{min-width:30px;color:var(--amber);border-color:rgba(255,216,107,.45);background:rgba(255,216,107,.08)}
.star.on{color:#120800;background:var(--amber);border-color:var(--amber)}
.pinned-strip{display:flex;flex-wrap:wrap;gap:5px;margin:0 0 7px}
.pin-chip{border-color:rgba(255,216,107,.45);color:var(--amber);background:rgba(255,216,107,.08)}
.cast-row.pinned,.libcard.pinned{border-color:rgba(255,216,107,.5);box-shadow:0 0 14px rgba(255,216,107,.09)}
.table-status{margin:0 auto 12px;padding:13px 16px;max-width:760px;text-align:center;border:1px solid rgba(255,216,107,.55);border-radius:12px;background:linear-gradient(120deg,rgba(43,28,9,.92),rgba(13,18,34,.92));box-shadow:0 0 28px rgba(255,216,107,.18)}
.table-status small{display:block;color:var(--amber);font-size:10px;letter-spacing:.18em;font-weight:900}.table-status b{display:block;color:#fff;font-size:clamp(18px,2.5vw,28px);margin:3px 0}.table-status span{display:block;color:#dfe9ff;font-size:13px;line-height:1.4}
.fight-builder-head,.coach-title,.initiative-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:9px}
.fight-builder-head b,.coach-title b,.initiative-head b{color:#fff;font-size:13px;letter-spacing:.08em;text-transform:uppercase}
.fight-builder-head span,.coach-title span,.initiative-head span{display:block;color:var(--dim);font-size:11px;margin-top:2px}
.fight-player-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:7px}
.fight-player{display:flex;align-items:center;gap:8px;padding:8px;border:1px solid var(--line);border-radius:9px;background:rgba(10,16,33,.7);cursor:pointer}
.fight-player.on{border-color:var(--cyan);box-shadow:0 0 12px rgba(34,211,238,.12)}
.fight-player input{width:auto}.fight-player span{font-weight:800}.fight-player small{margin-left:auto;color:var(--dim);font-size:10px}
.quick-fight-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px;margin-top:11px}
.quick-fight-grid b{display:block;margin-bottom:6px;color:var(--amber);font-size:12px}
.quick-fight-buttons{display:flex;flex-wrap:wrap;gap:6px}.quick-fight-buttons button{padding:7px 9px;font-size:11px}
.spotlight-box{margin-top:11px;padding:10px;border:1px solid rgba(182,118,255,.25);border-radius:9px;background:rgba(63,32,94,.16)}
.spotlight-box>b{color:#fff}.spotlight-row{display:flex;align-items:center;gap:7px;margin-top:7px;flex-wrap:wrap}
.spotlight-row span{min-width:105px;font-weight:800}.spotlight-row input{flex:1;min-width:210px;padding:7px}
.coach-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px}
.coach-step{display:flex;align-items:center;gap:9px;padding:9px;border:1px solid var(--line);border-radius:9px;background:rgba(7,12,28,.72)}
.coach-step>span{display:grid;place-items:center;width:25px;height:25px;border-radius:50%;background:rgba(255,255,255,.08);color:var(--dim);font-weight:900;flex:none}
.coach-step.done{border-color:rgba(124,255,176,.55)}.coach-step.done>span{background:var(--green);color:#03100a}
.coach-step.warn{border-color:rgba(255,179,71,.6)}.coach-step.warn>span{background:var(--amber);color:#160a00}
.coach-step div{flex:1;min-width:0}.coach-step b{color:#fff}.coach-step small{display:block;color:var(--dim);font-size:10px;line-height:1.35;margin-top:2px}
.coach-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px;color:var(--dim);font-size:11px}
.initiative-track{display:flex;gap:7px;overflow-x:auto;padding:8px 2px 10px;margin:8px 0}
.initiative-reveal{position:relative;display:grid;grid-template-columns:auto auto 1fr;align-items:center;gap:9px;overflow:hidden;margin:8px 0;padding:11px 14px;border:1px solid var(--violet);border-radius:10px;background:linear-gradient(110deg,rgba(29,13,54,.96),rgba(7,30,44,.96));box-shadow:0 0 24px rgba(182,118,255,.28);animation:initiative-arrive .22s ease-out}
.initiative-reveal:after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 20%,rgba(255,255,255,.14),transparent 70%);transform:translateX(-100%);animation:initiative-sweep .65s linear infinite}
.initiative-reveal strong{z-index:1;letter-spacing:.18em;color:#fff}.initiative-reveal small{z-index:1;color:var(--cyan)}
.initiative-die{z-index:1;font-size:27px;color:var(--gold);filter:drop-shadow(0 0 7px rgba(255,205,90,.7));animation:initiative-tumble .38s ease-in-out infinite}
.initiative-reveal.resolved{border-color:var(--cyan);animation:initiative-lock .35s ease-out}.initiative-reveal.resolved:after,.initiative-reveal.resolved .initiative-die{animation:none}
.initiative-self{padding:4px 0 2px}
.initiative-chip{display:flex;align-items:center;gap:6px;white-space:nowrap;padding:7px 9px;background:rgba(7,12,28,.82);border:1px solid var(--line);border-radius:9px;color:var(--ink)}
.initiative-chip:disabled{opacity:1;cursor:default}
.initiative-chip i{width:9px;height:9px;border-radius:50%;flex:none}
.initiative-chip b{color:var(--gold);font-size:15px}
.initiative-chip em{font-style:normal;font-size:8px;font-weight:900;color:var(--cyan);letter-spacing:.08em}
.initiative-chip.active{border-color:var(--cyan);background:rgba(17,55,70,.7);box-shadow:0 0 14px rgba(34,211,238,.25)}
.initiative-chip.initiative-landed{animation:initiative-land .48s cubic-bezier(.2,1.8,.4,1)}
.init-rank{color:var(--muted);font-size:10px}.init-name{font-weight:700}.initiative-empty{padding:9px 3px;color:var(--muted);font-size:11px}
.initiative-pending,.initiative-waiting{display:flex;align-items:center;gap:6px;flex-wrap:wrap;color:var(--dim);font-size:11px}
.initiative-pending span,.initiative-waiting span{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:999px;padding:4px 8px;background:rgba(255,255,255,.04)}
.initiative-pending i{width:8px;height:8px;border-radius:50%}.initiative-waiting b{color:var(--amber);margin-right:3px}
.hexmap .token.active-turn circle{stroke:var(--cyan);stroke-width:4;filter:drop-shadow(0 0 8px var(--cyan))}
.offmap-player{margin-bottom:10px;padding:10px;border:1px solid rgba(182,118,255,.35);border-radius:9px;background:rgba(63,32,94,.18)}
.offmap-player b{display:block;color:#fff}.offmap-player span{display:block;color:var(--dim);font-size:12px;line-height:1.4;margin-top:3px}
@keyframes initiative-arrive{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}
@keyframes initiative-tumble{0%{transform:rotate(-18deg) scale(.9)}50%{transform:rotate(22deg) scale(1.18)}100%{transform:rotate(-18deg) scale(.9)}}
@keyframes initiative-sweep{to{transform:translateX(100%)}}
@keyframes initiative-lock{50%{transform:scale(1.025);box-shadow:0 0 35px rgba(34,211,238,.5)}}
@keyframes initiative-land{0%{transform:scale(.8)}55%{transform:scale(1.13);border-color:var(--gold)}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.initiative-reveal,.initiative-reveal:after,.initiative-die,.initiative-chip.initiative-landed{animation:none}}

/* library / codex */
.libgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.libcard{border:1px solid var(--line);border-radius:10px;padding:11px;background:rgba(6,9,22,.5)}
.libcard .lt{font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--violet)}
.libcard .ln{font-size:15px;color:#fff;margin:2px 0 4px;font-weight:600}
.libcard .ld{font-size:12px;color:var(--dim);line-height:1.4;max-height:54px;overflow:hidden}
.libcard .lacts{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}
.library-sections{display:grid;gap:22px}.library-section{min-width:0}.library-section-head{display:flex;align-items:center;gap:10px;border-bottom:1px dashed rgba(182,118,255,.35);padding-bottom:7px;margin-bottom:10px}.library-section-head h3{margin:0;color:#fff;font-size:13px;letter-spacing:2px;text-transform:uppercase}.library-section-head span{min-width:24px;text-align:center;color:var(--cyan);font-size:11px;border:1px solid rgba(47,230,255,.28);border-radius:999px;padding:2px 7px}.lib-thumb{width:100%;aspect-ratio:16/10;margin-bottom:9px;background:#03050c;border:1px solid rgba(255,255,255,.06);border-radius:6px;overflow:hidden;display:flex;align-items:center;justify-content:center;color:var(--dim);font-size:28px}.lib-thumb img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}
.library-toolbar{display:grid;grid-template-columns:minmax(180px,1fr) minmax(150px,.55fr);gap:8px;align-items:center;margin-bottom:16px;position:sticky;top:0;z-index:3;padding:8px;background:rgba(4,6,16,.94);border:1px solid var(--line);border-radius:7px}.library-toolbar input,.library-toolbar select{margin:0}.library-toolbar span{grid-column:1/-1;font-size:10px}
.shop-section{margin-top:14px}
.shop-section-head{display:flex;align-items:center;gap:10px;border-bottom:1px dashed rgba(182,118,255,.35);padding-bottom:6px;margin-bottom:8px}
.shop-section-head h3{margin:0;color:#fff;font-size:12px;letter-spacing:2px;text-transform:uppercase}
.shop-section-head span{color:var(--dim);font-size:11px}
.shop-mech-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:8px 0}
.gear-meta{display:flex;gap:6px;flex-wrap:wrap;margin:7px 0 0}
.gear-meta span{border:1px solid rgba(47,230,255,.24);border-radius:999px;padding:2px 7px;color:#dff8ff;background:rgba(47,230,255,.07);font-size:10px}
.gear-effect,.gear-desc{color:#cfe6ff;font-size:12px;line-height:1.45;margin-top:6px}
.gear-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin-top:8px}
.gear-card{border:1px solid var(--line);border-radius:10px;background:rgba(6,9,22,.5);padding:10px}
.gear-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
.gear-head b{color:#fff;font-size:13px}.gear-head span{color:var(--violet);font-size:10px;text-transform:uppercase;letter-spacing:1px}
.gear-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin:6px 0 8px}
.gear-summary span{border:1px solid var(--line);border-radius:8px;padding:7px;color:var(--dim);font-size:11px;background:rgba(6,9,22,.35)}
.gear-summary b{display:block;color:#fff;font-size:12px;margin-top:2px}
.note-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.note-card{border:1px solid var(--line);border-radius:10px;background:rgba(6,9,22,.45);padding:10px}
.note-card input{font-weight:700;color:#fff;margin-bottom:7px}
@media(max-width:700px){.shop-mech-grid,.gear-summary,.library-toolbar{grid-template-columns:1fr}.library-toolbar span{grid-column:auto}}

/* GM guide accordion */
.gm-item{border:1px solid var(--line);border-radius:9px;margin-bottom:8px;background:rgba(6,9,22,.45);overflow:hidden}
.gm-item.open{border-color:rgba(47,230,255,.4)}
.gm-head{display:flex;justify-content:space-between;align-items:center;padding:11px 14px;cursor:pointer;
  font-size:14px;font-weight:600;color:#fff;letter-spacing:.3px}
.gm-head:hover{background:rgba(47,230,255,.06)}
.gm-item.open .gm-head{color:var(--cyan)}
.gm-caret{color:var(--cyan);font-size:12px}
.gm-body{padding:2px 14px 12px;color:#cfe6ff;font-size:13.5px;line-height:1.6}
.gm-body strong{color:#fff} .gm-body ul{margin:6px 0 6px 2px;padding-left:18px} .gm-body li{margin:3px 0}
.gm-body code{background:rgba(47,230,255,.1);padding:1px 5px;border-radius:3px;color:var(--cyan)}
.gm-coach{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0 0 14px}
.coach-card{border:1px solid rgba(47,230,255,.22);border-radius:10px;background:rgba(4,10,24,.48);padding:11px}
.coach-card h3{margin:0 0 7px;color:#fff;font-size:12px;letter-spacing:1.5px;text-transform:uppercase}
.coach-card ul{margin:0;padding-left:18px;color:#cfe6ff;font-size:12px;line-height:1.45}
.coach-card li{margin:4px 0}
.coach-card.compact{margin-top:10px}
.ship-later summary{cursor:pointer;list-style:none;color:var(--dim);font-weight:900;letter-spacing:.08em;text-transform:uppercase}
.ship-later summary span{margin-left:8px;color:var(--amber);font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:none}
@media(max-width:900px){.gm-coach{grid-template-columns:1fr}}
@media(max-width:1100px){.battle-layout{grid-template-columns:1fr}}

/* printable player + DM cheat sheets */
.sheet-modal{position:fixed;inset:0;z-index:70;background:rgba(2,4,12,.9);overflow-y:auto;padding:24px 14px}
.sheet-dialog{max-width:1050px;margin:0 auto}
.cheat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(225px,1fr));gap:10px;margin-top:14px}
.cheat-card{position:relative;border:1px solid var(--line);border-radius:10px;padding:12px 13px;background:rgba(6,9,22,.62);overflow:hidden}
.cheat-card:before{content:'';position:absolute;inset:0 auto 0 0;width:3px;background:var(--cyan)}
.cheat-card.green:before{background:var(--green)} .cheat-card.red:before{background:var(--red)}
.cheat-card.amber:before{background:var(--amber)} .cheat-card.violet:before{background:var(--violet)}
.cheat-card h3{margin:0 0 7px;color:#fff;font-size:14px;letter-spacing:.5px}
.cheat-card ul{margin:0;padding-left:17px;color:#cfe1f7;font-size:12px;line-height:1.48}
.cheat-card li{margin:3px 0}
.cheat-footer{margin-top:12px;padding:10px 12px;border:1px solid rgba(47,230,255,.25);border-radius:8px;color:#cfe6ff;font-size:12px;background:rgba(47,230,255,.05)}
@media(max-width:600px){.sheet-modal{padding:8px}.cheat-grid{grid-template-columns:1fr}}
@media print{
  body{background:#fff!important;color:#111!important}.top,.subtabs,.conn,button{display:none!important}
  .panel,.cheat-card{background:#fff!important;color:#111!important;box-shadow:none!important;border-color:#aaa!important}
  .cheat-card h3,.cheat-card li,.cheat-footer,.muted{color:#111!important}
  .sheet-modal{position:static!important;display:block!important;background:#fff!important;padding:0!important}
  .sheet-dialog{max-width:none!important}.cheat-grid{grid-template-columns:repeat(2,1fr)!important}
}

/* rulebook (rendered markdown) */
.rule{line-height:1.65;color:#cfe6ff;font-size:14px;max-width:760px}
.rule h1{font-size:22px;color:#fff;text-shadow:0 0 12px var(--violet);margin:14px 0 8px;letter-spacing:1px}
.rule h2{font-size:17px;color:var(--cyan);margin:14px 0 6px;letter-spacing:.5px}
.rule h3{font-size:14px;color:var(--violet);margin:10px 0 4px}
.rule strong{color:#fff}
.rule code{background:rgba(47,230,255,.1);padding:1px 5px;border-radius:3px;color:var(--cyan);font-size:13px}
.rule ul{margin:6px 0 6px 4px;padding-left:18px} .rule li{margin:3px 0}
/* Coriolis: darkness points, pool dice, derived vitals */
.darkness{display:inline-flex;align-items:center;gap:8px;border:1px solid rgba(138,79,208,.5);border-radius:10px;
  padding:6px 12px;background:linear-gradient(100deg,rgba(40,10,60,.6),rgba(10,6,22,.4))}
.darkness .dval{font-size:20px;font-weight:800;color:#caa6ff;text-shadow:0 0 10px rgba(138,79,208,.7)}
.darkness .dlbl{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--violet)}
.mp-num{font-size:12px;color:var(--ink);display:flex;justify-content:space-between;align-items:center}
.mpbar{height:12px;border-radius:8px;background:rgba(6,9,22,.8);border:1px solid var(--line);overflow:hidden;margin:4px 0}
.mpfill{height:100%;background:linear-gradient(90deg,#6a4fd0,#b676ff)}
.pool-dice{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.pd{width:30px;height:30px;border-radius:6px;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:14px;border:1px solid var(--line);background:rgba(6,9,22,.7);color:var(--dim)}
.pd.six{background:var(--green);color:#04060f;border-color:#7CFFB0;box-shadow:0 0 8px rgba(124,255,176,.5)}

/* Coriolis combat / ship helper */
.refgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:8px}
.refcard{border:1px solid var(--line);border-radius:9px;padding:10px;background:rgba(6,9,22,.48)}
.refcard .ref-k{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--cyan)}
.refcard .ref-n{font-size:15px;color:#fff;font-weight:800;margin:2px 0}
.refcard .ref-d{font-size:12px;color:var(--dim);line-height:1.35}
.shiptop{display:flex;align-items:baseline;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.shiptop b{font-size:18px;color:#fff;text-shadow:0 0 10px rgba(182,118,255,.35)}
.shiptop span{font-size:11px;color:var(--dim);letter-spacing:1px;text-transform:uppercase}
.shipstats{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:6px;margin-bottom:10px}
.shipstats span{border:1px solid var(--line);border-radius:7px;padding:6px 8px;background:rgba(47,230,255,.05);
  font-size:11px;color:var(--dim);text-transform:uppercase;letter-spacing:1px}
.shipstats b{display:block;color:var(--cyan);font-size:14px;margin-top:2px;text-transform:none;letter-spacing:0}
.shiproles{display:grid;gap:6px}
.shiprole,.crew-edit{border:1px solid var(--line);border-radius:9px;background:rgba(6,9,22,.45);padding:9px}
.shiprole{display:flex;justify-content:space-between;gap:10px;align-items:center}
.shiprole b,.crew-edit b{color:#fff}
.shiprole span,.crew-edit span{display:block;color:var(--cyan);font-size:10px;letter-spacing:1px;text-transform:uppercase;margin-top:2px}
.shiprole strong{color:var(--amber);font-size:12px;text-align:right}
.critnote{margin-top:10px;border-left:2px solid var(--red);padding-left:10px}
.ship-edit-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}
.crew-edit{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(140px,.65fr);gap:10px;align-items:start;margin-bottom:8px}
.crew-edit p{margin:6px 0 0;color:var(--dim);font-size:12px;line-height:1.35}
.flowlist{margin:0;padding-left:20px;color:#cfe6ff;font-size:12.5px;line-height:1.5}
.flowlist li{margin:5px 0}
@media(max-width:700px){.crew-edit{grid-template-columns:1fr}}
@media(max-width:700px){.wrap{padding:10px}.top{padding:10px;gap:8px;flex-wrap:wrap}.top .spacer{display:none}.top h1{width:100%}.panel{padding:11px}.row>button{max-width:100%}}

/* character creation wizard */
.wiz-steps{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.wiz-step{font-size:10px;letter-spacing:1px;text-transform:uppercase;color:var(--dim);padding:4px 9px;
  border:1px solid var(--line);border-radius:14px;background:rgba(6,9,22,.4)}
.wiz-step.cur{color:#fff;border-color:var(--cyan);background:rgba(47,230,255,.12)}
.wiz-step.done{color:var(--green);border-color:rgba(124,255,176,.4)}
.wiz-body{min-height:220px}
.wiz-help{color:#cfe6ff;font-size:13.5px;line-height:1.5;margin:0 0 12px}
.wiz-help b{color:#fff}
.wiz-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:8px;margin:8px 0}
.wiz-grid.sm{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.wiz-card{border:1px solid var(--line);border-radius:9px;padding:10px;cursor:pointer;background:rgba(6,9,22,.5);transition:all .15s}
.wiz-card:hover{border-color:var(--cyan)}
.wiz-card.sel{border-color:var(--violet);background:rgba(182,118,255,.14);box-shadow:0 0 14px rgba(182,118,255,.2)}
.wiz-card .wn{font-size:14px;color:#fff;font-weight:700}
.wiz-card .wb{font-size:11.5px;color:var(--dim);line-height:1.35;margin-top:3px}
.wiz-card .wk{font-size:10px;color:var(--cyan);margin-top:5px;letter-spacing:.5px}
.wiz-attrs{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.wiz-attr{border:1px solid var(--line);border-radius:9px;padding:10px;background:rgba(47,230,255,.05);text-align:center}
.wiz-attr .aa{font-size:14px;color:var(--cyan);font-weight:700}
.wiz-attr .ab{font-size:11px;color:var(--dim);margin:3px 0 8px;line-height:1.3}
.astep{display:flex;align-items:center;justify-content:center;gap:10px}
.astep .aval{font-size:20px;font-weight:800;color:#fff;min-width:24px}
.wiz-derived{margin-top:12px;font-size:13px;color:var(--dim)}
.wiz-derived b.ok{color:var(--green)} .wiz-derived b.warn{color:var(--amber)} .wiz-derived b{color:#fff}
.wiz-skills{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px}
.wiz-skill{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:rgba(6,9,22,.45)}
.wiz-skill.recommended{border-color:rgba(124,255,176,.45);background:rgba(124,255,176,.055)}
.wiz-skill.recommended .sk-n{color:var(--green)}
.specialty-skills{display:flex;gap:4px;flex-wrap:wrap;margin-top:8px}
.specialty-skills span{font-size:9px;color:var(--green);border:1px solid rgba(124,255,176,.25);border-radius:10px;padding:2px 6px;background:rgba(124,255,176,.06)}
.build-playstyle{margin:9px 0;padding:9px 10px;border-left:3px solid var(--green);background:rgba(124,255,176,.055);color:#cfe6df;font-size:12px}
.wiz-skill .sk-h{display:flex;justify-content:space-between;align-items:baseline}
.wiz-skill .sk-n{font-size:13px;color:#fff;font-weight:600}
.wiz-skill .sk-a{font-size:10px;color:var(--cyan);text-transform:uppercase}
.wiz-skill .sk-b{font-size:11px;color:var(--dim);margin:2px 0 6px;line-height:1.3}
.wiz-nav{display:flex;align-items:center;gap:12px;margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}
.wiz-nav .primary{margin-left:auto}
.wiz-note{color:var(--amber);font-size:12px}
.wiz-autosave{margin-left:auto;color:var(--green);font-size:11px}
.wiz-note+.wiz-autosave+.primary{margin-left:0}
.wiz-review{border:1px solid var(--line);border-radius:10px;padding:14px;background:rgba(6,9,22,.5);font-size:13.5px;line-height:1.6}
.codebig{font-size:clamp(22px,5vw,40px);letter-spacing:8px;color:#fff;text-shadow:0 0 16px var(--violet);font-weight:800}
.center{text-align:center}
.pill{display:inline-block;border:1px solid var(--line);border-radius:20px;padding:3px 12px;font-size:12px;color:var(--cyan);margin:2px}
.muted{color:var(--dim)}
.pulse-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:8px}
.pulse-item{min-width:0;border:1px solid var(--line);border-radius:8px;padding:9px 10px;background:rgba(6,9,22,.5)}
.pulse-item small{display:block;color:var(--dim);font-size:9px;letter-spacing:1.2px;text-transform:uppercase}
.pulse-item b{display:block;margin-top:3px;color:#fff;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pulse-item.good{border-color:rgba(124,255,176,.42)}.pulse-item.good b{color:var(--green)}
.pulse-item.warn{border-color:rgba(255,216,107,.48)}.pulse-item.warn b{color:var(--amber)}
.pulse-item.live{border-color:rgba(182,118,255,.55);box-shadow:inset 0 0 15px rgba(182,118,255,.08)}
.zephy-quick{margin-bottom:8px}.zephy-quick button{font-size:11px;padding:5px 9px}
.zephy-answer{display:none;margin-top:10px;padding:11px 12px;border-left:3px solid var(--violet);background:rgba(182,118,255,.07);color:#dff4ff;white-space:pre-wrap;line-height:1.5;font-size:12px}
.zephy-answer:not(:empty){display:block}
button:disabled{cursor:not-allowed;opacity:.48;box-shadow:none}
button:focus-visible,.subtab:focus-visible,a:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.scene-card{margin-bottom:16px}
.leaflet-popup-content{font-family:inherit}
.tonight-locations { display: none; }
.met-person{display:grid;grid-template-columns:54px minmax(0,1fr);gap:9px;padding:8px 0;border-bottom:1px solid var(--line)}
.met-person>img,.met-person>span{width:54px;height:62px;object-fit:contain;border-radius:5px;background:#03050c;display:grid;place-items:center;color:var(--dim)}
.met-person b,.met-person small{display:block}.met-person small{color:var(--cyan);font-size:10px}.met-person p{color:var(--dim);font-size:11px;line-height:1.35;margin:3px 0}
.viewer-match{display:flex;align-items:center;gap:12px;margin:8px 0 14px;padding:8px 12px;border:1px solid var(--line);background:rgba(7,10,24,.86);border-radius:6px}
.viewer-match small{color:var(--cyan);letter-spacing:.12em}.viewer-match b{font-size:17px}.viewer-match b span{color:var(--dim);font-size:.75em}.viewer-match em{margin-left:auto;color:var(--green);font-style:normal;font-size:11px}

/* Stable media sizing: library portraits stay fully visible inside every card. */
.lib-thumb{position:relative}
.lib-thumb img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}
.battle-setup-callout{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:10px;padding:12px;border:1px solid var(--amber);background:rgba(255,179,71,.08);border-radius:7px}
.battle-setup-callout span{display:block;color:var(--dim);font-size:11px;margin-top:3px}
