:root{
  --bak:#03060f;
  --glas:rgba(9,16,28,.88);
  --glas-kant:rgba(140,190,255,.16);
  --text:#e8f0fb;
  --svag:#8fa3bd;
  --accent:#69d0ff;
  --guld:#ffd27d;
  --skugga:0 18px 50px rgba(0,0,0,.55);
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%;margin:0;background:var(--bak);color:var(--text);overflow:hidden;
  font:14px/1.45 "Segoe UI",Inter,system-ui,-apple-system,sans-serif;
  -webkit-font-smoothing:antialiased}
canvas#duk{position:fixed;inset:0;width:100%;height:100%;display:block;cursor:grab}
canvas#duk.drar{cursor:grabbing}
button{font:inherit;color:inherit;cursor:pointer}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:rgba(120,160,210,.28);border-radius:9px}
::-webkit-scrollbar-track{background:transparent}

/* ---------------------------------------------------------- laddning/start */
#ladda{position:fixed;inset:0;display:grid;place-items:center;z-index:50;
  background:radial-gradient(circle at 50% 45%,#0b1830 0%,#03060f 70%)}
.ladda-inner{text-align:center}
.ladda-inner h1{margin:22px 0 6px;font-size:26px;font-weight:300;letter-spacing:.22em;text-transform:uppercase}
.ladda-inner p{margin:0;color:var(--svag);letter-spacing:.05em}
.ring{width:64px;height:64px;margin:0 auto;border-radius:50%;
  border:1px solid rgba(105,208,255,.25);border-top-color:var(--accent);
  animation:snurr 1.15s linear infinite;box-shadow:0 0 40px rgba(60,150,255,.25) inset}
@keyframes snurr{to{transform:rotate(360deg)}}

#start{position:fixed;inset:0;display:grid;place-items:center;z-index:40;
  background:radial-gradient(circle at 62% 50%,rgba(3,8,20,.15) 0%,rgba(2,5,12,.86) 62%);
  animation:tona .8s ease both}
@keyframes tona{from{opacity:0}to{opacity:1}}
.start-kort{max-width:560px;padding:38px 40px 30px;border-radius:20px;text-align:left;
  background:linear-gradient(160deg,rgba(16,26,44,.82),rgba(8,14,26,.78));
  border:1px solid var(--glas-kant);box-shadow:var(--skugga);backdrop-filter:blur(14px)}
.start-etikett{font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--accent);opacity:.85}
.start-kort h1{margin:10px 0 14px;font-size:52px;font-weight:200;letter-spacing:.02em;
  background:linear-gradient(100deg,#fff 10%,#8fd8ff 55%,#ffd27d 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.start-brod{margin:0 0 22px;color:#c3d3e8;font-size:14.5px;line-height:1.65}
.start-brod b{color:#fff;font-weight:600}
.start-siffror{display:flex;gap:26px;margin-bottom:26px}
.start-siffror div{display:flex;flex-direction:column}
.start-siffror b{font-size:26px;font-weight:300;color:var(--guld)}
.start-siffror span{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--svag)}
#start-knapp{padding:12px 26px;border-radius:999px;border:1px solid rgba(120,215,255,.45);
  background:linear-gradient(120deg,rgba(46,140,220,.35),rgba(120,215,255,.18));
  letter-spacing:.06em;transition:.25s}
#start-knapp:hover{background:linear-gradient(120deg,rgba(60,170,255,.55),rgba(150,230,255,.3));
  box-shadow:0 0 28px rgba(80,190,255,.35);transform:translateY(-1px)}
.start-fot{margin-top:18px;font-size:11px;color:#5d708c}

/* ------------------------------------------------------------------ topprad */
#topp{position:fixed;top:0;left:0;right:0;height:56px;z-index:20;display:flex;
  align-items:center;justify-content:space-between;gap:16px;padding:0 16px;
  background:linear-gradient(180deg,rgba(3,7,16,.85),rgba(3,7,16,0));pointer-events:none}
#topp>*{pointer-events:auto}
#smulor{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--svag);flex-wrap:wrap}
#smulor .smula{cursor:pointer;padding:3px 9px;border-radius:8px;transition:.2s;white-space:nowrap}
#smulor .smula:hover{background:rgba(120,180,255,.12);color:#fff}
#smulor .smula.sist{color:#fff;background:rgba(120,180,255,.14)}
#smulor .pil{opacity:.4}
.topp-verktyg{display:flex;align-items:center;gap:8px}
.knapp{padding:7px 14px;border-radius:9px;border:1px solid var(--glas-kant);
  background:var(--glas);backdrop-filter:blur(10px);font-size:12.5px;letter-spacing:.04em;
  color:#cfe0f5;transition:.2s}
.knapp:hover{border-color:rgba(120,215,255,.45);color:#fff;background:rgba(30,60,100,.6)}
.knapp.pa{border-color:var(--guld);color:var(--guld)}
.sok{position:relative;display:flex;align-items:center;gap:7px;padding:0 12px;height:34px;
  border-radius:9px;border:1px solid var(--glas-kant);background:var(--glas);backdrop-filter:blur(10px);color:var(--svag)}
.sok input{width:230px;border:0;background:none;outline:none;color:var(--text);font-size:13px}
.sok input::placeholder{color:#68809d}
#sokresultat{position:absolute;top:42px;right:0;width:420px;max-height:52vh;overflow:auto;
  border-radius:12px;background:rgba(9,15,27,.95);border:1px solid var(--glas-kant);
  box-shadow:var(--skugga);display:none;padding:6px}
#sokresultat.visa{display:block}
.traff{padding:9px 11px;border-radius:9px;cursor:pointer;display:flex;gap:10px;align-items:baseline}
.traff:hover,.traff.vald{background:rgba(105,208,255,.13)}
.traff .t{flex:1;color:#e9f2ff;font-size:13px}
.traff .m{font-size:11px;color:var(--svag);white-space:nowrap}
.traff .r{font-size:11px;color:var(--guld);min-width:28px;text-align:right}

/* -------------------------------------------------------------- vänsterpanel */
#panel{position:fixed;left:14px;top:66px;bottom:104px;width:310px;z-index:15;display:flex;
  flex-direction:column;border-radius:16px;background:var(--glas);backdrop-filter:blur(16px);
  border:1px solid var(--glas-kant);box-shadow:var(--skugga);overflow:hidden;
  transition:transform .35s cubic-bezier(.4,0,.2,1),opacity .3s}
#panel.dold{transform:translateX(-340px);opacity:0;pointer-events:none}
.panel-rubrik{display:flex;align-items:baseline;justify-content:space-between;padding:14px 16px 8px}
.panel-rubrik h2{margin:0;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);font-weight:600}
#panel-antal{font-size:11px;color:var(--svag)}
.filter{padding:6px 16px 12px;border-bottom:1px solid rgba(120,170,230,.12)}
.filter-rubrik{font-size:11px;color:var(--svag);margin:8px 0 6px;letter-spacing:.04em}
.flisrad{display:flex;flex-wrap:wrap;gap:5px}
.flis{padding:4px 9px;border-radius:999px;font-size:11px;border:1px solid transparent;
  background:rgba(255,255,255,.06);color:#b9cbe2;cursor:pointer;transition:.18s;display:flex;gap:5px;align-items:center}
.flis .prick{width:7px;height:7px;border-radius:50%}
.flis.av{opacity:.32;text-decoration:line-through}
.flis:hover{background:rgba(255,255,255,.12)}
input[type=range]{width:100%;accent-color:var(--accent);margin:2px 0 4px}
.kryss{display:flex;align-items:center;gap:8px;font-size:12px;color:#b9cbe2;margin-top:8px;cursor:pointer}
.kryss input{accent-color:var(--accent)}

#trad{flex:1;overflow:auto;padding:8px 8px 16px}
.gren{margin-bottom:2px}
.rad{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;cursor:pointer;transition:.15s}
.rad:hover{background:rgba(120,180,255,.12)}
.rad.aktiv{background:rgba(105,208,255,.16)}
.rad .pil2{width:12px;font-size:9px;color:var(--svag);transition:transform .2s}
.rad.oppen .pil2{transform:rotate(90deg)}
.rad .prick{width:9px;height:9px;border-radius:50%;flex:none}
.rad .namn{flex:1;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rad .antal{font-size:11px;color:var(--svag)}
.niva1>.rad .namn{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--svag)}
.barn{margin-left:14px;border-left:1px solid rgba(120,170,230,.14);padding-left:5px;display:none}
.barn.oppen{display:block}
.ideRad{display:flex;gap:8px;padding:5px 8px;border-radius:7px;cursor:pointer;font-size:12.5px;color:#c3d3e8}
.ideRad:hover{background:rgba(120,180,255,.12);color:#fff}
.ideRad .rost{color:var(--guld);font-size:11px;min-width:24px;text-align:right}

/* ------------------------------------------------------------------- kortet */
#kort{position:fixed;right:14px;top:66px;width:352px;max-height:calc(100vh - 180px);z-index:16;
  overflow:auto;border-radius:16px;background:var(--glas);backdrop-filter:blur(16px);
  border:1px solid var(--glas-kant);box-shadow:var(--skugga);animation:in .28s ease both}
@keyframes in{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}
.stang{position:absolute;right:8px;top:6px;background:none;border:0;font-size:20px;color:var(--svag);line-height:1}
.stang:hover{color:#fff}
.kort-topp{padding:16px 18px 12px;border-bottom:1px solid rgba(120,170,230,.12)}
.kort-vag{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin-bottom:8px}
.kort-titel{font-size:17px;line-height:1.35;font-weight:500;margin:0 26px 10px 0}
.kort-mat{display:flex;gap:14px;font-size:11.5px;color:var(--svag);flex-wrap:wrap;align-items:center}
.pill{padding:2px 9px;border-radius:999px;font-size:10.5px;letter-spacing:.03em;color:#0a1220;font-weight:600}
.kort-text{padding:14px 18px;color:#c8d7ea;font-size:13px;line-height:1.6;white-space:pre-wrap}
.kort-avd{padding:4px 18px 16px}
.kort-avd h4{margin:10px 0 8px;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--svag);font-weight:600}
.granne{display:flex;gap:9px;align-items:baseline;padding:7px 9px;border-radius:9px;cursor:pointer;
  background:rgba(255,255,255,.035);margin-bottom:5px;transition:.16s}
.granne:hover{background:rgba(105,208,255,.14)}
.granne .lnk{flex:1;font-size:12.5px;color:#dae7f7}
.granne .styrka{font-size:10px;color:var(--svag)}
.granne .typ{width:16px;text-align:center}
.kort-lank{display:inline-flex;align-items:center;gap:6px;margin:2px 18px 16px;padding:7px 13px;border-radius:9px;
  font-size:12px;text-decoration:none;color:#bfe6ff;border:1px solid rgba(120,215,255,.3);background:rgba(40,120,190,.18)}
.kort-lank:hover{background:rgba(60,160,240,.3);color:#fff}

.blev-verklighet{margin:12px 18px 4px;padding:10px 12px;border-radius:12px;
  background:linear-gradient(120deg,rgba(70,220,140,.16),rgba(70,220,140,.05));
  border:1px solid rgba(90,230,150,.3)}
.bv-rubrik{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#6ee6a4;font-weight:600}
.bv-text{margin-top:5px;font-size:12.5px;color:#d6e9dd;line-height:1.45}
.bv-lank{display:inline-block;margin-top:7px;font-size:12px;color:#8ff0bb;text-decoration:none}
.bv-lank:hover{text-decoration:underline}

/* --------------------------------------------------------------- etiketter */
#etiketter{position:fixed;inset:0;pointer-events:none;z-index:10;overflow:hidden}
.etikett{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;pointer-events:auto;
  cursor:pointer;transition:opacity .3s;will-change:transform,opacity}
.et-land{font-size:13px;letter-spacing:.26em;text-transform:uppercase;font-weight:600;
  text-shadow:0 2px 14px rgba(0,0,0,.9),0 0 26px rgba(0,0,0,.7)}
.et-land small{display:block;letter-spacing:.1em;font-size:9.5px;opacity:.7;font-weight:400;text-transform:none}
.et-stad{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#eaf3ff;
  padding:3px 9px 3px 7px;border-radius:999px;background:rgba(5,11,20,.62);
  border:1px solid rgba(150,200,255,.16);backdrop-filter:blur(3px);
  text-shadow:0 1px 6px rgba(0,0,0,.9)}
.et-stad .kula{width:6px;height:6px;border-radius:50%;box-shadow:0 0 10px currentColor;flex:none}
.et-stad b{font-weight:500}
.et-stad em{font-style:normal;color:#8fa3bd;font-size:10px}
.et-stad:hover b{color:var(--guld)}
.et-skylt{display:block;max-width:230px;padding:3px 9px 3px 8px;border-radius:6px;
  border-left:3px solid #fff;background:rgba(6,12,22,.82);color:#dce9f8;font-size:10.5px;
  line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  transform:translate(-50%,-100%);cursor:pointer;text-shadow:0 1px 4px rgba(0,0,0,.9);
  box-shadow:0 4px 12px rgba(0,0,0,.4)}
.et-skylt b{color:var(--guld);font-weight:600;margin-right:4px}
.et-skylt em{font-style:normal}
.et-skylt:hover{background:rgba(16,32,54,.95);color:#fff;max-width:340px}

.et-hus{padding:5px 10px;border-radius:8px;background:rgba(6,12,22,.9);border:1px solid var(--glas-kant);
  font-size:11.5px;max-width:260px;white-space:normal;box-shadow:var(--skugga);transform:translate(-50%,-115%)}
.et-hus .rost{color:var(--guld)}

/* ------------------------------------------------------------- pratbubblor */
#bubblor{position:fixed;inset:0;pointer-events:none;z-index:11;overflow:hidden}
.bubbla{position:absolute;max-width:230px;padding:7px 12px;border-radius:14px 14px 14px 4px;
  background:rgba(247,250,255,.95);color:#16202e;font-size:12px;line-height:1.35;
  box-shadow:0 8px 22px rgba(0,0,0,.45);transition:opacity .35s;white-space:normal;
  transform:translate(-50%,-100%);will-change:transform,opacity}
.bubbla::after{content:'';position:absolute;left:9px;bottom:-7px;width:9px;height:9px;
  background:rgba(247,250,255,.95);border-radius:0 0 0 3px;transform:skewX(-18deg)}

/* -------------------------------------------------------- teckenförklaring */
#tecken{position:fixed;left:14px;bottom:14px;z-index:14;width:310px;padding:12px 14px;border-radius:14px;
  transition:opacity .45s ease,transform .45s ease;
  background:var(--glas);backdrop-filter:blur(14px);border:1px solid var(--glas-kant);
  font-size:11px;color:var(--svag);box-shadow:var(--skugga)}
.tecken-rad{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.stapel{width:8px;height:14px;border-radius:2px;background:linear-gradient(180deg,#ffd27d,#7a5a20)}
.guldhus{width:9px;height:12px;border-radius:2px;flex:none;
  background:linear-gradient(180deg,#f0c860,#a8813a);box-shadow:0 0 7px rgba(240,200,96,.55)}
.raket{font-size:11px;line-height:1;flex:none}
.stjarna{color:#ffd76a;font-size:12px;line-height:1;flex:none;text-shadow:0 0 8px rgba(255,190,46,.8)}
.fyr{width:8px;height:8px;border-radius:50%;background:#ffd98a;box-shadow:0 0 9px #ffc25c;flex:none}
.figur{width:6px;height:12px;border-radius:3px;background:#7a5ea8;position:relative;flex:none}
.figur::after{content:'';position:absolute;left:1px;top:-6px;width:4px;height:5px;
  background:#57e08a;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}
.tecken-status{display:flex;flex-wrap:wrap;gap:4px 10px;margin-bottom:8px}
.tecken-status span{display:flex;align-items:center;gap:5px}
.tecken-status i{width:8px;height:8px;border-radius:2px;display:block}
.linjer{flex-wrap:wrap;gap:4px 12px}
.linjer span{display:flex;align-items:center;gap:5px}
.lin{width:16px;height:2px;display:block;border-radius:2px}
.lin.gata{background:#9ad0ff}
.lin.landsvag{background:#ffd27d}
.lin.flyg{background:#ff9bd0}
.tecken-hjalp{padding-top:8px;border-top:1px solid rgba(120,170,230,.12);color:#63799a;font-size:10.5px}

#zoom{position:fixed;right:16px;bottom:60px;z-index:14;display:flex;flex-direction:column;gap:6px}
#zoom button{width:38px;height:38px;border-radius:11px;border:1px solid var(--glas-kant);
  background:var(--glas);backdrop-filter:blur(10px);color:#cfe0f5;font-size:19px;line-height:1;
  transition:.18s}
#zoom button:hover{border-color:rgba(120,215,255,.5);color:#fff;background:rgba(30,60,100,.7)}
#zoom button:active{transform:scale(.94)}

.bubbla-raket{background:rgba(28,18,10,.94);color:#ffe6c2;border:1px solid rgba(255,180,90,.45);
  border-radius:14px;max-width:300px;box-shadow:0 6px 26px rgba(255,140,40,.25)}
.bubbla-raket::after{background:rgba(28,18,10,.94)}
.bubbla-raket b{color:#ffc46b;margin-right:5px}

.bubbla-rymd{background:rgba(18,28,48,.94);color:#dbe9ff;border:1px solid rgba(120,200,255,.35);
  border-radius:14px 14px 4px 14px;max-width:280px;cursor:default}
.bubbla-rymd::after{left:auto;right:9px;background:rgba(18,28,48,.94)}
.bubbla-rymd b{color:#8fd8ff;margin-right:5px}
.bubbla-lank{display:block;margin-top:5px;font-size:11px;color:var(--guld);cursor:pointer}
.bubbla-rymd:hover .bubbla-lank{text-decoration:underline}

#tecken.hopfalld{opacity:0;transform:translateY(10px) scale(.97);pointer-events:none}

#tecken-lampa{position:fixed;left:14px;bottom:14px;z-index:15;width:42px;height:42px;border-radius:50%;
  display:grid;place-items:center;border:1px solid rgba(255,210,125,.4);background:var(--glas);
  backdrop-filter:blur(10px);color:var(--guld);opacity:0;pointer-events:none;
  transition:opacity .45s ease,transform .2s,box-shadow .3s;box-shadow:0 0 14px rgba(255,200,110,.22)}
#tecken-lampa.visa{opacity:1;pointer-events:auto;animation:lampglod 3.5s ease-in-out infinite}
#tecken-lampa:hover{transform:scale(1.08);box-shadow:0 0 26px rgba(255,205,120,.5);color:#ffe6ab}
@keyframes lampglod{0%,100%{box-shadow:0 0 12px rgba(255,200,110,.2)}50%{box-shadow:0 0 22px rgba(255,205,120,.45)}}

#niva{position:fixed;right:16px;bottom:16px;z-index:14;padding:7px 14px;border-radius:999px;
  background:var(--glas);border:1px solid var(--glas-kant);backdrop-filter:blur(12px);
  font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent)}

@media (max-width:1180px){
  #panel{bottom:14px}
  #tecken{display:none}
  .sok input{width:150px}
}
@media (max-width:860px){
  #panel{width:min(300px,80vw)}
  #kort{left:12px;right:12px;top:auto;bottom:12px;width:auto;max-height:46vh}
  #niva{display:none}
  .sok input{width:110px}
}
