:root{--bg1:#f6fcf8;--bg2:#d4efdf;--ink:#0e2a1b;--mut:#4d6b59;--acc:#1f9d5c;--acc2:#7fd9a8;--tint:rgba(255,255,255,.42);--edge:rgba(255,255,255,.75);--shadow:0 10px 34px rgba(20,90,55,.16);--grid:rgba(255,255,255,.86);--row:rgba(31,157,92,.08);--blob:#6fd6a0}
[data-theme=dark]{--bg1:#05110b;--bg2:#0d2d1e;--ink:#e3f5ea;--mut:#8db5a0;--acc:#34d27b;--acc2:#1b7a49;--tint:rgba(20,50,36,.45);--edge:rgba(160,255,205,.22);--shadow:0 10px 34px rgba(0,0,0,.5);--grid:rgba(8,24,16,.88);--row:rgba(52,210,123,.09);--blob:#14a35a}
*{box-sizing:border-box}
body{margin:0;min-height:100vh;font:15px/1.45 "Schibsted Grotesk",system-ui,sans-serif;color:var(--ink);background:linear-gradient(160deg,var(--bg1),var(--bg2))}
.bg{position:fixed;inset:0;overflow:hidden;z-index:-3}
.bg i{position:absolute;border-radius:50%;background:radial-gradient(circle,var(--blob),transparent 68%);opacity:.55;width:46vmax;height:46vmax;animation:drift 38s ease-in-out infinite alternate}
.bg i:nth-child(1){left:-10vmax;top:-12vmax}.bg i:nth-child(2){right:-14vmax;top:20vh;animation-delay:-12s;opacity:.4}.bg i:nth-child(3){left:25vw;bottom:-22vmax;animation-delay:-24s}
@keyframes drift{to{transform:translate(8vmax,6vmax) scale(1.12)}}
@media(prefers-reduced-motion:reduce){.bg i{animation:none}}
/* liquid glass: blurred tint layer, plus an edge ring whose backdrop is displaced (refracted) */
.glass{position:relative;isolation:isolate;border-radius:22px;border:1px solid var(--edge);box-shadow:var(--shadow),inset 0 1px 0 var(--edge)}
.glass::after{content:"";position:absolute;inset:0;border-radius:inherit;z-index:-2;background:var(--tint);backdrop-filter:blur(16px) saturate(1.6)}
.glass::before{content:"";position:absolute;inset:0;border-radius:inherit;z-index:-1;padding:16px;pointer-events:none;backdrop-filter:url(#refract) blur(2px);
-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}
header.bar{display:flex;align-items:center;gap:12px;margin:14px;padding:10px 16px;z-index:5}
.brand{display:flex;align-items:center;gap:8px;color:var(--acc);font-size:18px}.brand b{color:var(--ink)}
main{max-width:1280px;margin:0 auto;padding:0 14px 30px}
.grow{flex:1}.muted{color:var(--mut)}
.btn{font:inherit;color:var(--ink);background:var(--tint);border:1px solid var(--edge);border-radius:12px;padding:7px 14px;cursor:pointer;list-style:none}
.btn:hover{border-color:var(--acc)}.btn.on,.btn.primary{background:var(--acc);color:#fff;border-color:transparent}.btn[disabled]{opacity:.4;cursor:not-allowed}
:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.menu{position:relative}.menu summary::-webkit-details-marker{display:none}
.pop{position:absolute;right:0;top:44px;width:250px;padding:16px;display:grid;gap:8px;z-index:9}
.row{display:flex;gap:8px;flex-wrap:wrap}
.drop{margin-top:12vh;padding:54px 28px;text-align:center}.drop h1{margin:0 0 8px;font-size:30px}.drop p{max-width:52ch;margin:0 auto;color:var(--mut)}
.drop.over{outline:2px dashed var(--acc)}
.tabs{display:flex;gap:6px;overflow-x:auto;padding:4px 2px 10px}
.tabs button{font:inherit;color:var(--ink);background:var(--tint);border:1px solid var(--edge);border-radius:12px 12px 4px 4px;padding:6px 16px;cursor:pointer;white-space:nowrap}
.tabs button[aria-selected=true]{background:var(--acc);color:#fff}
.tools{display:flex;align-items:center;gap:10px;padding:10px 14px;margin-bottom:10px}
input,select{font:inherit;color:var(--ink);background:var(--grid);border:1px solid var(--edge);border-radius:10px;padding:6px 10px;min-width:0}
#search{flex:1;max-width:360px}
.panel{padding:14px 16px;margin-bottom:10px;display:grid;gap:8px}.panel[hidden]{display:none}
.frow{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.chip{background:var(--acc);color:#fff;border-radius:99px;padding:3px 6px 3px 12px;display:inline-flex;gap:6px;align-items:center}
.chip button{all:unset;cursor:pointer;padding:0 6px}
.aggs{display:flex;gap:6px 16px;flex-wrap:wrap}
.gridwrap{overflow:hidden}.scroll{max-height:calc(100vh - 290px);min-height:240px;overflow:auto;background:var(--grid);margin:6px;border-radius:16px}
table{border-collapse:collapse;width:100%;font-size:14px}
th,td{padding:7px 12px;border-bottom:1px solid var(--edge);white-space:nowrap;text-align:left;max-width:360px;overflow:hidden;text-overflow:ellipsis}
td.n{text-align:right;font-variant-numeric:tabular-nums}
th{position:sticky;top:0;background:var(--grid);cursor:pointer;user-select:none;font-weight:700;z-index:1}
th:hover{color:var(--acc)}tbody tr:nth-child(even){background:var(--row)}tbody tr:hover{background:var(--acc2)}
#pager{display:flex;justify-content:center;gap:10px;padding:6px 0 10px;align-items:center}#pager:empty{display:none}
.msg{position:fixed;top:76px;left:50%;transform:translateX(-50%);z-index:20;max-width:90vw;box-shadow:var(--shadow);padding:10px 14px;border-radius:12px;background:#c0392b;color:#fff}
@media(max-width:640px){header.bar{flex-wrap:wrap}.tools{flex-wrap:wrap}#search{max-width:none}}
.tools label{display:flex;gap:6px;align-items:center}
.btn.icon{display:grid;place-items:center;padding:8px}.ico-sun{display:none}[data-theme=dark] .ico-sun{display:block}[data-theme=dark] .ico-moon{display:none}#hdr{width:64px}
.vals{display:grid;gap:8px;margin-top:6px}#vq{flex:1;min-width:140px}
.vlist{max-height:220px;overflow:auto;background:var(--grid);border-radius:12px;padding:6px 12px;display:grid;gap:2px}
.vlist label{display:flex;gap:8px;align-items:center}.vlist label span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fb{all:unset;cursor:pointer;margin-left:6px;opacity:.5}.fb:hover,.fb.on{opacity:1;color:var(--acc)}
.scroll{max-height:calc(100dvh - 290px)}
@media(max-width:640px){
 header.bar{margin:8px;padding:8px 10px;gap:8px}
 main{padding:0 8px 24px}.btn,input,select{min-height:42px;font-size:16px}
 .pop{position:fixed;left:10px;right:10px;top:auto;bottom:10px;width:auto;z-index:50;padding:18px}.pop .row .btn{flex:1}
 .tools{gap:8px}.tools .btn{flex:1}.scroll{max-height:60vh;max-height:60dvh}
 th,td{padding:8px 10px;max-width:220px}.frow>select,.frow>input{flex:1 1 140px}
 .drop{margin-top:6vh;padding:36px 18px}.drop h1{font-size:24px}.msg{top:64px}
}
.hero{max-width:980px;margin:7vh auto 0;display:grid;gap:18px}.hero .drop{margin-top:0}.drop .row{justify-content:center;margin-top:22px}
.feats{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}
.feat{padding:20px 22px}.feat h3{margin:0 0 6px;font-size:17px;color:var(--acc)}.feat p{margin:0;color:var(--mut)}.fine{text-align:center;font-size:13px;margin:0}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:10px}
.stat{padding:12px 16px;display:grid;gap:2px}.stat b{font-size:24px}.scroll{min-height:340px}
[hidden]{display:none!important}
.loadbox{position:fixed;top:106px;left:50%;transform:translateX(-50%);z-index:40;width:min(420px,calc(100vw - 24px));padding:14px 18px}
.lt{display:flex;justify-content:space-between;gap:12px;margin-bottom:8px}.lt b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.track{height:8px;border-radius:99px;background:var(--row);overflow:hidden}
.track i{display:block;height:100%;width:0;border-radius:inherit;background:linear-gradient(90deg,var(--acc2),var(--acc));transition:width .15s}
.loadbox.ind .track i{width:38%!important;animation:slide 1.1s ease-in-out infinite}
@keyframes slide{from{transform:translateX(-110%)}to{transform:translateX(280%)}}
@keyframes out{to{opacity:0;transform:translateY(-22px) scale(.97);filter:blur(5px)}}
@keyframes in{from{opacity:0;transform:translateY(18px)}}
.leaving .drop,.leaving .feat,.leaving .fine{animation:out .45s ease forwards}
.leaving .feat:nth-child(2){animation-delay:.06s}.leaving .feat:nth-child(3){animation-delay:.12s}
.enter{animation:in .5s ease both}
.enter .stat{animation:in .55s ease both}.enter .stat:nth-child(2){animation-delay:.06s}.enter .stat:nth-child(3){animation-delay:.12s}.enter .stat:nth-child(4){animation-delay:.18s}
@media(prefers-reduced-motion:reduce){.leaving .drop,.leaving .feat,.leaving .fine,.enter,.enter .stat{animation:none!important}}
