/* =================================================================
   RampLink – felles designsystem for slot- og parkeringsmodulen.
   Verdiene er identiske med _designsystem.css. I produksjon limes
   :root-blokka inn i hver HTML-fil; her ligger den i én fil fordi
   prototypen skal være enkel å endre.
   ================================================================= */

:root{
  --bg:#f4f6fa;
  --surface:#ffffff;
  --surface-2:#f8fafc;
  --surface-3:#eef2f8;
  --line:#e3e8f0;
  --line-2:#cfd8e6;

  --ink:#0e1a30;
  --ink-2:#3d4c66;
  --ink-3:#66768f;
  --ink-4:#8d9aaf;

  --navy:#13223f;
  --navy-2:#1e3157;
  --navy-3:#27406e;
  --navy-line:rgba(132,158,212,.20);
  --chalk:#e9eefa;
  --chalk-soft:#a6b6d6;
  --chalk-dim:#7f90b4;

  --brand:#3f86f7;
  --brand-ink:#2a6fd8;
  --brand-soft:#eaf1fe;

  --green:#0f7a52;
  --green-soft:#e4f2ea;
  --amber:#f7ab2e;
  --amber-ink:#8a5205;
  --amber-soft:#fdeecd;
  --red:#c8332f;
  --red-ink:#a72420;
  --red-soft:#fbe9e8;

  --row-inn:#f1f8f4;
  --row-ut:#fbf6ee;
  --row-warn:#fdeed2;
  --row-crit:#f9dcda;

  --r-card:14px;
  --r-field:10px;
  --r-btn:10px;
  --shadow:0 1px 2px rgba(14,26,48,.04),0 2px 6px rgba(14,26,48,.06);
  --shadow-lg:0 24px 60px -20px rgba(14,26,48,.45);
  --font:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:var(--font);font-size:15px;line-height:1.5;
  color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;
}
a{color:var(--brand-ink);text-decoration:none}
a:hover{text-decoration:underline}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:4px}

/* ---------- demostripe ---------- */
.demobar{
  background:var(--amber-soft);border-bottom:1px solid #f2ddb4;color:var(--amber-ink);
  font-size:.8rem;padding:7px 18px;display:flex;gap:14px;align-items:center;flex-wrap:wrap;
}
.demobar b{font-weight:700}
.demobar .sp{flex:1}

/* ---------- topplinje ---------- */
.topp{
  background:var(--navy);color:var(--chalk);
  display:flex;align-items:center;gap:16px;padding:0 18px;height:58px;
  position:sticky;top:0;z-index:40;overflow:hidden;
}
.topp .merke{display:flex;align-items:center;gap:9px;font-weight:800;font-size:1.02rem;letter-spacing:-.02em;color:#fff;white-space:nowrap}
.topp .merke svg{display:block;flex:none}
.topp .modul{
  font-size:.7rem;letter-spacing:.09em;text-transform:uppercase;font-weight:700;
  color:var(--chalk-soft);border-left:1px solid var(--navy-line);padding-left:16px;
}
.topp nav{display:flex;gap:4px;margin-left:auto;align-items:center;min-width:0;overflow-x:auto;scrollbar-width:none}
.topp nav::-webkit-scrollbar{display:none}
.topp nav a{
  color:var(--chalk-soft);font-size:.86rem;font-weight:600;padding:9px 13px;
  border-radius:8px;text-decoration:none;white-space:nowrap;
}
.topp nav a:hover{background:rgba(132,158,212,.14);color:#fff;text-decoration:none}
.topp nav a.na{background:var(--navy-3);color:#fff}
.topp .bruker{
  display:flex;align-items:center;gap:9px;padding-left:14px;margin-left:6px;
  border-left:1px solid var(--navy-line);font-size:.82rem;color:var(--chalk-soft);white-space:nowrap;
}
.topp .bruker .rolle{
  display:block;font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;color:var(--chalk-dim);font-weight:700;
}
.topp .bruker b{color:#fff;font-weight:600}

/* ---------- layout ---------- */
.ark{max-width:1560px;margin:0 auto;padding:20px 18px 60px}
.ark.smal{max-width:1120px}
.sidehode{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:18px}
.sidehode h1{font-size:1.42rem;font-weight:800;letter-spacing:-.02em;line-height:1.2}
.sidehode p{color:var(--ink-3);font-size:.9rem;margin-top:3px}
.sidehode .hoyre{margin-left:auto;display:flex;gap:9px;flex-wrap:wrap}

.kort{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);box-shadow:var(--shadow)}
.kort + .kort{margin-top:16px}
.kort > h2{
  font-size:1.02rem;font-weight:700;padding:15px 18px;border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:11px;flex-wrap:wrap;
}
.kort > h2 .sp{flex:1}
.kort .kropp{padding:18px}

/* ---------- knapper ---------- */
.kn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  height:44px;padding:0 17px;border-radius:var(--r-btn);border:1px solid var(--line-2);
  background:var(--surface);color:var(--ink-2);font-family:inherit;font-size:.9rem;font-weight:600;
  cursor:pointer;white-space:nowrap;transition:background .13s,border-color .13s,color .13s;
}
.kn:hover{background:var(--surface-3);border-color:#b9c6da}
.kn.pri{background:var(--brand-ink);border-color:var(--brand-ink);color:#fff}
.kn.pri:hover{background:#2360bd;border-color:#2360bd}
.kn.gr{background:var(--green);border-color:var(--green);color:#fff}
.kn.gr:hover{background:#0c6544;border-color:#0c6544}
.kn.rd{background:var(--red);border-color:var(--red);color:#fff}
.kn.rd:hover{background:var(--red-ink);border-color:var(--red-ink)}
.kn.sm{height:34px;padding:0 12px;font-size:.82rem}
.kn.mini{height:28px;padding:0 9px;font-size:.76rem;border-radius:7px}
.kn[disabled]{opacity:.45;cursor:not-allowed}
.kn.full{width:100%}

/* ---------- skjema ---------- */
.felt{margin-bottom:14px}
.felt > label{
  display:block;font-size:.72rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:5px;
}
/* min-width:0 er ikke pynt. Uten den nekter et felt å bli smalere enn sitt
   eget innhold, og dato- og tidsfelt har stor egenbredde. To slike ved
   siden av hverandre sprengte da boksen, og teksten i dem ble uleselig. */
.felt input,.felt select,.felt textarea{
  width:100%;min-width:0;max-width:100%;height:44px;padding:0 12px;
  border:1px solid var(--line-2);border-radius:var(--r-field);
  background:var(--surface);color:var(--ink);font-family:inherit;font-size:.94rem;
}
.felt textarea{height:auto;min-height:84px;padding:11px 12px;line-height:1.5;resize:vertical}
.felt select{appearance:none;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%2366768f' d='M1 1.5 6 6.5l5-5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 13px center;padding-right:34px}
.felt input:focus,.felt select:focus,.felt textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.felt .hjelp{font-size:.78rem;color:var(--ink-3);margin-top:5px}
.felt .feil{font-size:.82rem;color:var(--red-ink);margin-top:5px;font-weight:600}
.felt input[aria-invalid="true"],.felt select[aria-invalid="true"]{border-color:var(--red)}
/* minmax(0,1fr), ikke 1fr. En 1fr-kolonne kan ikke krympe under innholdet
   sitt, og da flyter feltene ut av boksen i stedet for å dele plassen. */
.rad{display:grid;gap:14px}
.rad.k2{grid-template-columns:repeat(2,minmax(0,1fr))}
.rad.k3{grid-template-columns:repeat(3,minmax(0,1fr))}
.rad.k4{grid-template-columns:repeat(4,minmax(0,1fr))}
/* Dato og tid side om side blir for trangt lenge før telefonbruddet.
   Under 520 px legger de seg under hverandre i stedet. */
@media(max-width:520px){
  .rad.k2,.rad.k3,.rad.k4{grid-template-columns:1fr}
}
.bolk{border:1px solid var(--line);border-radius:12px;padding:16px;margin-bottom:16px;background:var(--surface-2)}
.bolk > h3{font-size:.86rem;font-weight:700;margin-bottom:13px;display:flex;align-items:center;gap:9px}
.bolk > h3 .sp{flex:1}
fieldset{border:none}
.bryter{display:flex;align-items:center;gap:9px;font-size:.9rem;color:var(--ink-2);cursor:pointer;padding:6px 0}
.bryter input{width:18px;height:18px;flex:none;accent-color:var(--brand-ink);cursor:pointer}

/* ---------- tabell ---------- */
.tabellramme{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.tab{width:100%;border-collapse:collapse;font-size:.86rem}
table.tab th{
  font-size:.67rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4);
  text-align:left;padding:10px 10px;border-bottom:1px solid var(--line);white-space:nowrap;
  background:var(--surface-2);position:sticky;top:0;z-index:2;
}
table.tab td{
  padding:11px 10px;border-bottom:1px solid var(--surface-3);color:var(--ink-2);
  vertical-align:middle;font-variant-numeric:tabular-nums;
}
table.tab tbody tr:last-child td{border-bottom:none}
table.tab tbody tr.klikk{cursor:pointer}
table.tab tbody tr.klikk:hover td{background:var(--brand-soft)}
table.tab tbody tr.valgt td{background:var(--brand-soft)}
table.tab b{color:var(--ink);font-weight:700}
table.tab .num{text-align:right}
table.tab .num .stabel{align-items:flex-end}
.tom{padding:40px 18px;text-align:center;color:var(--ink-4);font-size:.9rem}

/* handlingskolonne festet til høyre kant på smal skjerm */
.tabellramme .fest{position:sticky;right:0;background:var(--surface);box-shadow:-8px 0 8px -8px rgba(14,26,48,.16)}
table.tab tbody tr:hover .fest{background:var(--brand-soft)}

/* ---------- piller og merker ---------- */
.pille{
  display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:6px;
  font-size:.72rem;font-weight:700;white-space:nowrap;border:1px solid transparent;
}
.pille.gra{background:var(--surface-3);color:var(--ink-3);border-color:var(--line)}
.pille.bla{background:var(--brand-soft);color:#1d55b0;border-color:#cfe0fb}
.pille.nymelding{font-weight:800}
.pille.gro{background:var(--green-soft);color:var(--green);border-color:#c9e4d7}
.pille.gul{background:var(--amber-soft);color:var(--amber-ink);border-color:#f2ddb4}
.pille.rod{background:var(--red-soft);color:var(--red-ink);border-color:#f0c9c7}
.prikk{width:7px;height:7px;border-radius:50%;flex:none}
.prikk.gra{background:var(--ink-4)}
.prikk.bla{background:var(--brand)}
.prikk.gro{background:var(--green)}
.prikk.gul{background:var(--amber)}
.prikk.rod{background:var(--red)}

/* Sonemerke: innland / Schengen / tredjeland.
   Hvit pil på lys flate forsvinner, så alle tre står på mørk bunn og
   skilles av fargen på selve pila — samme chip som i parkeringsvisningen. */
.sone{
  display:inline-flex;align-items:center;justify-content:center;
  width:19px;height:19px;border-radius:4px;font-size:.68rem;font-weight:800;
  border:1px solid var(--navy-3);background:var(--navy-2);color:#fff;
}
.sone.I{color:#ffffff}
.sone.S{color:var(--amber)}
.sone.T{color:#ff8b87}

.kat{
  display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;
  border-radius:5px;background:var(--surface-3);border:1px solid var(--line);
  font-size:.76rem;font-weight:800;color:var(--ink-2);
}

/* Security-merke: rein / urein. Bokstav, ikke bare farge, så det leses
   også av den som ikke skiller grønt og rødt. */
.sik{
  display:inline-flex;align-items:center;justify-content:center;
  width:19px;height:19px;border-radius:4px;font-size:.7rem;font-weight:800;
  border:1px solid transparent;
}
.sik.rein{background:var(--green-soft);color:var(--green);border-color:#c9e4d7}
.sik.urein{background:var(--red-soft);color:var(--red-ink);border-color:#f0c9c7}
.sik.ukjent{background:var(--amber-soft);color:var(--amber-ink);border-color:#f2ddb4}

/* Ulest samtale eller notat */
.ulest{
  display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;
  padding:0 5px;border-radius:9px;background:var(--brand-ink);color:#fff;
  font-size:.68rem;font-weight:800;
}

/* Sonepil i tabeller: pila skal være det man ser, ikke ramma rundt. */
.sonecelle{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.sonecelle .sonepil{display:block;flex:none}

/* Sidevisning */
.sider{display:flex;align-items:center;gap:8px;padding:12px 18px;border-top:1px solid var(--line);
  flex-wrap:wrap;font-size:.86rem;color:var(--ink-3)}
.sider .sp{flex:1}
.sider button{min-width:36px}

/* Sorterbare kolonner */
table.tab th.sortbar{cursor:pointer;user-select:none}
table.tab th.sortbar:hover{color:var(--ink-2);background:var(--surface-3)}
table.tab th.sortbar .pil{opacity:.28;margin-left:3px;font-size:.66rem}
table.tab th.sortbar.aktiv{color:var(--brand-ink)}
table.tab th.sortbar.aktiv .pil{opacity:1}

/* ---------- varselstriper ---------- */
.stripe{
  display:flex;gap:11px;align-items:flex-start;padding:12px 14px;border-radius:10px;
  font-size:.88rem;line-height:1.45;margin-bottom:14px;border:1px solid transparent;
}
.stripe b{font-weight:700}
.stripe.info{background:var(--brand-soft);border-color:#cfe0fb;color:#1d4f9e}
.stripe.ok{background:var(--green-soft);border-color:#c9e4d7;color:#0b5c3e}
.stripe.adv{background:var(--amber-soft);border-color:#f2ddb4;color:var(--amber-ink)}
.stripe.feil{background:var(--red-soft);border-color:#f0c9c7;color:var(--red-ink)}
.stripe .sp{flex:1}

/* ---------- modal ---------- */
.overlegg{
  display:none;position:fixed;inset:0;background:rgba(8,14,28,.55);backdrop-filter:blur(3px);
  z-index:120;align-items:flex-start;justify-content:center;padding:24px 16px;overflow-y:auto;
}
.overlegg.apen{display:flex}
.modal{
  background:var(--surface);border-radius:16px;box-shadow:var(--shadow-lg);
  width:100%;max-width:640px;margin:auto;overflow:hidden;
}
.modal.bred{max-width:920px}
.modal > header{
  display:flex;align-items:flex-start;gap:14px;padding:18px 20px;border-bottom:1px solid var(--line);
}
.modal > header h2{font-size:1.1rem;font-weight:800;line-height:1.25}
.modal > header p{font-size:.85rem;color:var(--ink-3);margin-top:3px}
.modal > header .lukk{
  margin-left:auto;background:none;border:none;color:var(--ink-4);font-size:1.6rem;line-height:1;
  cursor:pointer;padding:0 4px;
}
.modal > header .lukk:hover{color:var(--ink)}
.modal .innhold{padding:20px;max-height:min(70vh,720px);overflow-y:auto}
.modal > footer{
  display:flex;gap:10px;justify-content:flex-end;padding:14px 20px;
  border-top:1px solid var(--line);background:var(--surface-2);flex-wrap:wrap;
}
.modal > footer .sp{flex:1}
/* Noen av boksene er skrevet med <h2> og .bunn i stedet for <header> og
   <footer>. De fikk da ingen stil i det hele tatt: overskriften klemte seg
   inntil lukkeknappen, og innholdet lå klistret mot kantene. Her får de
   samme utseende, slik at ingen boks kan bli stående naken om markupen
   skulle avvike et sted vi ikke har sett. */
.modal > h2{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:0;
  font-size:1.1rem;font-weight:800;line-height:1.25;
  padding:18px 20px;border-bottom:1px solid var(--line);
}
.modal > h2 .sp{flex:1}
.modal > .bunn{
  display:flex;gap:10px;justify-content:flex-end;padding:14px 20px;
  border-top:1px solid var(--line);background:var(--surface-2);flex-wrap:wrap;
}
.modal > .bunn .sp{flex:1}

/* ---------- faner ----------
   Fanene lå før i en boks med overflow-x:auto. Åtte faner er bredere enn
   1120 px-arket på administrasjonssiden, og da dukket det opp et rullefelt
   rett under dem — og siden overflow på én akse gjør den andre til «auto»,
   kunne det komme et loddrett et også. Nå brytes de over to linjer i stedet.
   Ingenting å rulle, og ingen fane som gjemmer seg utenfor kanten. */
.faner{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--line);padding:0 18px}
.faner button{
  background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;
  padding:12px 14px;font-family:inherit;font-size:.88rem;font-weight:600;color:var(--ink-3);
  cursor:pointer;white-space:nowrap;
}
.faner button:hover{color:var(--ink)}
.faner button.na{color:var(--brand-ink);border-bottom-color:var(--brand-ink)}

/* ---------- nøkkeltall ---------- */
.tallrad{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:12px}
.tallkort{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.tallkort .etikett{font-size:.7rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4)}
.tallkort .verdi{font-size:1.75rem;font-weight:800;letter-spacing:-.02em;margin-top:4px;line-height:1.1}
.tallkort .under{font-size:.79rem;color:var(--ink-3);margin-top:3px}

/* ---------- tidslinje for logg og samtale ---------- */
.strom{list-style:none}
.strom li{padding:12px 0;border-bottom:1px solid var(--surface-3)}
.strom li:last-child{border-bottom:none}
.strom .meta{font-size:.75rem;color:var(--ink-4);display:flex;gap:9px;flex-wrap:wrap;margin-bottom:3px}
.strom .meta b{color:var(--ink-2);font-weight:700}
.strom .tekst{font-size:.89rem;color:var(--ink-2)}
.boble{border-radius:11px;padding:11px 13px;background:var(--surface-3);margin-bottom:10px}
.boble.egen{background:var(--brand-soft)}
.boble .meta{font-size:.74rem;color:var(--ink-3);margin-bottom:4px;font-weight:600}
.boble .tekst{font-size:.9rem;color:var(--ink)}
.internt{background:#fffaf0;border:1px dashed #e8c88a}

/* ---------- diverse ---------- */
.mono{font-variant-numeric:tabular-nums}
.dempet{color:var(--ink-3)}
.liten{font-size:.8rem}
.hoyre{text-align:right}
.nowrap{white-space:nowrap}
.skillelinje{height:1px;background:var(--line);margin:18px 0;border:none}
.stabel{display:flex;flex-direction:column;gap:2px}
.stabel .u{font-size:.75rem;color:var(--ink-4)}
.verktoylinje{display:flex;gap:9px;align-items:center;flex-wrap:wrap;padding:13px 18px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.verktoylinje .sp{flex:1}
.sok{position:relative;flex:0 1 260px;min-width:170px}
.sok input{width:100%;height:38px;padding:0 12px 0 34px;border:1px solid var(--line-2);border-radius:9px;font-family:inherit;font-size:.88rem;background:#fff}
.sok svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--ink-4);pointer-events:none}
.sok input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
select.minivelg{height:38px;border:1px solid var(--line-2);border-radius:9px;background:#fff;font-family:inherit;font-size:.86rem;padding:0 10px;color:var(--ink-2)}

/* ---------- telefon ---------- */
@media(max-width:900px){
  .rad.k4{grid-template-columns:1fr 1fr}
  .rad.k3{grid-template-columns:1fr}
  .topp .modul{display:none}
}
@media(max-width:640px){
  .ark{padding:14px 12px 50px}
  .topp{padding:0 12px;gap:10px}
  .topp nav a{padding:9px 9px;font-size:.8rem}
  /* Brukerkortet tar plassen menyen trenger på telefon. Rollen står
     uansett på hver side, så det er navigasjonen som må vinne. */
  .topp .bruker{display:none}
  .rad.k2,.rad.k4{grid-template-columns:1fr}
  .sidehode h1{font-size:1.2rem}
  .modal .innhold{padding:16px}
  .modal > header,.modal > footer,.modal > h2,.modal > .bunn{padding:14px 16px}
  .modal > footer .kn,.modal > .bunn .kn{flex:1}
  .kort .kropp{padding:14px}
}

@media(prefers-reduced-motion:reduce){
  *{transition:none!important;animation:none!important}
}
