
/* OneCo designsystem – XBoard Adgang. Samme tokens og komponenter som kontrollerens webside. */
:root{
  --accent-fyll:#6B1D6B; --accent-fyll-hover:#561656; --accent:#6B1D6B; --accent-soft:#f3e8f3;
  --bg:#eef0f3; --panel:#ffffff; --felt:#ffffff; --knapp:#ffffff;
  --ink:#1d2330; --muted:#677184; --line:#dde1e7; --line-strong:#cdd3db; --hover:#f5f6f8; --kant-hover:#b7bfca;
  --ok:#1f9d55; --ok-soft:#e6f6ec; --warn:#8a5a00; --warn-soft:#fff6e5; --err:#c0392b; --err-soft:#fdecea; --busy:#e6a100;
  --note-bg:#f2f4f7; --tom-bg:#f3f5f8; --gra-bg:#eef0f3; --bryter-av:#cdd3db; --prikk-av:#b7bfca; --danger-kant:#efc2bd;
  --toast-bg:#1d2330; --toast-ink:#ffffff; --scrim:rgba(15,20,30,.45); --skygge:rgba(15,20,30,.18);
  --font:"Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif;
  --mono:ui-monospace,"Cascadia Mono",Consolas,Menlo,monospace;
}
/* Mørk: OneCo-bryter (data-tema) vinner, ellers viewerens tema / systemet */
@media (prefers-color-scheme:dark){:root:not([data-tema="lys"]):not([data-theme="light"]){
  --accent-fyll:#7e2b7e; --accent-fyll-hover:#943594; --accent:#d7a2d7; --accent-soft:#3a2340;
  --bg:#13161c; --panel:#1b1f27; --felt:#12151b; --knapp:#232934;
  --ink:#e7eaf0; --muted:#9ba4b3; --line:#2b313c; --line-strong:#3a4250; --hover:#232934; --kant-hover:#4a5262;
  --ok:#43d184; --ok-soft:#14321f; --warn:#f0b955; --warn-soft:#352a12; --err:#ff7466; --err-soft:#3b1a18; --busy:#f0b955;
  --note-bg:#232934; --tom-bg:#20252e; --gra-bg:#262c37; --bryter-av:#3a4250; --prikk-av:#545d6c; --danger-kant:#6b2a24;
  --toast-bg:#e7eaf0; --toast-ink:#13161c; --scrim:rgba(0,0,0,.6); --skygge:rgba(0,0,0,.5); color-scheme:dark}}
:root[data-theme="dark"]:not([data-tema="lys"]),:root[data-tema="mork"]{
  --accent-fyll:#7e2b7e; --accent-fyll-hover:#943594; --accent:#d7a2d7; --accent-soft:#3a2340;
  --bg:#13161c; --panel:#1b1f27; --felt:#12151b; --knapp:#232934;
  --ink:#e7eaf0; --muted:#9ba4b3; --line:#2b313c; --line-strong:#3a4250; --hover:#232934; --kant-hover:#4a5262;
  --ok:#43d184; --ok-soft:#14321f; --warn:#f0b955; --warn-soft:#352a12; --err:#ff7466; --err-soft:#3b1a18; --busy:#f0b955;
  --note-bg:#232934; --tom-bg:#20252e; --gra-bg:#262c37; --bryter-av:#3a4250; --prikk-av:#545d6c; --danger-kant:#6b2a24;
  --toast-bg:#e7eaf0; --toast-ink:#13161c; --scrim:rgba(0,0,0,.6); --skygge:rgba(0,0,0,.5); color-scheme:dark}
:root[data-tema="lys"]{color-scheme:light}

*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{background:var(--bg);color:var(--ink)}
body{margin:0;font:15px/1.45 var(--font);-webkit-font-smoothing:antialiased}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:30;background:var(--panel)}
button,input,select{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* Logo: lys/mørk */
.oc-logo{height:38px;width:auto;display:block}
.oc-logo-mork{display:none!important}
:root[data-tema="mork"] .oc-logo-lys,:root[data-theme="dark"]:not([data-tema="lys"]) .oc-logo-lys{display:none!important}
:root[data-tema="mork"] .oc-logo-mork,:root[data-theme="dark"]:not([data-tema="lys"]) .oc-logo-mork{display:block!important}
@media (prefers-color-scheme:dark){
  :root:not([data-tema="lys"]):not([data-theme="light"]) .oc-logo-lys{display:none!important}
  :root:not([data-tema="lys"]):not([data-theme="light"]) .oc-logo-mork{display:block!important}}

/* Toppfelt */
.oc-topp{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;display:flex;align-items:center;gap:14px;min-height:64px;
  padding-block:10px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));
  background:var(--panel);border-bottom:1px solid var(--line)}
.oc-titler{display:flex;flex-direction:column;min-width:0}
.oc-titler h1{margin:0;font-size:17px;font-weight:650;line-height:1.2}
.oc-kreditt{font-size:12px;color:var(--muted)}
.oc-kreditt b{font-weight:600;color:var(--ink)}
.oc-hoyre{margin-left:auto;display:flex;align-items:center;gap:12px}
.oc-tema{position:relative;flex:none;width:58px;height:30px;min-height:30px;padding:0;border-radius:15px;border:1px solid var(--line-strong);background:var(--gra-bg);cursor:pointer;display:inline-flex;align-items:center;justify-content:space-between}
.oc-tema::before{content:"";position:absolute;top:2px;left:2px;width:24px;height:24px;border-radius:50%;background:var(--panel);box-shadow:0 1px 3px var(--skygge);transition:left .2s}
.oc-tema[aria-checked="true"]::before{left:30px;background:var(--accent-fyll)}
.oc-tema span{position:relative;z-index:1;width:28px;display:flex;align-items:center;justify-content:center;color:var(--muted);transition:color .2s}
.oc-tema svg{width:15px;height:15px}
.oc-tema[aria-checked="false"] .oc-tema-sol{color:var(--warn)}
.oc-tema[aria-checked="true"] .oc-tema-maane{color:#fff}
.oc-tema:hover{border-color:var(--kant-hover)}

/* Ramme og meny */
.oc-ramme{display:grid;grid-template-columns:232px minmax(0,1fr);min-height:calc(100vh - 64px)}
.oc-meny{background:var(--panel);border-right:1px solid var(--line);padding:14px 10px;display:flex;flex-direction:column;gap:2px}
.oc-meny a{display:flex;align-items:center;gap:11px;min-height:42px;padding:0 12px;border-radius:9px;color:var(--ink);text-decoration:none;font-weight:500}
.oc-meny a:hover{background:var(--hover)}
.oc-meny a.valgt{background:var(--accent-soft);color:var(--accent);font-weight:600}
.oc-meny svg{width:19px;height:19px;flex:none}
.oc-meny .skille{height:1px;background:var(--line);margin:10px 6px}
.oc-meny .enhet{margin-top:auto;padding:12px;font-size:12px;color:var(--muted);line-height:1.5}
.oc-meny .enhet b{color:var(--ink);font-weight:600}
.oc-innhold{min-width:0;padding-block:22px 48px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.oc-innhold>section{max-width:1080px;margin:0 auto;display:flex;flex-direction:column;gap:16px}
#menyKnapp{display:none}
.scrim{display:none}
@media (max-width:900px){
  .oc-ramme{grid-template-columns:minmax(0,1fr)}
  #menyKnapp{display:inline-flex}
  .oc-meny{position:fixed;z-index:40;inset:0 auto 0 0;width:264px;padding-top:calc(14px + env(safe-area-inset-top,0px));padding-left:max(10px,env(safe-area-inset-left,0px));transform:translateX(-102%);transition:transform .2s;box-shadow:0 0 24px var(--skygge)}
  body.meny-apen .oc-meny{transform:none}
  body.meny-apen .scrim{display:block;position:fixed;inset:0;z-index:35;background:var(--scrim)}
  .oc-logo{height:30px}
}
@media (max-width:480px){.oc-titler{display:none}}

/* Sidehode */
.oc-sidehode{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap}
.oc-sidehode h2{margin:0;font-size:22px;font-weight:650;text-wrap:balance}
.oc-sidehode p{margin:4px 0 0;color:var(--muted);max-width:62ch}

/* Kort og rutenett */
.oc-rutenett{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}
@media (min-width:900px){.oc-rutenett.to{grid-template-columns:repeat(2,minmax(0,1fr))}}
.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:18px;min-width:0;display:flex;flex-direction:column;gap:14px}
.card h3{margin:0;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:650;display:flex;align-items:center;gap:8px}
.card h3 .hoyre{margin-left:auto;text-transform:none;letter-spacing:0;font-weight:500}
.card p.hjelp{margin:-6px 0 0;color:var(--muted);font-size:13.5px}

/* Statusfliser på oversikt */
.fliser{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}
.flis{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:6px;min-width:0}
.flis .etikett{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:650}
.flis .verdi{font-size:20px;font-weight:650;display:flex;align-items:center;gap:9px}
.flis .under{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.flis.ok .verdi{color:var(--ok)} .flis.warn .verdi{color:var(--warn)} .flis.err .verdi{color:var(--err)}

/* Skjema */
.felter{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.field{display:flex;flex-direction:column;gap:6px;min-width:0}
.field label,.field .lbl{font-size:13px;font-weight:600}
.field small{color:var(--muted);font-size:12.5px}
input[type=text],input[type=number],input[type=password],select{width:100%;min-height:42px;padding:8px 11px;font-size:16px;border:1px solid var(--line-strong);border-radius:9px;background:var(--felt)}
input:disabled,select:disabled{opacity:.55}
input:hover:not(:disabled),select:hover:not(:disabled){border-color:var(--kant-hover)}
.enhet-felt{position:relative}
.enhet-felt input{padding-right:46px}
.enhet-felt span{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:13px;pointer-events:none}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
input[type=range]{width:100%;accent-color:var(--accent-fyll)}

/* Bryter-rad */
.row{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:44px;padding-block:4px;border-top:1px solid var(--line)}
.row:first-of-type{border-top:0}
.row .tekst{display:flex;flex-direction:column;min-width:0}
.row .tekst b{font-weight:600}
.row .tekst small{color:var(--muted);font-size:13px}
.switch{position:relative;flex:none;width:46px;height:26px}
.switch input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer;z-index:1}
.switch span{position:absolute;inset:0;border-radius:13px;background:var(--bryter-av);transition:background .15s}
.switch span::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 2px var(--skygge);transition:left .15s}
.switch input:checked+span{background:var(--accent-fyll)}
.switch input:checked+span::after{left:23px}
.switch input:focus-visible+span{outline:2px solid var(--accent);outline-offset:2px}

/* Segmentvalg */
.segment{display:flex;flex-wrap:wrap;gap:8px}
.segment label{flex:1 1 150px;display:flex;gap:10px;align-items:flex-start;padding:11px 12px;border:1px solid var(--line-strong);border-radius:9px;cursor:pointer;background:var(--felt)}
.segment label:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}
.segment input{accent-color:var(--accent-fyll);margin-top:3px}
.segment b{display:block;font-weight:600}
.segment small{color:var(--muted);font-size:12.5px}

/* Knapper */
button{min-height:40px;padding:0 15px;border-radius:9px;border:1px solid var(--line-strong);background:var(--knapp);cursor:pointer;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:8px}
button:hover{border-color:var(--kant-hover)}
button.primary{background:var(--accent-fyll);border-color:var(--accent-fyll);color:#fff}
button.primary:hover{background:var(--accent-fyll-hover)}
button.danger{color:var(--err);border-color:var(--danger-kant)}
button.danger.fyll{background:var(--err);border-color:var(--err);color:#fff}
button.ghost{background:transparent;border-color:transparent}
button.liten{min-height:32px;padding:0 10px;font-size:13px}
button.ikon{width:40px;padding:0}
button svg{width:18px;height:18px}
.btns{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.btns.slutt{justify-content:flex-end;border-top:1px solid var(--line);padding-top:14px}

/* Status, merker, meldinger */
.dot{width:9px;height:9px;border-radius:50%;background:var(--prikk-av);flex:none;display:inline-block}
.dot.on{background:var(--ok)} .dot.err{background:var(--err)}
.dot.busy{background:var(--busy);animation:puls 1.2s infinite}
@keyframes puls{50%{opacity:.35}}
@media (prefers-reduced-motion:reduce){.dot.busy{animation:none}*{transition:none!important}}
.status{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--muted);white-space:nowrap}
.badge{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;background:var(--accent-soft);color:var(--accent);white-space:nowrap}
.badge.gra{background:var(--gra-bg);color:var(--muted)} .badge.ok{background:var(--ok-soft);color:var(--ok)}
.badge.warn{background:var(--warn-soft);color:var(--warn)} .badge.err{background:var(--err-soft);color:var(--err)}
.note{padding:11px 13px;border-radius:9px;background:var(--note-bg);font-size:13.5px}
.note.warn{background:var(--warn-soft);color:var(--warn)} .note.err{background:var(--err-soft);color:var(--err)} .note.ok{background:var(--ok-soft);color:var(--ok)}

/* Tabell */
.tabell-ramme{overflow-x:auto;margin-inline:-4px}
table.tabell{width:100%;border-collapse:collapse;min-width:620px}
.tabell th{text-align:left;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:650;padding:8px 6px;border-bottom:1px solid var(--line)}
.tabell td{padding:9px 6px;border-bottom:1px solid var(--line);vertical-align:middle}
.tabell tr:last-child td{border-bottom:0}
.tabell td.funk b{display:block;font-weight:600}
.tabell td.funk small{color:var(--muted);font-size:12.5px}
.tabell select{min-height:38px;font-size:15px}
.tabell tr.dobbel select.kilde{border-color:var(--err)}

/* Klemmekart */
.klemmer{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.klemme{border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:4px;background:var(--felt)}
.klemme .topp{display:flex;align-items:center;gap:8px;font-weight:650}
.klemme .topp .p{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--muted);font-weight:500}
.klemme .funk{font-size:13px;color:var(--muted)}
.klemme.brukt .funk{color:var(--accent);font-weight:600}
.klemme .tilst{font-size:12.5px;color:var(--muted)}

/* Liste */
.liste{display:flex;flex-direction:column}
.linje{display:grid;grid-template-columns:72px 22px minmax(0,1fr) auto;gap:10px;align-items:center;padding:9px 2px;border-top:1px solid var(--line)}
.linje:first-child{border-top:0}
.linje time{font-family:var(--mono);font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.linje svg{width:18px;height:18px}
.linje .t{min-width:0;overflow-wrap:anywhere}
.linje .t small{display:block;color:var(--muted);font-size:12.5px}
.ok-farge{color:var(--ok)} .err-farge{color:var(--err)} .warn-farge{color:var(--warn)} .muted{color:var(--muted)}

/* Siste kort */
.kortvisning{display:flex;align-items:center;gap:16px;padding:14px;border-radius:10px;background:var(--note-bg);flex-wrap:wrap}
.kortvisning .uid{font-family:var(--mono);font-size:22px;font-weight:600;letter-spacing:.04em;overflow-wrap:anywhere}
.kortvisning .meta{font-size:13px;color:var(--muted)}

/* Dialog og toast */
.modal{position:fixed;inset:0;z-index:50;background:var(--scrim);display:flex;align-items:center;justify-content:center;padding:16px}
.modal .box{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px;max-width:420px;width:100%;display:flex;flex-direction:column;gap:12px}
.modal h3{margin:0;font-size:17px}
.modal p{margin:0;color:var(--muted)}
#toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translate(-50%,20px);opacity:0;pointer-events:none;background:var(--toast-bg);color:var(--toast-ink);padding:10px 16px;border-radius:9px;font-weight:600;transition:all .2s;z-index:60;max-width:calc(100% - 32px)}
#toast.show{opacity:1;transform:translate(-50%,0)}

/* ---- Tillegg for serveren ---- */
.innlogging{min-height:calc(100vh - 64px);display:flex;align-items:center;justify-content:center;padding:24px 16px}
.innlogging .card{width:100%;max-width:380px}
.dorer{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
.dor{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:10px;min-width:0}
.dor .topp{display:flex;align-items:center;gap:9px}
.dor .topp b{font-size:16px;font-weight:650;min-width:0;overflow-wrap:anywhere}
.dor .topp .badge{margin-left:auto}
.dor .fakta{display:flex;flex-wrap:wrap;gap:6px}
.dor .meta{font-size:12.5px;color:var(--muted)}
.dor.av{opacity:.72}
.verktoy{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.verktoy input[type=text]{max-width:280px}
.sjekker{display:flex;flex-wrap:wrap;gap:8px}
.sjekker label{display:inline-flex;align-items:center;gap:8px;min-height:38px;padding:0 12px;border:1px solid var(--line-strong);border-radius:9px;cursor:pointer;background:var(--felt);font-size:14px}
.sjekker label:has(input:checked){border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:600}
.sjekker input{accent-color:var(--accent-fyll);margin:0}
.dager{display:flex;gap:4px;flex-wrap:wrap}
.dager label{min-width:40px;justify-content:center;padding:0 8px}
.intervall{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.intervall:first-child{border-top:0}
.intervall input[type=time]{width:120px;min-height:40px;padding:6px 9px;border:1px solid var(--line-strong);border-radius:9px;background:var(--felt);font-size:16px}
.modal .box.stor{max-width:640px;max-height:calc(100vh - 32px);overflow:auto}
.kortrad{display:flex;gap:8px;align-items:center;padding:6px 0;border-top:1px solid var(--line)}
.kortrad:first-child{border-top:0}
.kortrad .mono{flex:1;min-width:0;overflow-wrap:anywhere}
.tabell tr.klikk{cursor:pointer}
.tabell tr.klikk:hover td{background:var(--hover)}
.minitekst{font-size:12.5px;color:var(--muted)}
.tom{padding:22px;border-radius:10px;background:var(--tom-bg);color:var(--muted);text-align:center}
input[type=date]{width:100%;min-height:42px;padding:8px 11px;font-size:16px;border:1px solid var(--line-strong);border-radius:9px;background:var(--felt)}
