/* ============================================================================
   Kobolt — redesignet (REDESIGN.md)

   Designretningen er Morakels (skillen morakel-design, og kitet i
   Morakelet/docs/design/kobolt-designkit): lyst varmt lerret, en litt varmere
   sidemeny, hvite arbeidsflater, kobolt brukt sparsomt til handlinger og aktiv
   tilstand, Manrope til overskrifter og hovedtall, Inter til resten, og
   tabeller med lyseblått kolonnehode.

   Laget ligger over style.css. Husets gamle tokens (--primary-600, --bg,
   --surface-tint …) pekes om til kobolt-verdiene her, så sider som ikke er
   bygget om ennå, får fargene og skriften med en gang. Komponentene under
   overstyrer husets oppskrifter der kobolt er annerledes: kort uten farget
   hode, innrammede felt med etikett over i stedet for understrek, lettere
   ikoner og ingen skygge på det som ligger i ro.
   ============================================================================ */

/* ----- Skriftene (static/webfonts, OFL) ----- */
@font-face {
    font-family: 'Inter';
    src: url('/static/webfonts/inter-latin-var.woff2') format('woff2');
    font-weight: 400 600;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'Manrope';
    src: url('/static/webfonts/manrope-latin-var.woff2') format('woff2');
    font-weight: 500 600;
    font-style: normal;
    font-display: swap;
}

/* ----- Kobolt-tokenene (Morakelet/src/app/globals.css, --kb-*) ----- */
:root {
    /* Dyp kobolt fra toppen på grids.no: bakgrunnen på innloggingssidene
       (auth_base.html, Lars 09.10.2026). Den er lik i lyst og mørkt tema. */
    --kb-natt-1: #121D63;
    --kb-natt: #0A1240;
    --kb-natt-3: #110C46;
    --kb-natt-tekst: #EEF1FF;
    --kb-natt-tekst-2: rgba(225, 230, 255, 0.72);
    --kb-natt-flate: rgba(255, 255, 255, 0.08);
    --kb-natt-flate-2: rgba(255, 255, 255, 0.16);
    --kb-natt-fokus: #9FB3FF;
    --kb-natt-feil: #FFB4B4;
    /* Lerretet og sidemenyen er kjølige og nesten nøytrale, med et svakt snev
       av havgrønn (Lars 04.10.2026; før de varme gråtonene fra Morakel,
       #F8F8F6 og #F5F4F1, som leste som et grått filter mot kobolt). */
    --kb-canvas: #F7F8F9;        /* arbeidslerretet bak de hvite flatene */
    --kb-paper: #F3F5F5;         /* sidemenyen, litt mørkere enn lerretet */
    --kb-surface: #FFFFFF;
    --kb-panel: #FCFCFA;         /* innsikt og merknad på lerretet */
    --kb-ink: #202323;
    --kb-ink-2: #59605F;
    --kb-ink-3: #8A908E;
    --kb-line: #E3E1DB;          /* bærende kant */
    --kb-line-2: #EDEBE6;        /* svak skillelinje */
    --kb-line-hover: #CFCBC2;
    --kb-soft: #ECEAE4;          /* nøytral hover i rammen */
    --kb-hover: #F7F6F3;
    --kb-band: #F0EFEA;          /* interne grupperader */
    /* Det lyseblå er litt klarere i samme tone (Lars 04.10.2026; metningen ×2,
       før #EEF1F8 / #D8E0EE / #E6EBF8 / #E9EDF9, som leste gråblått). */
    --kb-head: #EBF1FF;          /* tabellens kolonnehode */
    --kb-head-line: #D1E0FC;
    --kb-primary: #3659C9;       /* kobolt: handlinger og aktiv tilstand */
    --kb-primary-hover: #2C4AAE;
    --kb-accent: #2F4FB8;        /* lenker og aktiv tekst */
    --kb-accent-hover: #2C4AAE;  /* lenker under pekeren; fyllet over er for knapper */
    --kb-accent-soft: #E1EBFF;
    --kb-accent-faint: #F2F5FC;
    --kb-accent-line: #C3CEEC;
    --kb-accent-fill: #E5EDFF;
    --kb-danger: #B3261E;
    --kb-danger-soft: #FBEDEC;
    --kb-danger-line: #E3B9B5;
    --kb-warning: #8A6A12;
    --kb-notice-soft: #FBF7EA;
    --kb-notice-line: #E4D8B4;
    --kb-done: #E9EDE9;
    --kb-done-ink: #4A5B4E;
    --kb-done-line: #CFD8CF;
    --kb-done-dot: #3E8A57;      /* prikken for betalt og oppgjort: grønn, ikke svart */
    /* Grafene (Morakel): det bokførte i mørk blekk (søylene for inntekter og
       linjen for en saldo), kostnadene i en varm grå (runde 6a). */
    --kb-graf-inntekt: #1F2A44;
    --kb-graf-kostnad: #9A8F7A;
    --kb-on-primary: #FFFFFF;
    /* Sidemenyen: mørk og halvfet tekst og tykkere ikoner (Lars 04.10.2026;
       før middels grå tekst og ikoner med strek 300). Mørkt tema setter dem
       tilbake. */
    --kb-nav-ink: #202323;
    --kb-nav-vekt: 500;
    --kb-nav-ikonvekt: 500;
    /* Understreken under en lenke med ikon (DESIGN.md, «Lenker med ikon»):
       én strek under ikon, mellomrom og tekst, i lenkens egen farge. */
    --kb-understrek: linear-gradient(currentColor, currentColor) left bottom / 100% 1px no-repeat;
    --kb-scrim: rgba(32, 35, 35, 0.32);
    --kb-skuff-scrim: rgba(32, 35, 35, 0.22);       /* bak en skuff: lettere, siden står */
    --kb-skuff-skygge: -18px 0 44px rgba(32, 35, 35, 0.14);
    --kb-shadow-pop: 0 18px 46px rgba(32, 35, 35, 0.18);
    --kb-shadow-dialog: 0 24px 60px rgba(32, 35, 35, 0.26);
    --kb-display: 'Manrope', 'Inter', system-ui, sans-serif;
    --kb-sans: 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;
    --kb-sidebar-w: 236px;
    /* Et obligatorisk felt som er tomt (feltene, REDESIGN.md). */
    --kb-fyll: #E8EEFC;
    --kb-fyll-hover: #DFE7FB;
    /* Hjørnene (Lars 29.09.2026: skarpere, som feltene). Felt, knapper, kort
       og striper har --kb-r; det som flyter over siden (nedtrekkslister,
       menyer, vinduer) litt mer; dialogene mest. */
    --kb-r: 4px;
    --kb-r-flyt: 6px;
    --kb-r-dialog: 8px;
    /* Størrelsen (Lars 30.09.2026: «rundt 103 % blir bra», etter å ha prøvd
       105). Skrift, felt, etiketter, kort og tabeller regnes fra den;
       knappene, sidemenyen, toppstripen og kontrollene i verktøylinjer står. */
    --kb-skala: 1.03;
    /* Bredden av en 16:9-skjerm med samme høyde som denne. base.html setter
       den fra skjermen; 1920 px er reserven. */
    --kb-skjerm-16-9: 1920px;
}

/* Mørkt tema. Morakel har ikke tegnet et; dette er et forslag med samme
   rolle for hver farge, til vi har bestemt oss (REDESIGN.md, åpne spørsmål).
   color-scheme gir nettleserens egne kontroller (avkrysning, radioknapper,
   rullefelt) i mørkt (runde 1). */
.theme-dark {
    color-scheme: dark;
    --kb-canvas: #121416;
    --kb-paper: #16191C;
    --kb-surface: #1C1F23;
    --kb-panel: #1A1D20;
    --kb-ink: #E7E9E7;
    --kb-ink-2: #A6ACA9;
    --kb-ink-3: #7B817E;
    --kb-line: #2E3237;
    --kb-line-2: #262A2E;
    --kb-line-hover: #3C4147;
    --kb-soft: #262A2F;
    --kb-hover: #202428;
    --kb-band: #22262A;
    --kb-head: #1F2533;
    --kb-head-line: #2C3446;
    /* Hvit tekst på knappen holder 4,5:1 (#5A76D8 ga 4,2:1). Pekeren gjør
       den mørkere, ikke lysere, av samme grunn (runde 4b). */
    --kb-primary: #4A67CF;
    --kb-primary-hover: #3F5CC4;
    --kb-accent: #93A7EC;
    --kb-accent-hover: #6F88E0;
    --kb-accent-soft: #232D48;
    --kb-accent-faint: #1D2335;
    --kb-accent-line: #34406A;
    --kb-accent-fill: #26304C;
    --kb-danger: #F2A09A;
    --kb-danger-soft: #3A1E1C;
    --kb-danger-line: #5C2E2A;
    --kb-warning: #E3C877;
    --kb-notice-soft: #2D2717;
    --kb-notice-line: #4A3F20;
    --kb-done: #1F2A22;
    --kb-done-ink: #A9C2AF;
    --kb-done-line: #2E3D33;
    --kb-done-dot: #6FBF86;
    --kb-graf-inntekt: #C5CDE2;
    --kb-graf-kostnad: #8C8374;
    --kb-nav-ink: #A6ACA9;       /* som før: menyen er ikke vurdert i mørkt */
    --kb-nav-vekt: 400;
    --kb-nav-ikonvekt: 300;
    --kb-scrim: rgba(0, 0, 0, 0.55);
    --kb-skuff-scrim: rgba(0, 0, 0, 0.45);
    --kb-skuff-skygge: -18px 0 44px rgba(0, 0, 0, 0.45);
    --kb-shadow-pop: 0 18px 46px rgba(0, 0, 0, 0.45);
    --kb-shadow-dialog: 0 24px 60px rgba(0, 0, 0, 0.55);
    --kb-fyll: #1F2848;
    --kb-fyll-hover: #252F55;
}

/* Husets tokens pekt om til kobolt. Deklarert både på :root og .theme-dark:
   temaklassen sitter på <body>, og en variabel som bare var satt på <html>,
   ville da allerede vært løst med de lyse verdiene. */
:root, .theme-dark {
    --primary-50: var(--kb-accent-soft);
    --primary-100: var(--kb-accent-line);
    --primary-300: #7D93DA;
    --primary-500: var(--kb-accent);
    --primary-600: var(--kb-primary);
    --primary-700: var(--kb-accent-hover);
    --primary-800: #243E93;
    --primary-on: var(--kb-on-primary);

    --info-50: var(--kb-accent-faint);
    --info-200: var(--kb-accent-line);
    --info-500: var(--kb-primary);
    --info-700: var(--kb-accent);
    --info-800: var(--kb-accent-hover);

    --warning-50: var(--kb-notice-soft);
    --warning-100: var(--kb-notice-soft);
    --warning-200: var(--kb-notice-line);
    --warning-700: var(--kb-warning);
    --warning-800: var(--kb-warning);

    --danger-50: var(--kb-danger-soft);
    --danger-200: var(--kb-danger-line);
    --danger-600: var(--kb-danger);
    --danger-700: var(--kb-danger);

    --bg: var(--kb-canvas);
    --surface: var(--kb-surface);
    --surface-alt: var(--kb-hover);
    --surface-tint: var(--kb-head);
    --surface-tint-strong: var(--kb-accent-fill);
    --border: var(--kb-line);
    --border-strong: var(--kb-line-hover);
    --text: var(--kb-ink);
    --text-muted: var(--kb-ink-2);
    --text-subtle: var(--kb-ink-3);

    --overlay: var(--kb-scrim);
    --shadow-sm: none;
    --shadow-md: var(--kb-shadow-pop);
    --shadow-lg: var(--kb-shadow-dialog);
    --radius-sm: var(--kb-r);
    --radius-md: var(--kb-r);
    --focus-ring: 0 0 0 3px var(--kb-accent-soft);
    --ambient-intensity: 0;          /* ingen glød i hjørnene: lerretet er rolig */
    --top-bar-height: 0px;           /* toppstripen står ikke fast; hodene kleber mot toppen */
    /* Innholdet bruker bredden, men blir aldri bredere enn en 16:9-skjerm
       minus menyen: på en ultrabred skjerm står det i midten (Lars
       29.09.2026). */
    --content-max-width: max(1024px, calc(var(--kb-skjerm-16-9) - var(--kb-sidebar-w)));
}

/* ----- Grunnlaget ----- */
body {
    font-family: var(--kb-sans);
    font-feature-settings: 'cv11', 'ss03';
    font-size: calc(13.5px * var(--kb-skala));
    background-color: var(--kb-canvas);
    color: var(--kb-ink);
}
h1, h2, h3, h4 {
    font-family: var(--kb-display);
    font-weight: 600;
    color: var(--kb-ink);
    letter-spacing: -0.015em;
}
h5, h6 { font-family: var(--kb-sans); }
/* Avkrysning og radioknapp i kobolt, ikke Chromes egen blå. */
input[type="checkbox"], input[type="radio"] { accent-color: var(--kb-primary); }
a { color: var(--kb-accent); }
a:hover { color: var(--kb-accent-hover); }
:focus-visible,
.btn:focus-visible, button:focus-visible, .dropdown-item:focus-visible {
    outline: 2px solid var(--kb-accent);
    outline-offset: 2px;
}

/* Bare for skjermleseren, som Bootstraps .sr-only, også der Bootstrap ikke
   lastes (portalen og innloggingen, runde 15b). */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }

/* Lette linjeikoner: Material Symbols uten fyll og med tynn strek, som
   linjeikonene i kitet. Samme ikoner i markupen, bare tegnet lettere. */
.material-symbols-rounded {
    font-variation-settings: 'FILL' 0, 'wght' 300, 'GRAD' 0, 'opsz' 20;
}

/* ============================================================================
   Rammen: sidemenyen og toppstripen
   ============================================================================ */
.kb-shell {
    display: flex;
    flex-direction: row;
    min-height: 100vh;
}
.kb-sidebar {
    position: sticky;
    top: 0;
    height: 100vh;
    width: var(--kb-sidebar-w);
    flex: none;
    display: flex;
    flex-direction: column;
    background: var(--kb-paper);
    border-right: 1px solid var(--kb-line);
    z-index: 1040;
    font-family: var(--kb-sans);
}
.kb-sidebar__brand { flex: none; padding: 16px 18px 12px; }
.kb-brand { display: inline-flex; align-items: center; gap: 10px; color: var(--kb-ink); }
.kb-brand:hover { color: var(--kb-ink); }
.kb-brand__tile {
    display: grid; place-items: center;
    width: 26px; height: 26px;
    border-radius: 7px;
    background: var(--kb-primary);
    color: var(--kb-on-primary);
    font-family: var(--kb-display);
    font-size: 14px; font-weight: 600;
}
.kb-brand__name { font-family: var(--kb-display); font-size: 15px; font-weight: 600; letter-spacing: -0.01em; }
/* Ordmerket Grids (templates/_grids_merke.html): bokstavene i tekstfargen,
   bølgen og prikken i logoens lilla. */
.kb-brand .grids-merke { display: block; height: 24px; width: auto; }

/* Øktene (static/js/okter.js): en IPv6-adresse brytes i stedet for å skyve
   knappen ut av kortet på telefon (runde 15a rettet). «Denne nettleseren» er
   en status med grønn prikk, ikke husets gamle pille (runde 15c rettet). */
.okt-rad__meta > .okt-rad__ip { white-space: normal; overflow-wrap: anywhere; }
.okt-rad__denne {
    display: inline-flex; align-items: center; gap: 6px; margin-left: 8px; padding: 0;
    border-radius: 0; background: none; color: var(--kb-done-ink);
    font-size: calc(12px * var(--kb-skala)); font-weight: 500; letter-spacing: 0; text-transform: none; vertical-align: 0;
}
.okt-rad__denne::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--kb-done-dot); flex: none; }

/* «Vis passord» (window.kbVisPassord i kobolt.js, og innloggingssidene):
   knappen står i feltets høyre kant. */
.fields-underline .form-group:has(> .kb-vis-passord) { position: relative; }
.fields-underline .form-group:has(> .kb-vis-passord) > input { padding-right: 42px !important; }
.kb-vis-passord {
    position: absolute; right: 2px;
    top: calc(var(--etikett-lh) + var(--etikett-mb) + (var(--felt-h) - 32px) / 2);
    display: grid; place-items: center; width: 34px; height: 32px; padding: 0;
    border: 0; border-radius: var(--kb-r); background: transparent; color: var(--kb-ink-2); cursor: pointer;
}
.kb-vis-passord:hover { color: var(--kb-ink); }
.kb-vis-passord .material-symbols-rounded { font-size: 20px; }

/* Selskapsvelgeren: to linjer med plass til lange navn, og org.nr. under. */
.kb-sidebar__company { flex: none; padding: 0 12px 10px; position: relative; }
.kb-company {
    display: flex; align-items: center; gap: 8px;
    width: 100%;
    padding: 8px 10px;
    border: 1px solid var(--kb-line);
    border-radius: var(--kb-r);   /* som kortene (Lars 03.10.2026; var 8 px) */
    background: var(--kb-surface);
    color: var(--kb-ink);
    text-align: left;
    cursor: pointer;
    font: inherit;
    transition: border-color var(--transition-fast);
}
.kb-company:hover { border-color: var(--kb-line-hover); }
.kb-company.is-static { cursor: default; }
.kb-company.is-static:hover { border-color: var(--kb-line); }
.kb-company__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.kb-company__name {
    font-size: 13px; font-weight: 600; line-height: 1.3;
    overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
}
.kb-company__meta { font-size: 11.5px; color: var(--kb-ink-2); font-variant-numeric: tabular-nums; }
.kb-company__chev { flex: none; font-size: 16px; color: var(--kb-ink-3); }

/* Velgerens liste er bredere enn menyen, og klippes ikke av den. */
.kb-company-menu.dropdown-menu {
    width: 360px;
    max-width: calc(100vw - 24px);
    max-height: min(520px, calc(100vh - 140px));
    overflow: auto;
    margin-top: 6px;
    padding: 6px;
    border-color: var(--kb-line);
    box-shadow: var(--kb-shadow-pop);
}
.kb-company-option { align-items: center; gap: 10px; white-space: normal; }
.kb-company-option__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.kb-company-option__name { font-size: 13px; line-height: 1.3; }
.kb-company-option__meta { font-size: 11.5px; color: var(--kb-ink-2); font-variant-numeric: tabular-nums; }
.kb-company-option.active { background: var(--kb-accent-faint); color: var(--kb-ink); font-weight: 500; }
.kb-company-option__check { color: var(--kb-accent) !important; margin: 0 !important; font-size: 18px !important; }
.kb-company-add .material-symbols-rounded { color: var(--kb-accent); }

/* Menylisten ruller alene; logo, velger og bruker står fast. */
.kb-nav {
    flex: 1; min-height: 0;
    overflow-y: auto; overflow-x: hidden;
    padding: 2px 12px 10px;
    display: flex; flex-direction: column; gap: 1px;
    scrollbar-width: thin;
    scrollbar-color: var(--kb-line) transparent;
}
/* Skriften i menyen: 14 px for gruppene og 13 px under (Lars 03.10.2026,
   «fonten er litt for liten»; var 13 og 12,5). Luften rundt punktene under
   er strammet, så de lengste navnene («Pensjon og sykepenger») får plass i
   samme bredde. */
.kb-nav__item,
.kb-nav__parent {
    display: flex; align-items: center; gap: 10px;
    height: 34px; flex: none;
    padding: 0 10px;
    border-radius: 7px;
    font-size: 14px;
    font-weight: var(--kb-nav-vekt);
    color: var(--kb-nav-ink);
    background: transparent;
    border: 0;
    width: 100%;
    text-align: left;
    font-family: inherit;
    cursor: pointer;
    transition: background-color 150ms, color 150ms;
}
.kb-nav__item:hover,
.kb-nav__parent:hover { background: var(--kb-soft); color: var(--kb-ink); text-decoration: none; }
.kb-nav__item .material-symbols-rounded,
.kb-nav__parent .material-symbols-rounded { font-size: 19px; flex: none; }
/* Ikonene i menyen: tykkere strek, og én farge per gruppe (Lars 04.10.2026,
   som Tripletex). Punktene i en gruppe får gruppens farge; Oversikt er kobolt.
   Fargene holder minst 3,5:1 mot lerretet (3:1 kreves for ikoner). I mørkt tema
   står ikonene som før, grå og tynne. */
.kb-nav .material-symbols-rounded:not(.kb-nav__chev) {
    font-variation-settings: 'FILL' 0, 'wght' var(--kb-nav-ikonvekt), 'GRAD' 0, 'opsz' 20;
    color: var(--nav-farge, var(--kb-primary));
}
.theme-dark .kb-nav .material-symbols-rounded:not(.kb-nav__chev) { color: inherit; }
.kb-nav__group[data-gruppe="faktura"] { --nav-farge: #D9602A; }
.kb-nav__group[data-gruppe="prosjekt"] { --nav-farge: #2E7BB0; }
.kb-nav__group[data-gruppe="bilag"] { --nav-farge: #6A4FD6; }
.kb-nav__group[data-gruppe="bank"] { --nav-farge: #0B8A8F; }
.kb-nav__group[data-gruppe="lonn"] { --nav-farge: #2E8F55; }
.kb-nav__group[data-gruppe="rapporter"] { --nav-farge: #A97A00; }
.kb-nav__group[data-gruppe="selskap"] { --nav-farge: #B0478A; }
.kb-nav__text { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Barnet får koboltpillen; forelderen bare tyngre skrift — aldri to like
   sterke aktive flater (kitet, «Sidemeny»). */
.kb-nav__item.is-active { background: var(--kb-accent-soft); color: var(--kb-accent); font-weight: 600; }
.kb-nav__group.has-active > .kb-nav__parent { color: var(--kb-ink); font-weight: 600; }
.kb-nav__chev { font-size: 16px !important; color: var(--kb-ink-3); transition: transform 150ms; }
.kb-nav__group.is-open > .kb-nav__parent .kb-nav__chev { transform: rotate(90deg); }
.kb-nav__children {
    display: none;
    margin: 1px 0 4px 17px;
    padding-left: 4px;
    border-left: 1px solid var(--kb-line);
    flex-direction: column; gap: 1px;
}
.kb-nav__group.is-open > .kb-nav__children { display: flex; }
.kb-nav__children .kb-nav__item { height: 32px; font-size: 13px; gap: 7px; padding: 0 6px; }
.kb-nav__children .kb-nav__item .material-symbols-rounded { font-size: 17px; }
.kb-nav__section {
    padding: 10px 8px 3px;
    font-size: 11px; font-weight: 600;
    letter-spacing: 0.08em; text-transform: uppercase;
    color: var(--kb-ink-3);
    user-select: none;
}
.kb-nav__count {
    flex: none;
    min-width: 18px; padding: 0 5px;
    border-radius: 999px;
    background: var(--kb-primary);
    color: var(--kb-on-primary);
    font-size: 11px; font-weight: 600; line-height: 18px;
    text-align: center;
    font-variant-numeric: tabular-nums;
}
.kb-nav__group.is-open > .kb-nav__parent .kb-nav__count { display: none; }  /* telleren står på punktet under */

/* Brukeren og språket nederst. */
.kb-sidebar__user {
    flex: none;
    display: flex; flex-direction: column; gap: 6px;
    padding: 8px;
    border-top: 1px solid var(--kb-line);
    background: var(--kb-paper);
}
.kb-lang { align-self: flex-start; margin: 0 2px; }
.kb-user {
    display: flex; align-items: center; gap: 10px;
    width: 100%;
    padding: 7px 8px;
    border: 0; border-radius: 8px;
    background: transparent;
    color: var(--kb-ink);
    text-align: left;
    font: inherit;
    cursor: pointer;
}
.kb-user:hover, .kb-user[aria-expanded="true"] { background: var(--kb-surface); }
.kb-user__avatar {
    display: grid; place-items: center;
    width: 28px; height: 28px; flex: none;
    border-radius: 50%;
    background: var(--kb-soft);
    font-size: 11px; font-weight: 600;
}
.kb-user__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.kb-user__name { font-size: 12.5px; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kb-user__meta { font-size: 11px; color: var(--kb-ink-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kb-user__chev { font-size: 15px; color: var(--kb-ink-3); flex: none; }
.kb-user-menu.dropdown-menu { width: 240px; margin-bottom: 6px; }

/* Innholdet til høyre for menyen. */
.kb-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.kb-topbar {
    display: flex; align-items: center; gap: 8px;
    height: 48px;
    padding: 0 24px;
    flex: none;
}
.kb-topbar__menu { display: none; }
.kb-topbar__tools { display: flex; align-items: center; gap: 2px; margin-left: auto; }
.kb-topbar .btn-icon { color: var(--kb-ink-2); }
.kb-topbar .btn-icon:hover { background: var(--kb-soft); color: var(--kb-ink); }
/* Margen er den samme på alle sidene: 40 px (Lars 03.10.2026: Bokføring, med
   24 + 15 i Bootstrap-beholderen, er den smaleste; Oversikt og Fakturaer hadde
   24). Beholderen på Bokføring mister sine 15, så siden står der den sto. */
.kb-main .main-content { padding: 4px 40px 48px; max-width: var(--content-max-width); margin: 0 auto; width: 100%; }
.kb-main .main-content > .container-fluid:not(.has-floating-bar) { padding-left: 0; padding-right: 0; }

/* Smal skjerm: menyen ligger bak menyknappen, over en mørk flate. */
.kb-scrim { position: fixed; inset: 0; background: var(--kb-scrim); z-index: 1039; }
@media (max-width: 1023px) {
    .kb-sidebar {
        position: fixed; top: 0; bottom: 0; left: 0;
        transform: translateX(-100%);
        transition: transform 200ms ease;
        box-shadow: none;
    }
    body.kb-nav-open .kb-sidebar { transform: translateX(0); box-shadow: var(--kb-shadow-pop); }
    .kb-topbar__menu { display: inline-flex; }
    .kb-main .main-content { padding: 4px 16px 40px; }
}
@media (prefers-reduced-motion: reduce) {
    .kb-sidebar, .kb-nav__chev { transition: none; }
}

/* Språkvelgeren (husets komponent) i menyens farger. */
.kb-lang.lang-toggle { background: var(--kb-soft); border: 0; }
.kb-lang .lang-toggle__btn.is-active { background: var(--kb-surface); color: var(--kb-ink); box-shadow: none; }

/* ============================================================================
   Sidehodet
   ============================================================================ */
.page-header {
    align-items: flex-end;
    flex-wrap: wrap;
    gap: 16px 24px;
    padding-bottom: 0;
    margin: 8px 0 28px;
    border-bottom: 0;
}
/* Handlingene brytes på smal skjerm; husets flex: 0 0 auto lot dem aldri
   krympe, så de skjøv siden bredere enn skjermen. */
.page-header__actions { flex-wrap: wrap; flex: 0 1 auto; min-width: 0; max-width: 100%; }
.page-header__title {
    font-family: var(--kb-display);
    font-size: calc(28px * var(--kb-skala));
    font-weight: 600;
    letter-spacing: -0.02em;
    line-height: 1.2;
}
.page-header__title .material-symbols-rounded { display: none; }   /* tittelen står uten ikon */
.page-header__subtitle { color: var(--kb-ink-2); font-size: calc(13px * var(--kb-skala)); margin-top: 4px; }
.page-header__actions { gap: 8px; }
/* Øyebrynet over tittelen på en underside (Innstillinger, Kontoutdrag). */
.kb-eyebrow {
    display: block;
    font-size: calc(11.5px * var(--kb-skala)); font-weight: 600;
    letter-spacing: 0.06em; text-transform: uppercase;
    color: var(--kb-ink-2);
    margin-bottom: 6px;
}

/* ============================================================================
   Knappene: én sterk handling, myk aksent for gjentatt arbeid, ellers nøytral
   ============================================================================ */
.btn {
    height: 36px;
    padding: 0 14px;
    border-radius: var(--kb-r);
    font-size: 13px;
    font-weight: 500;
    border-color: var(--kb-line);
    background-color: var(--kb-surface);
    color: var(--kb-ink);
}
.btn:hover { background-color: var(--kb-hover); border-color: var(--kb-line-hover); color: var(--kb-ink); }
.btn-sm { height: 30px; padding: 0 11px; font-size: 12.5px; }
.btn-primary { background-color: var(--kb-primary); border-color: var(--kb-primary); color: var(--kb-on-primary); }
.btn-primary:hover { background-color: var(--kb-primary-hover); border-color: var(--kb-primary-hover); color: var(--kb-on-primary); }
.btn-primary .material-symbols-rounded { color: inherit; }
.btn-secondary, .btn-outline-secondary { background-color: var(--kb-surface); border-color: var(--kb-line); color: var(--kb-ink); }
.btn-secondary:hover, .btn-outline-secondary:hover { background-color: var(--kb-hover); border-color: var(--kb-line-hover); color: var(--kb-ink); }
/* Ikonene i nøytrale knapper er nøytrale; bare handlingen selv er kobolt. */
.btn-secondary .material-symbols-rounded,
.btn-outline-secondary .material-symbols-rounded { color: var(--kb-ink-2); }
/* Bootstrap 4 farger en fokusert eller trykket knapp (mørkegrå for
   secondary). Fokus vises med ringen fra :focus-visible, ikke med en ny
   farge, så knappen beholder fargen sin. */
.btn-secondary:focus, .btn-secondary.focus,
.btn-secondary:not(:disabled):not(.disabled):active,
.btn-outline-secondary:focus, .btn-outline-secondary:not(:disabled):not(.disabled):active {
    background-color: var(--kb-surface); border-color: var(--kb-line); color: var(--kb-ink); box-shadow: none;
}
.btn-secondary:focus:hover, .btn-outline-secondary:focus:hover { background-color: var(--kb-hover); border-color: var(--kb-line-hover); }
.btn-primary:focus, .btn-primary.focus {
    background-color: var(--kb-primary); border-color: var(--kb-primary); color: var(--kb-on-primary); box-shadow: none;
}
.btn-primary:focus:hover, .btn-primary:not(:disabled):not(.disabled):active {
    background-color: var(--kb-primary-hover); border-color: var(--kb-primary-hover); color: var(--kb-on-primary); box-shadow: none;
}
/* Deaktivert: samme farger, bare svakere. Bootstraps :disabled-regler er
   sterkere enn .btn-primary alene og ga #007BFF, #6C757D og #FFC107 (runde 1). */
.btn-primary:disabled, .btn-primary.disabled {
    background-color: var(--kb-primary); border-color: var(--kb-primary); color: var(--kb-on-primary); opacity: 0.45;
}
.btn-secondary:disabled, .btn-secondary.disabled, .btn-outline-secondary:disabled {
    background-color: var(--kb-surface); border-color: var(--kb-line); color: var(--kb-ink); opacity: 0.45;
}
.btn-soft:disabled, .btn-soft.disabled {
    background-color: var(--kb-accent-soft); border-color: transparent; color: var(--kb-accent); opacity: 0.45;
}
.btn-warning:disabled, .btn-warning.disabled {
    background-color: var(--kb-surface); border-color: var(--kb-notice-line); color: var(--kb-warning); opacity: 0.45;
}
.btn-danger:disabled, .btn-danger.disabled {
    background-color: var(--kb-surface); border-color: var(--kb-danger-line); color: var(--kb-danger); opacity: 0.45;
}
.btn-ghost:disabled, .btn-icon:disabled { background-color: transparent; border-color: transparent; opacity: 0.45; }
/* Myk aksent: meningsfullt, gjentatt arbeid (kitet, «Actions»). */
.btn-soft { background-color: var(--kb-accent-soft); border-color: transparent; color: var(--kb-accent); }
.btn-soft:hover { background-color: var(--kb-accent-line); border-color: transparent; color: var(--kb-accent-hover); }
.btn-soft .material-symbols-rounded { color: inherit; }
.btn-quiet { background-color: var(--kb-soft); border-color: transparent; color: var(--kb-ink); }
.btn-quiet:hover { background-color: var(--kb-line); border-color: transparent; }
.btn-danger { color: var(--kb-danger); border-color: var(--kb-danger-line); }
.btn-danger:hover { background-color: var(--kb-danger-soft); border-color: var(--kb-danger); color: var(--kb-danger); }
.btn-danger:focus, .btn-danger:not(:disabled):not(.disabled):active {
    background-color: var(--kb-danger-soft); border-color: var(--kb-danger); color: var(--kb-danger); box-shadow: none;
}
/* Farlig, men reverserbart (Reverser bilag): varm tekst på hvitt, ikke gult. */
.btn-warning { background-color: var(--kb-surface); border-color: var(--kb-notice-line); color: var(--kb-warning); }
.btn-warning:hover, .btn-warning:focus, .btn-warning:not(:disabled):not(.disabled):active {
    background-color: var(--kb-notice-soft); border-color: var(--kb-warning); color: var(--kb-warning); box-shadow: none;
}
.btn-warning .material-symbols-rounded { color: inherit; }
/* Spøkelse: sjeldne verktøy (Importer) ved siden av de viktige. */
.btn-ghost { background-color: transparent; border-color: transparent; color: var(--kb-ink-2); }
.btn-ghost:hover { background-color: var(--kb-soft); border-color: transparent; color: var(--kb-ink); }
.btn-ghost .material-symbols-rounded { color: inherit; }
.btn-icon { border-color: transparent; background-color: transparent; color: var(--kb-ink-2); border-radius: var(--kb-r); }
.btn-icon:hover { background-color: var(--kb-soft); color: var(--kb-ink); border-color: transparent; }
.btn .material-symbols-rounded { font-size: 18px; }
.btn-sm .material-symbols-rounded { font-size: 16px; }
/* En innebygd handling i kobolt, uten ramme. */
.kb-link {
    display: inline-flex; align-items: center; gap: 4px;
    padding: 0 0 1px; border: 0; background: none;
    color: var(--kb-accent); font: inherit; font-weight: 500; line-height: 1.25; cursor: pointer;
}
/* Ikke text-decoration: i en inline-flex tegner ikonet og teksten hver sin
   strek på hver sin grunnlinje, og streken brytes (DESIGN.md). */
.kb-link:hover { color: var(--kb-accent-hover); background: var(--kb-understrek); }
.kb-link .material-symbols-rounded { font-size: calc(16px * var(--kb-skala)); }

/* Segmentert valg (Enkel | Avansert). */
.kb-seg {
    display: inline-flex; padding: 2px; gap: 2px;
    background: var(--kb-soft); border-radius: calc(var(--kb-r) + 2px);
}
.kb-seg button {
    height: 30px; padding: 0 12px;
    border: 0; border-radius: var(--kb-r);
    background: transparent; color: var(--kb-ink-2);
    font: inherit; font-size: 12.5px; font-weight: 500; cursor: pointer;
}
.kb-seg button[aria-pressed="true"] { background: var(--kb-surface); color: var(--kb-ink); box-shadow: 0 0 0 1px var(--kb-line); }

/* Hodet over et skjema som er åpent på en listeside (Fakturaer, runde 4a):
   ikonet i en kobolt flis, hva som er åpent («Ny faktura», «Redigerer kladd
   KLADD-0003»), og handlingene til høyre. Bokføring har sitt eget med
   typevalget, med de samme målene. */
.kb-skjemahode { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 12px; margin-bottom: 16px; }
.kb-skjemahode > .kb-skjemahode__ikon {
    width: calc(32px * var(--kb-skala)); height: calc(32px * var(--kb-skala)); flex: none;
    display: grid; place-items: center; border-radius: var(--kb-r);
    background: var(--kb-accent-soft); color: var(--kb-accent); font-size: calc(18px * var(--kb-skala));
}
.kb-skjemahode > .kb-skjemahode__tittel {
    flex: 1 1 auto; min-width: 0; margin: 0;
    font-family: var(--kb-display); font-size: calc(18px * var(--kb-skala)); font-weight: 600;
    letter-spacing: -0.01em; color: var(--kb-ink);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.kb-skjemahode > .kb-skjemahode__tittel:focus { outline: none; }

/* Legg til en linje: en stiplet rad under linjene (Bokføring og Fakturaer). */
.kb-legg-til {
    margin-top: 12px;
    width: 100%;
    height: 34px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    border: 1px dashed var(--kb-line-hover);
    border-radius: var(--kb-r);
    background: transparent;
    color: var(--kb-ink-2);
    font-size: 12.5px;
    font-weight: 500;
    cursor: pointer;
    transition: border-color 150ms ease, color 150ms ease, background-color 150ms ease;
}
.kb-legg-til:hover { border-color: var(--kb-accent); color: var(--kb-accent); background: var(--kb-accent-faint); }
.kb-legg-til .material-symbols-rounded { font-size: 17px; }
.kb-legg-til[hidden] { display: none; }

/* ============================================================================
   Kortene: hvite, tynn kant, ingen skygge; hodet er hvitt, ikke farget
   ============================================================================ */
.card { border-color: var(--kb-line); border-radius: var(--kb-r); background: var(--kb-surface); }
.card-header {
    background-color: var(--kb-surface);
    border-bottom: 1px solid var(--kb-line-2);
    padding: calc(14px * var(--kb-skala)) calc(18px * var(--kb-skala));
    font-family: var(--kb-display);
    font-size: calc(15.5px * var(--kb-skala));
    font-weight: 600;
    border-radius: calc(var(--kb-r) - 1px) calc(var(--kb-r) - 1px) 0 0;
}
.card-footer { background-color: var(--kb-surface); border-top: 1px solid var(--kb-line-2); }
.card-body { padding: calc(18px * var(--kb-skala)); }
/* Hodet og foten har kortets hjørner innenfor kanten (radien minus
   kanten). Bootstrap gir dem sine egne med høyere spesifisitet
   (:first-child); med 8 px kort ble hodets hvite flate nesten firkantet og
   malte over kanten i de øvre hjørnene. */
.card > .card-header:first-child { border-radius: calc(var(--kb-r) - 1px) calc(var(--kb-r) - 1px) 0 0; }
.card > .card-footer:last-child { border-radius: 0 0 calc(var(--kb-r) - 1px) calc(var(--kb-r) - 1px); }

/* ============================================================================
   Tabellene: lyseblått kolonnehode med fin regel under, hvite rader,
   hvit sluttsum med regel over (kitet, «Tabellfarger»)
   ============================================================================ */
.table { font-size: calc(13px * var(--kb-skala)); }
.table th {
    background-color: var(--kb-head);
    -webkit-backdrop-filter: none; backdrop-filter: none;
    color: var(--kb-ink-2);
    font-size: calc(12px * var(--kb-skala));
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0;
    padding: calc(9px * var(--kb-skala)) calc(12px * var(--kb-skala));
    border-bottom: 1px solid var(--kb-head-line);
}
/* Bootstrap 4 gir .table thead th en 2 px lys grå linje under og en over
   (spesifisitet 0,1,2, så den slo regelen over); hodet har kitets fine
   regel i stedet, også i mørkt tema. */
.table thead th { border-top: 0; border-bottom: 1px solid var(--kb-head-line); }
/* Tabelltall gjelder tallkolonnene: i Inter gjør de bindestrekene i et hode
   brede («Kontakt - e - post»), så de andre hodene har vanlige tall
   (runde 14a rettet). */
.table th:not(.num):not(.number):not(.amount):not(.text-right) { font-variant-numeric: normal; }
.thead-light th, thead.thead-light th { background-color: var(--kb-head) !important; color: var(--kb-ink-2) !important; }
.table td { padding: calc(11px * var(--kb-skala)) calc(12px * var(--kb-skala)); border-bottom: 1px solid var(--kb-line-2); }
.table tbody tr:hover { background-color: var(--kb-hover); }
.table-data thead th { padding: calc(9px * var(--kb-skala)) calc(14px * var(--kb-skala)); color: var(--kb-ink-2); border-top: 0; }
.table-data thead th:first-child, .table-data thead th:last-child { border-radius: 0; }
.table-data tbody td { padding: calc(11px * var(--kb-skala)) calc(14px * var(--kb-skala)); border-bottom: 1px solid var(--kb-line-2); }
/* Summene står under kolonnene sine: foten har radenes luft (runde 10b; før
   12 px mot radenes 14, så «Totalt» og summen sto skjevt). */
.table-data tfoot td { padding: calc(11px * var(--kb-skala)) calc(14px * var(--kb-skala)); }
.table-data tbody tr:hover { background-color: var(--kb-hover); }
.table-data tbody tr.is-expanded,
.table-data tbody tr.is-expanded + tr.detail-row { background-color: var(--kb-accent-faint); }
.table-sticky thead th { background-color: var(--kb-head); box-shadow: inset 0 -1px 0 var(--kb-head-line); }
.table-striped tbody tr:nth-of-type(odd) { background-color: var(--kb-hover); }
/* Sluttsummen: hvit, halvfet, med hodets regel over. */
.table tr.kb-total td, .table tfoot tr:last-child td {
    background: var(--kb-surface);
    font-weight: 600;
    border-top: 1px solid var(--kb-head-line);
}
/* En intern grupperad er grå; tabellens topp og sluttsum er det ikke. */
.table tr.kb-band td {
    background: var(--kb-band);
    color: var(--kb-ink-2);
    font-size: calc(12px * var(--kb-skala)); font-weight: 600;
    padding-top: calc(7px * var(--kb-skala)); padding-bottom: calc(7px * var(--kb-skala));
}
.cell-badge { background-color: var(--kb-soft); color: var(--kb-ink-2); }
.cell-badge--blue { background-color: var(--kb-accent-soft); color: var(--kb-accent); }

/* ============================================================================
   Feltene (REDESIGN.md, «Feltene»)

   Et felt er en boks, og formen styres av variablene under. De settes på
   .fields-underline, så en annen feltstil er et annet sett verdier, ikke nye
   regler:
     · høyde, luft og tekst                  --felt-h, --felt-pad, --felt-str
     · flate og kant, i ro, hover og fokus   --felt-bg*, --felt-kant*, --felt-bw
     · fokusringen                           --felt-ring
     · hvor etiketten står i bruk og tom      --etikett-hevet, --etikett-tom
   Standarden er «Flytende, fylt», valgt av Lars 29.09.2026 i feltlaben:
   etiketten står inne i boksen når feltet er tomt og over boksen når det er
   i bruk (kobolt ved fokus), hjørnene er 4 px, og et obligatorisk felt som er
   tomt, har kobolt-fyllet (--kb-fyll). Alt annet er hvitt med lys kant: et
   valgfritt felt, et felt med data, et nedtrekk med et valg og et
   forhåndsutfylt felt. En feil beholder fyllet og får rød kant.
   Obligatorisk er required eller aria-required="true" på feltet; et valgfritt
   felt sier «(valgfri)» i etiketten (.kb-valgfri). Feltlaben i
   forhåndsvisningen (static/css/felt-lab.css, /felt-lab) har de andre
   variantene og bytter bare verdiene.

   Etiketten flyttes med transform, som i style.css: den beholder plassen sin
   i flyten, så skjemaet ikke hopper når et felt fylles ut. Hvilke felt som
   kan ha etiketten inni seg når de er tomme, er de samme som i style.css (ikke
   nedtrekk, dato og etiketter som omslutter sin egen kontroll).
   ============================================================================ */

/* Felt utenfor skjemaene (søk og filtre i verktøylinjer, redigering i
   tabeller) er kompakte bokser. */
.form-control, .form-select,
select.form-control, input.form-control, textarea.form-control,
input[type="text"]:not(.form-control-plaintext):not(.no-style),
input[type="email"]:not(.no-style), input[type="password"]:not(.no-style),
input[type="number"]:not(.no-style), input[type="tel"]:not(.no-style),
input[type="url"]:not(.no-style), input[type="search"]:not(.no-style),
input[type="date"]:not(.no-style), input[type="datetime-local"]:not(.no-style),
input[type="time"]:not(.no-style), input[type="month"]:not(.no-style),
select:not([multiple]):not(.no-style), textarea:not(.no-style) {
    height: 34px;
    padding: 0 10px;
    font-size: 13px;
    color: var(--kb-ink);
    caret-color: var(--kb-accent);
    background-color: var(--kb-surface);
    border: 1px solid var(--kb-line);
    border-radius: var(--kb-r);
}
textarea.form-control, textarea:not(.no-style) { height: auto; padding: 7px 10px; }
/* Søkefeltet med ikonet foran (infotavle-skuffen og sidene som ikke er bygget
   om ennå): regelen over satte venstre luft til 10 px, så ikonet sto oppå
   teksten (runde 6b). */
.toolbar-search input.form-control:not(.no-style) { padding-left: 36px; }
.form-control:focus, .form-select:focus,
input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not(.no-style):focus,
select:not([multiple]):not(.no-style):focus,
textarea:not(.no-style):focus {
    border-color: var(--kb-accent);
    box-shadow: var(--focus-ring);
}
.form-control:disabled, .form-control[readonly] { background-color: var(--kb-hover); color: var(--kb-ink-2); }
.form-group label, label.form-label {
    font-size: calc(12px * var(--kb-skala)); font-weight: 500;
    color: var(--kb-ink-2);
    letter-spacing: 0;
    margin-bottom: 5px;
}

/* ----- Skjemaene (.fields-underline): variablene, med Morakels verdier ----- */
.fields-underline {
    --felt-h: calc(36px * var(--kb-skala));
    --felt-pad: 0 calc(12px * var(--kb-skala));
    --felt-textarea-pad: calc(8px * var(--kb-skala)) calc(12px * var(--kb-skala));
    --felt-str: calc(13.5px * var(--kb-skala));
    --felt-bg: var(--kb-surface);
    --felt-bg-hover: var(--kb-surface);
    --felt-bg-fokus: var(--kb-surface);
    --felt-bw: 1px;
    --felt-kant: var(--kb-line);
    --felt-kant-hover: var(--kb-line-hover);
    --felt-kant-fokus: var(--kb-accent);
    --felt-radius: var(--kb-r);
    --felt-ring: 0 0 0 3px var(--kb-accent-soft);
    /* Et tomt felt er hvitt som et utfylt; bare et obligatorisk felt som er
       tomt, har fyllet (--felt-bg-mangler). En feil beholder fyllet, og et
       forhåndsutfylt felt er hvitt med en svak kobolt kant og ✦. */
    --felt-bg-tom: var(--felt-bg);
    --felt-bg-tom-hover: var(--felt-bg-hover);
    --felt-kant-tom: var(--felt-kant);
    --felt-kant-tom-hover: var(--felt-kant-hover);
    --felt-bg-mangler: var(--kb-fyll);
    --felt-bg-mangler-hover: var(--kb-fyll-hover);
    --felt-kant-mangler: transparent;
    --felt-bg-feil: var(--kb-fyll);
    --felt-bg-forslag: var(--kb-surface);
    --felt-kant-forslag: var(--kb-accent-line);
    --felt-pil: right calc(12px * var(--kb-skala)) center;
    /* Pilen i et nedtrekk; lysere i mørkt tema (under). */
    --felt-pil-bilde: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none' stroke='%2359605F' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='1 1 5 5 9 1'%3e%3c/polyline%3e%3c/svg%3e");
    --felt-enhet-h: calc(12px * var(--kb-skala));
    --felt-tekst-dy: 0px;
    --etikett-str: calc(12px * var(--kb-skala));
    --etikett-lh: calc(16px * var(--kb-skala));
    --etikett-farge: var(--kb-ink-2);
    --etikett-case: none;
    --etikett-sperr: 0;
    --etikett-mb: 5px;
    --etikett-ml: 0px;
    --etikett-pad: 0;
    --etikett-flate: none;
    --etikett-maks: 100%;
    --etikett-hevet: none;
    --etikett-hevet-pe: auto;
    /* Tom: inne i boksen. Etiketten (linja L = 16 px) står L + 5 px over
       boksens topp, så midten av boksen (høyden H = 36 px) er L + 5 + H/2
       ned, og etiketten flyttes dit minus L/2: 26 px + 5 px med skalaen 1.
       Teksten i boksen begynner 12 px + kanten inn. I et tekstområde står
       etiketten på første linje: L + 5 + 8 px luft. */
    --etikett-tom: translate(calc(12px * var(--kb-skala) + 1px), calc(26px * var(--kb-skala) + 5px));
    --etikett-tom-ta: translate(calc(12px * var(--kb-skala) + 1px), calc(24px * var(--kb-skala) + 5px));
    --etikett-tom-str: calc(13.5px * var(--kb-skala));
    --etikett-tom-farge: var(--kb-ink-2);
    --etikett-tom-pe: none;
    --etikett-tom-maks: calc(100% - 26px);
    --plassholder-hvile: transparent;
}
/* iPhone forstørrer siden når et felt under 16 px får fokus: på telefon har
   feltene 16 px i hele appen (runde 15b og 15c rettet; innloggingen og
   portalen gjør det også ved berøringsskjerm). */
@media (max-width: 640px) {
    .fields-underline { --felt-str: 16px; --etikett-tom-str: 16px; }
}

.fields-underline .form-control,
.fields-underline input:not([type]):not(.no-style),
.fields-underline input[type="text"]:not(.no-style),
.fields-underline input[type="email"]:not(.no-style),
.fields-underline input[type="password"]:not(.no-style),
.fields-underline input[type="number"]:not(.no-style),
.fields-underline input[type="date"]:not(.no-style),
.fields-underline input[type="month"]:not(.no-style),
.fields-underline input[type="datetime-local"]:not(.no-style),
.fields-underline input[type="time"]:not(.no-style),
.fields-underline input[type="search"]:not(.no-style),
.fields-underline input[type="tel"]:not(.no-style),
.fields-underline input[type="url"]:not(.no-style),
.fields-underline select:not([multiple]):not(.no-style),
.fields-underline textarea:not(.no-style) {
    height: var(--felt-h);
    padding: var(--felt-pad);
    font-size: var(--felt-str);
    color: var(--kb-ink);
    caret-color: var(--kb-accent);
    background-color: var(--felt-bg) !important;
    border-style: solid !important;
    border-width: var(--felt-bw) !important;
    border-color: var(--felt-kant) !important;
    border-radius: var(--felt-radius) !important;
    box-shadow: none !important;
    transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease;
}
.fields-underline textarea:not(.no-style) { height: auto; min-height: 72px; padding: var(--felt-textarea-pad); line-height: 1.45; }
.fields-underline input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not(.no-style):not(:focus):not(:disabled):not([readonly]):hover,
.fields-underline textarea:not(.no-style):not(:focus):not(:disabled):not([readonly]):hover,
.fields-underline select:not([multiple]):not(.no-style):not(:focus):not(:disabled):hover {
    border-color: var(--felt-kant-hover) !important;
    background-color: var(--felt-bg-hover) !important;
}
.fields-underline .form-control:focus,
.fields-underline input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not(.no-style):focus,
.fields-underline select:not(.no-style):focus,
.fields-underline textarea:not(.no-style):focus {
    padding: var(--felt-pad);
    border-style: solid !important;
    border-width: var(--felt-bw) !important;
    border-color: var(--felt-kant-fokus) !important;
    background-color: var(--felt-bg-fokus) !important;
    box-shadow: var(--felt-ring) !important;
    outline: none;
}
.fields-underline textarea:not(.no-style):focus { padding: var(--felt-textarea-pad); }
.fields-underline select:not([multiple]):not(.no-style) {
    background-image: var(--felt-pil-bilde) !important;
    background-repeat: no-repeat !important;
    background-position: var(--felt-pil) !important;
    background-size: 10px 6px !important;
    padding-right: 30px !important;
}
.theme-dark .fields-underline, .fields-underline.theme-dark {
    --felt-pil-bilde: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none' stroke='%23A6ACA9' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='1 1 5 5 9 1'%3e%3c/polyline%3e%3c/svg%3e");
}
/* Pilene i tallfeltene er støy i et regnskap; piltastene virker fortsatt. */
.fields-underline input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
.fields-underline input[type="number"]::-webkit-inner-spin-button,
.fields-underline input[type="number"]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }

/* Etikettene. Den generelle regelen gjelder også etiketter rundt en
   avkrysning; plasseringen gjelder bare etiketten som står over sitt eget
   felt. */
.fields-underline label,
.fields-underline .form-group label {
    font-size: var(--etikett-str);
    line-height: var(--etikett-lh);
    font-weight: 500;
    color: var(--etikett-farge);
    text-transform: var(--etikett-case);
    letter-spacing: var(--etikett-sperr);
    margin-bottom: 5px;
}
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))) > label {
    display: block;
    width: fit-content;
    max-width: var(--etikett-maks);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    position: relative;
    z-index: 2;                    /* over boksen til Tom Select, som har z-index 1 */
    margin-bottom: var(--etikett-mb);
    margin-left: var(--etikett-ml);
    padding: var(--etikett-pad);
    background: var(--etikett-flate);
    transform: var(--etikett-hevet);
    transform-origin: left top;
    pointer-events: var(--etikett-hevet-pe);
    transition: transform 150ms ease, font-size 150ms ease, color 150ms ease;
}
/* Tomt og uten fokus: der varianten vil ha etiketten (i standarden: der den
   står). Et nedtrekk er tomt når det tomme valget er valgt, og ikke åpent. */
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))):has(> input:placeholder-shown:not(:focus)) > label,
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))):has(> .kb-unit > input:placeholder-shown:not(:focus)) > label,
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))):not(:focus-within):has(> select:not([multiple]) option[value=""]:checked) > label {
    transform: var(--etikett-tom);
    font-size: var(--etikett-tom-str);
    color: var(--etikett-tom-farge);
    text-transform: none;
    letter-spacing: 0;
    background: none;
    max-width: var(--etikett-tom-maks);
    pointer-events: var(--etikett-tom-pe);
}
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))):has(> textarea:placeholder-shown:not(:focus)) > label {
    transform: var(--etikett-tom-ta);
    font-size: var(--etikett-tom-str);
    color: var(--etikett-tom-farge);
    text-transform: none;
    letter-spacing: 0;
    background: none;
    max-width: var(--etikett-tom-maks);
    pointer-events: var(--etikett-tom-pe);
}
/* Dato, måned og klokkeslett viser alltid dd.mm.åååå: etiketten står i bruk. */
.fields-underline .form-group:has(> label):has(> input[type="date"]) > label,
.fields-underline .form-group:has(> label):has(> input[type="month"]) > label,
.fields-underline .form-group:has(> label):has(> input[type="time"]) > label,
.fields-underline .form-group:has(> label):has(> input[type="datetime-local"]) > label {
    transform: var(--etikett-hevet);
    font-size: var(--etikett-str);
    color: var(--etikett-farge);
    text-transform: var(--etikett-case);
    letter-spacing: var(--etikett-sperr);
    background: var(--etikett-flate);
    max-width: var(--etikett-maks);
    pointer-events: var(--etikett-hevet-pe);
}
/* Fokus: etiketten blir kobolt. Feil: rød. */
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))):focus-within > label { color: var(--kb-accent); }
.fields-underline .form-group:has(> label):has(> .is-invalid) > label,
.fields-underline .form-group:has(> label):has(> .kb-unit > .is-invalid) > label { color: var(--kb-danger); }
/* Hintet i feltet: synlig når etiketten står over (standarden), ellers
   først når man skriver. */
.fields-underline .form-group:has(> label) > input:not(:focus)::placeholder,
.fields-underline .form-group:has(> label) > textarea:not(:focus)::placeholder,
.fields-underline .form-group:has(> label) > .kb-unit > input:not(:focus)::placeholder {
    color: var(--plassholder-hvile);
}

/* Enheten inne i feltet (kr, mnd, %), og tallet høyrestilt. */
.kb-unit { position: relative; display: block; }
.kb-unit > input { padding-right: 40px !important; text-align: right; font-variant-numeric: tabular-nums; }
/* Beløpsfeltene (static/js/belop.js): tekstfelt med tallformat. */
input[data-belop] { font-variant-numeric: tabular-nums; }
/* Et beløp med feil har rød kant og meldingen, ikke Bootstraps ikon: det lå
   over det siste sifferet i det høyrestilte beløpet (runde 10b). */
.form-control[data-belop].is-invalid { background-image: none; padding-right: 10px; }
.kb-unit::after {
    content: attr(data-unit);
    position: absolute;
    right: var(--felt-enhet-h, 12px);
    top: 50%;
    transform: translateY(calc(-50% + var(--felt-tekst-dy, 0px)));
    font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2);
    pointer-events: none;
}

/* Tomt og uten fokus: flaten og kanten for et tomt felt. Settes på gruppa,
   så feltet, et nedtrekk og hover følger med uten egne regler. I standarden
   er de de samme som ellers; en variant kan gi tomme felt en egen farge, så
   man ser hva som mangler (feltlaben, «Flytende, fylt»). Et datofelt merkes
   data-tom av skript, fordi CSS ikke ser om det er tomt. Et ugyldig felt har
   sin egen regel under. */
.fields-underline .form-group:has(> input:placeholder-shown:not(:focus):not(.is-invalid)),
.fields-underline .form-group:has(> .kb-unit > input:placeholder-shown:not(:focus):not(.is-invalid)),
.fields-underline .form-group:has(> textarea:placeholder-shown:not(:focus):not(.is-invalid)),
.fields-underline .form-group:has(> input[data-tom]:not(:focus):not(.is-invalid)),
.fields-underline .form-group:not(:focus-within):has(> select:not([multiple]):not(.is-invalid) option[value=""]:checked) {
    --felt-bg: var(--felt-bg-tom);
    --felt-bg-hover: var(--felt-bg-tom-hover);
    --felt-kant: var(--felt-kant-tom);
    --felt-kant-hover: var(--felt-kant-tom-hover);
}
/* Obligatorisk og tomt: fyllet som viser hva som mangler. */
.fields-underline .form-group:has(> input:is([required], [aria-required="true"]):placeholder-shown:not(:focus):not(.is-invalid)),
.fields-underline .form-group:has(> .kb-unit > input:is([required], [aria-required="true"]):placeholder-shown:not(:focus):not(.is-invalid)),
.fields-underline .form-group:has(> textarea:is([required], [aria-required="true"]):placeholder-shown:not(:focus):not(.is-invalid)),
.fields-underline .form-group:has(> input:is([required], [aria-required="true"])[data-tom]:not(:focus):not(.is-invalid)),
.fields-underline .form-group:not(:focus-within):has(> select:is([required], [aria-required="true"]):not([multiple]):not(.is-invalid) option[value=""]:checked) {
    --felt-bg: var(--felt-bg-mangler);
    --felt-bg-hover: var(--felt-bg-mangler-hover);
    --felt-kant: var(--felt-kant-mangler);
    --felt-kant-hover: var(--felt-kant-mangler);
}
/* Forhåndsutfylt (window.markAutofilled): hvitt med en svak kobolt kant og ✦
   til brukeren endrer feltet selv. Settes på gruppa, så en etikett i kanten
   får samme flate bak seg. */
.fields-underline .form-group:has(> .is-autofilled),
.fields-underline .form-group:has(> .kb-unit > .is-autofilled) {
    --felt-bg: var(--felt-bg-forslag);
    --felt-bg-hover: var(--felt-bg-forslag);
    --felt-kant: var(--felt-kant-forslag);
    --felt-kant-hover: var(--felt-kant-forslag);
}
.fields-underline input.is-autofilled:not(.no-style),
.fields-underline textarea.is-autofilled:not(.no-style) { box-shadow: none !important; }
/* Et forhåndsutfylt <select> som ikke er et nedtrekk med Tom Select, følger
   gruppas flate; style.css gir det sin egen blå. */
.fields-underline select.is-autofilled:not(.ts-hidden-accessible):not(.no-style) { background-color: var(--felt-bg) !important; }
.fields-underline input.is-autofilled:not(.no-style):focus,
.fields-underline textarea.is-autofilled:not(.no-style):focus { box-shadow: var(--felt-ring) !important; }
/* ✦ i feltet sier at systemet har foreslått det. */
.fields-underline input.is-autofilled:not(.no-style) {
    background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3e%3cpath fill='%233659C9' d='M7 0c.5 3.6 2.4 5.5 7 7-4.6 1.5-6.5 3.4-7 7-.5-3.6-2.4-5.5-7-7 4.6-1.5 6.5-3.4 7-7z'/%3e%3c/svg%3e") !important;
    background-repeat: no-repeat !important;
    background-position: var(--felt-ikon-pos, right 11px center) !important;
    background-size: 13px 13px !important;
    padding-right: 30px !important;
}
.theme-dark .fields-underline input.is-autofilled:not(.no-style) {
    background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3e%3cpath fill='%238FA8F2' d='M7 0c.5 3.6 2.4 5.5 7 7-4.6 1.5-6.5 3.4-7 7-.5-3.6-2.4-5.5-7-7 4.6-1.5 6.5-3.4 7-7z'/%3e%3c/svg%3e") !important;
}
.fields-underline .kb-unit > input.is-autofilled:not(.no-style) {
    background-position: right 34px center !important;
    padding-right: 52px !important;
}
/* En enhet på tre bokstaver (NOK i betalingen) trenger mer plass enn «kr»:
   ellers står ✦ oppå den. */
.kb-unit[data-unit="NOK"] > input { padding-right: 48px !important; }
.fields-underline .kb-unit[data-unit="NOK"] > input.is-autofilled:not(.no-style) {
    background-position: right 46px center !important;
    padding-right: 64px !important;
}
/* «(valgfri)» i etiketten, lettere enn selve etiketten. */
.kb-valgfri { font-weight: 400; color: var(--kb-ink-2); }
/* Et låst valg har den grå flaten, også bak en etikett som står i kanten. */
.fields-underline .form-group:has(> select:disabled) {
    --felt-bg: var(--kb-hover);
    --felt-bg-hover: var(--kb-hover);
}
/* Ugyldig: rød kant (og ring ved fokus); meldingen står under feltet. */
.fields-underline .form-group:has(> .is-invalid),
.fields-underline .form-group:has(> .kb-unit > .is-invalid) {
    --felt-bg: var(--felt-bg-feil);
    --felt-bg-hover: var(--felt-bg-feil);
    --felt-kant: var(--kb-danger);
    --felt-kant-hover: var(--kb-danger);
    --felt-kant-fokus: var(--kb-danger);
    --felt-ring: 0 0 0 3px var(--kb-danger-soft);
}
.fields-underline input.is-invalid:not(.no-style) { color: var(--kb-ink) !important; }
.fields-underline .field-error { margin-top: 5px; font-size: calc(12px * var(--kb-skala)); color: var(--kb-danger); }
/* Et hint under feltet («Minst 12 tegn.») står der feilen kommer, og viker
   for den. Feltet peker på hintet med aria-describedby (runde 15a rettet). */
.fields-underline .kb-felthint { display: block; margin-top: 5px; font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.fields-underline .form-group:has(> .is-invalid) > .kb-felthint { display: none; }
/* En feil vinner over fokus: etiketten er rød også mens feltet har fokus
   (før ble den kobolt). Samme form som fokusregelen, og senere. */
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))):has(> .is-invalid) > label,
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))):has(> .kb-unit > .is-invalid) > label { color: var(--kb-danger); }
/* Avkrysning og radioknapp i et skjema: style.css tar bort omrisset ved
   fokus for alle input i .fields-underline (0,3,1), også disse; ringen må
   tilbake for tastaturet (runde 15a rettet, WCAG 2.4.7). */
.fields-underline input:is([type="checkbox"], [type="radio"]):focus-visible {
    outline: 2px solid var(--kb-accent);
    outline-offset: 2px;
}
/* Nettleserens autofyll (runde 15a rettet). Chrome farger et utfylt felt
   #E8F0FE med nettleserens egen !important, nesten kobolt-fyllet for et tomt
   obligatorisk felt, så en utfylt innlogging så tom ut. En innvendig skygge
   i feltets flate dekker fargen, og teksten får blekkfargen. Etiketten står
   over: Chrome kan vise verdien før siden får lese den, og da ser feltet
   tomt ut for :placeholder-shown. Egne regler, så en nettleser som ikke
   kjenner :-webkit-autofill, bare hopper over dem. */
.fields-underline input:not(.no-style):-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px var(--felt-bg-fokus) inset !important;
    box-shadow: 0 0 0 1000px var(--felt-bg-fokus) inset !important;
    -webkit-text-fill-color: var(--kb-ink);
}
.fields-underline input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not(.no-style):-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 1000px var(--felt-bg-fokus) inset, var(--felt-ring) !important;
    box-shadow: 0 0 0 1000px var(--felt-bg-fokus) inset, var(--felt-ring) !important;
}
.fields-underline .form-group:has(> input:-webkit-autofill:not(.no-style):not(.is-invalid)) {
    --felt-kant: var(--kb-line) !important;
    --felt-kant-hover: var(--kb-line-hover) !important;
}
.fields-underline .form-group:has(> label):not(:has(> label :is(input, select, textarea))):has(> input:-webkit-autofill:not(.no-style)) > label {
    transform: var(--etikett-hevet);
    font-size: var(--etikett-str);
    text-transform: var(--etikett-case);
    letter-spacing: var(--etikett-sperr);
    background: var(--etikett-flate);
    max-width: var(--etikett-maks);
    pointer-events: var(--etikett-hevet-pe);
}

/* ----------------------------------------------------------------------------
   Tom Select (REDESIGN.md, «Nedtrekkene»). Boksen er de samme feltvariablene
   som et vanlig felt, så den følger feltstilen, og tom og utfylt som ellers
   (gruppa ser det skjulte <select>-et). Tom Selects egen CSS har lav
   spesifisitet og nesten ingen !important; høyre luft er variabelen
   --ts-pr-min. Skriptet er static/js/nedtrekk.js.
   ---------------------------------------------------------------------------- */
.fields-underline .ts-wrapper { width: 100%; --ts-pr-min: 30px; }
.fields-underline .ts-wrapper .ts-control {
    min-height: var(--felt-h);
    height: var(--felt-h);
    padding: var(--felt-pad);
    align-items: center;
    flex-wrap: nowrap;
    font-size: var(--felt-str);
    line-height: 20px;
    color: var(--kb-ink);
    background-color: var(--felt-bg);
    background-image: var(--felt-pil-bilde);
    background-repeat: no-repeat;
    background-position: var(--felt-pil);
    background-size: 10px 6px;
    border-style: solid;
    border-width: var(--felt-bw);
    border-color: var(--felt-kant);
    border-radius: var(--felt-radius);
    box-shadow: none;
    transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease;
}
.fields-underline .ts-wrapper:not(.focus):not(.disabled) .ts-control:hover {
    border-color: var(--felt-kant-hover);
    background-color: var(--felt-bg-hover);
}
.fields-underline .ts-wrapper.focus .ts-control {
    border-color: var(--felt-kant-fokus);
    background-color: var(--felt-bg-fokus);
    box-shadow: var(--felt-ring);
}
/* Tom Selects egen `.ts-wrapper.single.input-active .ts-control { background:
   #fff }` er sterkere enn regelen over, og nullstilte pilen når feltet hadde
   fokus med skrivefeltet aktivt, som rett etter et valg (Lars 30.09.2026).
   Et forhåndsutfylt nedtrekk har sin egen regel med ✦ under. */
.fields-underline select:not(.is-autofilled) + .ts-wrapper.single.input-active .ts-control {
    background-color: var(--felt-bg-fokus);
    background-image: var(--felt-pil-bilde);
    background-repeat: no-repeat;
    background-position: var(--felt-pil);
    background-size: 10px 6px;
}
.fields-underline .ts-wrapper.disabled .ts-control {
    opacity: 1;
    background-color: var(--kb-hover);
    background-image: none;
    color: var(--kb-ink-2);
    cursor: not-allowed;
}
/* Forhåndsutfylt (window.markAutofilled på <select>-et): hvitt med den svake
   kobolt kanten og ✦ foran pilen, som et felt, til brukeren velger selv. */
.fields-underline select.is-autofilled + .ts-wrapper {
    --felt-bg: var(--felt-bg-forslag);
    --felt-bg-hover: var(--felt-bg-forslag);
    --felt-kant: var(--felt-kant-forslag);
    --felt-kant-hover: var(--felt-kant-forslag);
    --ts-pr-min: 50px;
}
.fields-underline select.is-autofilled + .ts-wrapper:not(.disabled) .ts-control {
    background-image:
        url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3e%3cpath fill='%233659C9' d='M7 0c.5 3.6 2.4 5.5 7 7-4.6 1.5-6.5 3.4-7 7-.5-3.6-2.4-5.5-7-7 4.6-1.5 6.5-3.4 7-7z'/%3e%3c/svg%3e"),
        var(--felt-pil-bilde);
    background-repeat: no-repeat, no-repeat;
    background-position: right 30px center, var(--felt-pil);
    background-size: 12px 12px, 10px 6px;
}
.fields-underline .ts-wrapper .ts-control > .item { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fields-underline .ts-wrapper .ts-control > input { font-size: var(--felt-str); color: var(--kb-ink); }
/* Et valgt element står helt; skrivefeltet får plassen først når man skriver
   et søk, og da viker elementet (klassen settes av nedtrekk.js ved onType). */
.fields-underline .ts-wrapper.single.has-items .ts-control > input { min-width: 0 !important; flex: 1 1 0; }
.fields-underline .ts-wrapper.single.ts-skriver .ts-control > .item { display: none; }
/* Plassholderen i en Tom Select (søk på serveren, som yrkeskoden på
   Ansatte) følger tekstfeltene: i hvile --plassholder-hvile (skjult i
   standarden, der etiketten står i det tomme feltet), med fokus --kb-ink-3,
   og et valgt element tar plassen (runde 10a: etiketten og plassholderen sto
   oppå hverandre). */
.fields-underline .ts-wrapper .ts-control > input::placeholder { color: var(--kb-ink-3); }
.fields-underline .form-group:has(> label):not(:focus-within) .ts-wrapper .ts-control > input::placeholder { color: var(--plassholder-hvile); }
.ts-wrapper.single .ts-control:has(> .item:not([data-value=""])) > input::placeholder { color: transparent; }

.ts-dropdown {
    margin: 0;
    padding: 4px;
    border: 1px solid var(--kb-line);
    border-radius: var(--kb-r-flyt);
    background: var(--kb-surface);
    box-shadow: var(--kb-shadow-pop);
    color: var(--kb-ink);
    font-size: calc(13px * var(--kb-skala));
    z-index: 2100;
}
.ts-dropdown .ts-dropdown-content { max-height: 300px; }
.ts-dropdown .option { padding: 7px 10px; border-radius: var(--kb-r); }
.ts-dropdown .active { background-color: var(--kb-accent-soft); color: var(--kb-ink); }
.ts-dropdown .option.selected { font-weight: 600; }
.ts-dropdown [data-selectable] .highlight { background: var(--kb-accent-fill); color: inherit; border-radius: 2px; }
.ts-dropdown .optgroup-header {
    padding: 10px 10px 4px;
    font-size: calc(10.5px * var(--kb-skala)); font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase;
    color: var(--kb-ink-2);
    background: transparent;
}
.ts-dropdown .no-results { padding: 8px 10px; color: var(--kb-ink-2); }
/* «Bruk «…»» (en egen verdi): Tom Selects egen farge var uleselig i mørkt tema. */
.ts-dropdown .create { padding: 7px 10px; border-radius: var(--kb-r); color: var(--kb-ink-2); }
.ts-dropdown .create.active { background-color: var(--kb-accent-soft); color: var(--kb-ink); }
.ts-dropdown .ts-tom { color: var(--kb-ink-2); font-style: italic; }
.ts-control .ts-tom { display: none; }
.ts-control .ts-plassholder { color: var(--kb-ink-3); }
/* Et tomt valg som ikke kan velges (en plassholder som «Velg leverandør …»)
   står ikke i lista. */
.ts-dropdown .ts-tom[aria-disabled="true"] { display: none; }
/* Et valg som er en handling (data-handling, «Ny leverandør …»): kobolt, med
   ikonet foran. */
.ts-handling { display: flex; align-items: center; gap: 8px; color: var(--kb-accent); font-weight: 500; }
.ts-handling .material-symbols-rounded { font-size: calc(17px * var(--kb-skala)); }
/* Kontoene: nummeret i en egen kolonne, navnet, parten og MVA-koden stille
   til høyre. */
.ts-konto { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
/* Kontonummeret i primærfargen, som i det opprinnelige designet (Lars
   30.09.2026), både i lista og i feltet. */
.ts-konto__nr { flex: none; width: 3.4em; font-variant-numeric: tabular-nums; font-weight: 600; color: var(--kb-accent); }
.ts-konto__navn { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ts-konto__merke { flex: none; font-size: calc(11.5px * var(--kb-skala)); color: var(--kb-ink-2); font-variant-numeric: tabular-nums; }
.ts-konto__kode { flex: none; font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); font-variant-numeric: tabular-nums; }
.ts-konto__mva { flex: none; padding: 1px 6px; border-radius: 4px; background: var(--kb-soft); color: var(--kb-ink-2); font-size: calc(11px * var(--kb-skala)); font-weight: 500; }
.ts-control .ts-konto { gap: 8px; }
.ts-control .ts-konto__nr { width: auto; }
.ts-control .ts-konto__mva { display: none; }
/* «Fjern valg» er det tomme valget i en kontoliste: festet øverst mens man
   blar, og borte når feltet alt er tomt eller man søker. */
.ts-dropdown .ts-fjern {
    position: sticky;
    top: 0;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 2px;
    background: var(--kb-surface);
    box-shadow: 0 1px 0 var(--kb-line-2);
    border-radius: var(--kb-r) var(--kb-r) 0 0;
    color: var(--kb-ink-2);
    font-style: normal;
}
.ts-dropdown .ts-fjern .material-symbols-rounded { font-size: calc(16px * var(--kb-skala)); }
.ts-dropdown .ts-fjern.active { background: var(--kb-danger-soft); color: var(--kb-danger); }
.ts-dropdown .ts-fjern.selected { display: none; }
/* Snarveiene nederst i lista (ny konto, ny kunde), i en ny fane. */
.ts-dropdown .ts-snarveier {
    display: flex;
    gap: 16px;
    margin: 4px -4px -4px;
    padding: 9px 12px;
    border-top: 1px solid var(--kb-line-2);
    background: var(--kb-canvas);
    border-radius: 0 0 var(--kb-r-flyt) var(--kb-r-flyt);
    font-size: calc(12.5px * var(--kb-skala));
}
.ts-dropdown .ts-snarveier a { display: inline-flex; align-items: center; gap: 5px; padding-bottom: 1px; color: var(--kb-accent); font-weight: 500; line-height: 1.25; text-decoration: none; }
.ts-dropdown .ts-snarveier a:hover { background: var(--kb-understrek); }
.ts-dropdown .ts-snarveier .material-symbols-rounded { font-size: calc(16px * var(--kb-skala)); }
/* Et nedtrekk utenfor skjemaene (året i hodet på anleggsregisteret):
   select.kb-velger gir en kompakt boks som knappene ved siden av (36 px), med
   pila. Tom Selects egen regel for et aktivt skrivefelt (hvit flate uten pil)
   og skrivefeltets minstebredde (som skjøv verdien ut av en smal boks) er
   nullstilt, som for feltene (runde 9). Gi feltet data-sok="nei" og
   data-apne="klikk" når lista er kort. I en tabell med felt på 34 px setter
   siden --kb-velger-h (faste rader på Ansatte, runde 10a). */
select.kb-velger + .ts-wrapper { --ts-pr-min: 30px; }
select.kb-velger + .ts-wrapper .ts-control,
select.kb-velger + .ts-wrapper.single.input-active .ts-control {
    height: var(--kb-velger-h, 36px); min-height: 0; padding: 0 30px 0 12px; flex-wrap: nowrap; align-items: center;
    font-size: calc(13px * var(--kb-skala)); line-height: 20px; color: var(--kb-ink);
    background: var(--kb-surface) url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none' stroke='%2359605F' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='1 1 5 5 9 1'%3e%3c/polyline%3e%3c/svg%3e") no-repeat right 12px center / 10px 6px;
    border: 1px solid var(--kb-line); border-radius: var(--kb-r); box-shadow: none; cursor: pointer;
}
.theme-dark select.kb-velger + .ts-wrapper .ts-control,
.theme-dark select.kb-velger + .ts-wrapper.single.input-active .ts-control { background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none' stroke='%23A6ACA9' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='1 1 5 5 9 1'%3e%3c/polyline%3e%3c/svg%3e"); }
select.kb-velger + .ts-wrapper:not(.focus) .ts-control:hover { border-color: var(--kb-line-hover); }
select.kb-velger + .ts-wrapper.focus .ts-control { border-color: var(--kb-accent); box-shadow: var(--focus-ring); }
select.kb-velger + .ts-wrapper .ts-control > .item { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
select.kb-velger + .ts-wrapper .ts-control > input { min-width: 0 !important; flex: 1 1 0; }
/* Et obligatorisk nedtrekk som står tomt, har kobolt-fyllet, som feltene i
   et skjema (runde 10b: lønnsarten på en ny rad i lønnsslippen). */
select.kb-velger[aria-required="true"] + .ts-wrapper:not(.focus) .ts-control:not(:has(> .item:not([data-value=""]))) {
    background-color: var(--kb-fyll); border-color: transparent;
}
select.kb-velger[aria-required="true"] + .ts-wrapper:not(.focus) .ts-control:not(:has(> .item:not([data-value=""]))):hover { background-color: var(--kb-fyll-hover); }
/* Boksen har ikke feltets klasser (nedtrekk.js tar dem av), men en side med
   egne regler for .form-control skal heller ikke gi den en ramme til. */
.ts-wrapper.form-control, .ts-wrapper.form-select {
    height: auto; padding: 0; border: 0; background: none; box-shadow: none;
}

/* MVA-kodene: én kode per linje, og lista så bred som den lengste
   (nedtrekk.js, innholdsbredde). Blir den for bred, kuttes teksten. */
.ts-dropdown--mva .option { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ----------------------------------------------------------------------------
   Kalenderen (static/js/kalender.js). Et felt med data-kalender har ikonet
   som en bakgrunn i høyre kant; klikket kjennes på plassen, så feltet bygges
   ikke om. Vinduet har året og dagen i primærfargen øverst, måneden med
   piler, ukenumrene og uka fra mandag.
   ---------------------------------------------------------------------------- */
input[data-kalender] { --kal-ikon: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none' stroke='%2359605F' stroke-width='1.3' stroke-linecap='round'%3e%3crect x='2.5' y='3.5' width='11' height='10' rx='1.5'/%3e%3cpath d='M2.5 6.5h11M5.5 2v3M10.5 2v3'/%3e%3c/svg%3e"); }
.theme-dark input[data-kalender] { --kal-ikon: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none' stroke='%23A6ACA9' stroke-width='1.3' stroke-linecap='round'%3e%3crect x='2.5' y='3.5' width='11' height='10' rx='1.5'/%3e%3cpath d='M2.5 6.5h11M5.5 2v3M10.5 2v3'/%3e%3c/svg%3e"); }
/* style.css nullstiller bakgrunnen i skjemaene med background: transparent
   !important; derfor !important her, og en sterkere selektor. */
.fields-underline input[data-kalender]:not(.no-style):not([disabled]):not([readonly]),
input[data-kalender]:not(.no-style):not([disabled]):not([readonly]) {
    background-image: var(--kal-ikon) !important;
    background-repeat: no-repeat !important;
    background-position: right 10px center !important;
    background-size: 16px 16px !important;
    padding-right: 32px !important;
}
input[data-kalender].kb-kal-peker { cursor: pointer; }
/* Forhåndsutfylt (✦) og kalender: begge, ✦ foran ikonet. */
.fields-underline input[data-kalender].is-autofilled:not(.no-style):not([disabled]):not([readonly]) {
    background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3e%3cpath fill='%233659C9' d='M7 0c.5 3.6 2.4 5.5 7 7-4.6 1.5-6.5 3.4-7 7-.5-3.6-2.4-5.5-7-7 4.6-1.5 6.5-3.4 7-7z'/%3e%3c/svg%3e"), var(--kal-ikon) !important;
    background-position: right 34px center, right 10px center !important;
    background-size: 13px 13px, 16px 16px !important;
    padding-right: 52px !important;
}

.kb-kal {
    position: absolute;
    z-index: 2200;
    width: calc(300px * var(--kb-skala));
    background: var(--kb-surface);
    border: 1px solid var(--kb-line);
    border-radius: var(--kb-r-flyt);
    box-shadow: var(--kb-shadow-pop);
    overflow: hidden;
    color: var(--kb-ink);
    font-size: calc(13px * var(--kb-skala));
}
.kb-kal[hidden] { display: none; }
.kb-kal__hode { padding: 14px 18px 13px; background: var(--kb-primary); color: var(--kb-on-primary); }
.kb-kal__aar { font-size: calc(12.5px * var(--kb-skala)); opacity: 0.82; font-variant-numeric: tabular-nums; }
.kb-kal__dag {
    margin-top: 2px;
    font-family: var(--kb-display);
    font-size: calc(19px * var(--kb-skala));
    font-weight: 600;
    letter-spacing: -0.01em;
}
.kb-kal__dag.is-tom { opacity: 0.82; }
.kb-kal__nav { display: flex; align-items: center; justify-content: space-between; padding: 10px 10px 2px; }
.kb-kal__mnd { font-weight: 600; font-size: calc(13.5px * var(--kb-skala)); }
.kb-kal__pil {
    width: 30px; height: 30px; padding: 0;
    display: grid; place-items: center;
    border: 0; border-radius: var(--kb-r);
    background: none; color: var(--kb-ink-2); cursor: pointer;
}
.kb-kal__pil:hover { background: var(--kb-soft); color: var(--kb-ink); }
.kb-kal__pil .material-symbols-rounded { font-size: 20px; }
.kb-kal__rutenett { width: calc(100% - 16px); margin: 0 8px; border-collapse: collapse; table-layout: fixed; }
.kb-kal__rutenett th {
    position: static;
    padding: 6px 0;
    background: none !important;
    border: 0 !important;
    font-size: calc(11.5px * var(--kb-skala));
    font-weight: 600;
    color: var(--kb-ink-2);
    text-align: center;
}
.kb-kal__rutenett td { padding: 2px 0; border: 0; text-align: center; }
.kb-kal__rutenett .kb-kal__uke { width: 30px; font-size: calc(11px * var(--kb-skala)); color: var(--kb-ink-3); font-variant-numeric: tabular-nums; }
.kb-kal__d {
    width: calc(34px * var(--kb-skala)); height: calc(34px * var(--kb-skala)); padding: 0;
    border: 0; border-radius: 50%;
    background: none; color: var(--kb-ink);
    font: inherit; font-variant-numeric: tabular-nums; cursor: pointer;
}
.kb-kal__d:hover { background: var(--kb-accent-soft); }
.kb-kal__d.is-helg { color: var(--kb-ink-2); }
.kb-kal__d.is-idag { color: var(--kb-accent); font-weight: 600; box-shadow: inset 0 0 0 1px var(--kb-accent-line); }
.kb-kal__d.is-valgt { background: var(--kb-primary); color: var(--kb-on-primary); font-weight: 600; box-shadow: none; }
.kb-kal__d:focus-visible { outline: 2px solid var(--kb-accent); outline-offset: 1px; }
/* Månedsvinduet (data-kalender="maned"): de tolv månedene i fire rader à tre. */
.kb-kal--maned { width: calc(264px * var(--kb-skala)); }
.kb-kal__maneder { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; padding: 6px 12px 4px; }
.kb-kal__m {
    height: calc(38px * var(--kb-skala)); padding: 0;
    border: 0; border-radius: var(--kb-r);
    background: none; color: var(--kb-ink);
    font: inherit; cursor: pointer;
}
.kb-kal__m:hover { background: var(--kb-accent-soft); }
.kb-kal__m.is-idag { color: var(--kb-accent); font-weight: 600; box-shadow: inset 0 0 0 1px var(--kb-accent-line); }
.kb-kal__m.is-valgt { background: var(--kb-primary); color: var(--kb-on-primary); font-weight: 600; box-shadow: none; }
.kb-kal__m:focus-visible { outline: 2px solid var(--kb-accent); outline-offset: 1px; }
.kb-kal__fot { display: flex; justify-content: space-between; padding: 6px 10px 10px; }
.kb-kal__knapp {
    padding: 6px 8px;
    border: 0; border-radius: var(--kb-r);
    background: none; color: var(--kb-accent);
    font: inherit; font-weight: 600; cursor: pointer;
}
.kb-kal__knapp:hover { background: var(--kb-accent-faint); }

@media (prefers-reduced-motion: reduce) {
    .fields-underline .form-group > label { transition: none !important; }
}

/* ============================================================================
   Nedtrekk, merkelapper, varsler
   ============================================================================ */
.dropdown-menu { border-color: var(--kb-line); border-radius: var(--kb-r-flyt); box-shadow: var(--kb-shadow-pop); padding: 6px; }
.dropdown-item { border-radius: var(--kb-r); font-size: 13px; color: var(--kb-ink); }
.dropdown-item:hover, .dropdown-item:focus { background-color: var(--kb-soft); color: var(--kb-ink); }
.dropdown-item.active { background-color: var(--kb-accent-soft); color: var(--kb-accent); }
.dropdown-item .material-symbols-rounded { color: var(--kb-ink-2); font-size: 18px; }
.dropdown-item:hover .material-symbols-rounded { color: var(--kb-ink); }
.dropdown-divider { background-color: var(--kb-line-2); }
.dropdown-section { color: var(--kb-ink-3); }

.badge { border-color: transparent; background: var(--kb-soft); color: var(--kb-ink-2); font-weight: 500; }
.badge-primary { background: var(--kb-accent-soft); color: var(--kb-accent); }
.badge-warning { background: var(--kb-notice-soft); color: var(--kb-warning); }
.badge-danger { background: var(--kb-danger-soft); color: var(--kb-danger); }
.badge-success { background: var(--kb-done); color: var(--kb-done-ink); }

/* En status er en liten prikk med tekst (kitet: prikker, ikke piller). */
.kb-status { display: inline-flex; align-items: center; gap: 6px; font-size: calc(12.5px * var(--kb-skala)); color: var(--kb-ink-2); white-space: nowrap; }
.kb-status::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--kb-ink-3); flex: none; }
.kb-status.is-accent::before { background: var(--kb-primary); }
/* Prikken i en egen, tydeligere grønn: med teksttonen så den nesten svart ut
   (runde 5). */
.kb-status.is-done::before { background: var(--kb-done-dot); }
.kb-status.is-warn { color: var(--kb-warning); }
.kb-status.is-warn::before { background: var(--kb-warning); }
/* Det ene som skal fange blikket i en liste (en forfalt faktura). */
.kb-status.is-feil { color: var(--kb-danger); }
.kb-status.is-feil::before { background: var(--kb-danger); }

/* Merknadsstripen: et forslag eller noe å ta stilling til, varm og rolig. */
.kb-notice {
    display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
    padding: calc(12px * var(--kb-skala)) calc(16px * var(--kb-skala));
    background: var(--kb-notice-soft);
    border: 1px solid var(--kb-notice-line);
    border-radius: var(--kb-r);
    font-size: calc(13px * var(--kb-skala));
    color: var(--kb-ink);
}
.kb-notice__icon { color: var(--kb-warning); font-size: calc(18px * var(--kb-skala)); flex: none; }
/* 220 px: på en telefon står ikonet ved teksten, ikke alene over den (runde 10a). */
.kb-notice__text { flex: 1 1 220px; min-width: 0; }
.kb-notice__meta { color: var(--kb-ink-2); }
.kb-notice__actions { display: flex; gap: 6px; flex: none; }

/* Informasjonsknappen (i) og vinduet den åpner. */
.kb-info {
    display: inline-grid; place-items: center;
    width: 18px; height: 18px;
    padding: 0; border: 0; border-radius: 50%;
    background: none; color: var(--kb-ink-3); cursor: pointer;
    vertical-align: -3px;
}
.kb-info:hover, .kb-info[aria-expanded="true"] { color: var(--kb-accent); }
@media (pointer: coarse) { .kb-info { width: 28px; height: 28px; margin: -5px; } }
.kb-info .material-symbols-rounded { font-size: 16px; }

.alert { border-radius: var(--kb-r); }

/* ============================================================================
   Dialogene og skuffene
   ============================================================================ */
.bank-modal { background: var(--kb-scrim); }
.bank-modal__dialog { border-radius: var(--kb-r-dialog); box-shadow: var(--kb-shadow-dialog); padding: 22px; }
.bank-modal__header { border-bottom-color: var(--kb-line-2); }
.bank-modal__title { font-family: var(--kb-display); font-size: calc(17px * var(--kb-skala)); }
.bank-modal__footer { border-top-color: var(--kb-line-2); }
.modal-content { border-radius: var(--kb-r-dialog); border-color: var(--kb-line); box-shadow: var(--kb-shadow-dialog); }
.modal-title { font-family: var(--kb-display); }

/* Skuffen fra høyre (kitet: endringer åpnes i en skuff med eksplisitt
   lagring). En .bank-modal med klassen kb-drawer blir en skuff: samme
   åpne og lukke (style.display), men panelet står i høyre kant. Bredden
   settes per skuff med --kb-drawer-w; logikken er window.kbSkuff
   (static/js/kobolt.js). */
.kb-drawer { --kb-drawer-w: 500px; }
.bank-modal.kb-drawer { background: var(--kb-skuff-scrim); }
.bank-modal.kb-drawer .bank-modal__dialog {
    position: fixed; top: 0; right: 0; bottom: 0;
    width: min(var(--kb-drawer-w), 100vw);
    max-width: none; max-height: none;
    margin: 0;
    border-radius: 0;
    border-left: 1px solid var(--kb-line);
    padding: 0;
    display: flex; flex-direction: column;
    overflow: hidden;
    box-shadow: var(--kb-skuff-skygge);
    animation: kb-skuff-inn 180ms ease-out;
}
.bank-modal.kb-drawer .bank-modal__header {
    flex: none;
    margin: 0;
    padding: 20px 24px 14px;
    align-items: flex-start;
    gap: 12px;
    border-bottom: 1px solid var(--kb-line);
}
.kb-drawer__head { min-width: 0; }
.kb-drawer__eyebrow { display: block; font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.bank-modal.kb-drawer .bank-modal__title {
    margin-top: 3px;
    font-size: calc(20px * var(--kb-skala));
    letter-spacing: -0.015em;
    overflow-wrap: anywhere;
}
.kb-drawer__context { margin: 3px 0 0; font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.bank-modal.kb-drawer .bank-modal__header .btn-icon { width: 34px; height: 34px; padding: 0; flex: none; }
.bank-modal.kb-drawer .bank-modal__body { flex: 1; min-height: 0; overflow-y: auto; padding: 20px 24px 24px; }
.bank-modal.kb-drawer .bank-modal__footer {
    flex: none;
    margin: 0;
    padding: 14px 24px;
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
    border-top: 1px solid var(--kb-line);
    background: var(--kb-surface);
}
.kb-drawer__bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
/* Leserollen (innsyn) på en innstillingsside (runde 16b, rettet etter
   underagentene): skuffen er en lesevisning med faktaene, etiketten over
   verdien, som oppstillingene på Reiser og Utlegg. Feltene står skjult under
   (static/js/kobolt.js, lesemodus), og bare «Lukk» og det som leser
   (data-les), er igjen. */
.kb-drawer--les .kb-les, .kb-drawer--les .kb-les-gruppe > :not(.kb-les-fakta) { display: none !important; }
.kb-les-fakta { display: flex; flex-direction: column; gap: 2px; min-width: 0; margin: 0 0 calc(14px * var(--kb-skala)); clear: both; }
.kb-les-fakta__etikett { display: flex; align-items: center; gap: 4px; font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.kb-les-fakta__verdi { font-size: calc(13.5px * var(--kb-skala)); line-height: 1.45; color: var(--kb-ink); overflow-wrap: anywhere; white-space: pre-line; }
.kb-les-fakta__merknad { font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.kb-les-celle { color: var(--kb-ink); font-variant-numeric: tabular-nums; }
.kb-les-fakta__verdi.is-tom, .kb-les-celle.is-tom { color: var(--kb-ink-3); }
.kb-les-merke { font-weight: 400; }
.kb-drawer--les .bank-modal__footer .btn:not([data-lukk]), .kb-drawer--les [data-konsekvens], .kb-drawer--les .kb-drawer__status,
.kb-drawer--les .bank-modal__body button:not(.kb-info):not([data-les]), .kb-drawer--les .kb-legg-til { display: none !important; }
/* Sletting i en skuff i lesevisning (også i bunnen, der «Lukk» står). */
.kb-drawer--les .kb-danger-link { display: none !important; }
/* Etter «Hent siste»: hva den andre endret, og at det du skrev, står. */
.kb-notice.kb-utkast { margin-bottom: 14px; }
@media (pointer: coarse) {
    .bank-modal.kb-drawer .bank-modal__header .btn-icon { width: 44px; height: 44px; }
    .kb-drawer__bar > .btn { min-height: 44px; }
    .brreg__head .btn-icon { width: 40px; height: 40px; }
}
/* Uten statusfelt står knappene til høyre likevel («Ferdig», «Lukk» og
   kbBekreft sto til venstre, runde 14b rettet). */
.kb-drawer__bar > .btn:first-child { margin-left: auto; }
/* Statusfeltet fyller plassen til venstre for knappene uten å kreve den: med
   160 px som grunnlag brøt en lang knapp ned under «Avbryt» i en smal skuff
   (runde 4b). Har det tekst, står den på egen linje over knappene, og
   knappene holder seg til høyre. */
.kb-drawer__status { flex: 1 1 0; min-width: 0; margin: 0; font-size: calc(12.5px * var(--kb-skala)); color: var(--kb-ink-2); }
.kb-drawer__status:not(:empty) { flex-basis: 100%; }
.kb-drawer__status + .btn { margin-left: auto; }
.kb-drawer__status.is-feil { color: var(--kb-danger); }
/* Konsekvensen ved lagringspunktet («Dette endres»). */
.kb-drawer__konsekvens {
    margin: 0;
    padding: 10px 12px;
    border: 1px solid var(--kb-notice-line);
    border-radius: var(--kb-r);
    background: var(--kb-notice-soft);
    font-size: calc(12.5px * var(--kb-skala)); line-height: 1.5;
    color: var(--kb-ink);
}
/* Innholdet uten Bootstraps marger (runde 16a rettet): tittelen, lista, og
   følgen av en linje under den, dempet. En advarsel er varm. */
.kb-drawer__konsekvens:empty { display: none; }
.kb-drawer__konsekvens p { margin: 0; }
.kb-drawer__konsekvens ul { margin: 2px 0 2px; padding-left: 18px; }
.kb-drawer__konsekvens .kb-folge { display: block; color: var(--kb-ink-2); }
.kb-drawer__konsekvens li.is-warn { color: var(--kb-warning); }
/* Bekreftelsen for en farlig eller stor handling på siden (kbBekreft): en
   smal skuff med hva som skjer, og det trygge valget i fokus (runde 1). */
.kb-bekreft { --kb-drawer-w: 440px; }
/* «Nytt selskap» (base.html, runde 16a): registerboksen står tett under
   nummeret, som i firmaprofilen. */
.ns-skuff { --kb-drawer-w: 560px; }
.ns-skuff .ns-lesefeil { margin-top: 4px; }
.ns-skuff .ns-laster { display: flex; flex-direction: column; gap: 22px; margin: 6px 0 18px; }
.ns-skuff .ns-laster .kb-skjelett { display: block; width: 100%; height: 36px; border-radius: var(--kb-r); }
@media (max-width: 640px) {
    .bank-modal.kb-drawer.kb-bekreft .bank-modal__dialog {
        top: auto; left: 0; right: 0; bottom: 0; width: 100vw; max-height: 85vh;
        border-left: 0; border-top: 1px solid var(--kb-line);
        border-radius: var(--kb-r-dialog) var(--kb-r-dialog) 0 0;
        animation: kb-ark-inn 180ms ease-out;
    }
}
@keyframes kb-ark-inn { from { transform: translateY(24px); opacity: 0; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .bank-modal.kb-drawer.kb-bekreft .bank-modal__dialog { animation: none; } }
.kb-bekreft__tekst { margin: 0; font-size: calc(13.5px * var(--kb-skala)); line-height: 1.6; color: var(--kb-ink); }
/* Det som rammes (runde 2): filene eller kladdene, fem og «og N til». */
.kb-bekreft__liste { margin: 14px 0 0; padding: 10px 12px 10px 28px; border: 1px solid var(--kb-line-2); border-radius: var(--kb-r); font-size: calc(13px * var(--kb-skala)); color: var(--kb-ink); }
.kb-bekreft__liste li { overflow-wrap: anywhere; }
.kb-bekreft__liste li + li { margin-top: 3px; }
/* Beløpene som rammes (runde 10b): navnet til venstre, beløpet høyrestilt. */
.kb-bekreft__tall { display: grid; grid-template-columns: 1fr max-content; gap: 3px 16px; margin: 14px 0 0; padding: 10px 12px; border: 1px solid var(--kb-line-2); border-radius: var(--kb-r); font-size: calc(13px * var(--kb-skala)); }
.kb-bekreft__tall[hidden] { display: none; }
.kb-bekreft__tall dt { margin: 0; font-weight: 400; color: var(--kb-ink-2); }
.kb-bekreft__tall dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; color: var(--kb-ink); }
.kb-bekreft__liste .kb-bekreft__mer { list-style: none; margin-left: -16px; color: var(--kb-ink-2); }
/* Vernet og bekreftelsen står over bunnlinjen, med det trygge valget først. */
.kb-vakt {
    flex: none;
    margin: 0 24px 14px;
    padding: 12px 14px;
    border: 1px solid var(--kb-notice-line);
    border-radius: var(--kb-r);
    background: var(--kb-notice-soft);
    font-size: calc(13px * var(--kb-skala)); line-height: 1.5;
}
.kb-vakt[hidden] { display: none; }
.kb-vakt__tekst { margin: 0 0 10px; }
.kb-vakt__valg { display: flex; gap: 8px; flex-wrap: wrap; }
.kb-vakt__ja, .kb-vakt__ja:hover { color: var(--kb-danger); font-weight: 600; }
/* En farlig handling i skuffen: tekst i rødt, ikke en knapp som roper. */
.kb-danger-link {
    display: inline-flex; align-items: center; gap: 4px;
    padding: 0; border: 0; background: none;
    color: var(--kb-danger); font: inherit; font-size: calc(12.5px * var(--kb-skala)); font-weight: 500; cursor: pointer;
}
/* Ikonet på tekstens linje (runde 7c: 18 px og blokk sto det lavere). */
.kb-danger-link .material-symbols-rounded { font-size: calc(16px * var(--kb-skala)); }
.kb-danger-link:hover { text-decoration: underline; }
/* Periodelåsens lenke i vinduet (style.css) har ikon, som .kb-link. */
.lock-pop__link { padding-bottom: 1px; line-height: 1.25; }
.lock-pop__link:hover { text-decoration: none; background: var(--kb-understrek); }
body.kb-skuff-apen { overflow: hidden; }
/* Bare bevegelse, ikke gjennomsiktighet: en fane som ikke tegnes, står på
   startbildet, og en halvgjennomsiktig skuff er verre enn en som står 16 px
   til siden (DESIGN-minnet om CSS-overganger). */
@keyframes kb-skuff-inn { from { transform: translateX(16px); } to { transform: none; } }
@media (prefers-reduced-motion: reduce) {
    .bank-modal.kb-drawer .bank-modal__dialog { animation: none; }
}

/* (i)-vinduet: definisjonen står her, ikke i grå tekst på siden. */
.kb-popover {
    position: absolute;
    z-index: 2100;
    max-width: min(320px, calc(100vw - 24px));
    padding: 10px 12px;
    background: var(--kb-surface);
    border: 1px solid var(--kb-line);
    border-radius: var(--kb-r-flyt);
    box-shadow: var(--kb-shadow-pop);
    font-size: calc(12.5px * var(--kb-skala)); line-height: 1.5;
    color: var(--kb-ink);
}

/* Notatskjemaet (infotavla, på siden og i skuffen): etiketten «Tekst» står
   over verktøylinjen, ikke inne i feltet; ellers la den seg over knappen for
   fet skrift (runde 6b). */
.info-editor-drop .form-group:has(> .info-md-toolbar) > label { transform: none !important; }

/* Hvem som ser et notat: internt er standarden og har ikke noe merke; «Delt
   med klient» er en status med kobolt prikk (info-board.js, runde 6b). */
.info-visibility--internal { color: var(--kb-ink-2); background: var(--kb-soft); }
.info-visibility--shared { color: var(--kb-done-ink); background: var(--kb-done); }
.info-delt { font-size: calc(12px * var(--kb-skala)); }
.info-post.is-important { --info-flate: var(--kb-notice-soft); border-color: var(--kb-notice-line); background: var(--kb-notice-soft); }
.info-viktig { margin-right: 3px; font-size: 16px; vertical-align: -3px; color: var(--kb-warning); }

/* Notatkortet: tittelen er knappen som åpner notatet (runde 6b), og
   forhåndsvisningen er inert, så lenkene i den ikke tar fokus. */
.info-post__head { align-items: flex-start; }
.info-post__tekst { min-width: 0; }
.info-post__merker { display: flex; align-items: center; gap: 6px; flex: none; }
.info-post__apne {
    display: inline; margin: 0; padding: 0; border: 0; background: none;
    font: inherit; color: inherit; text-align: left; cursor: pointer;
}
.info-post__apne:hover { color: var(--kb-accent); }
.info-post__apne:focus-visible { outline-offset: 2px; border-radius: 2px; }

/* Notatet (siden og skuffen): «← Notater» som lenke, tittelen med
   handlingene til høyre, så metalinjen (runde 6b, som fakturaen). */
.info-detail__back {
    display: inline-flex; align-items: center; gap: 4px; margin: 0 0 12px; padding: 0 0 1px;
    border: 0; background: none; color: var(--kb-accent); font: inherit;
    font-size: calc(13px * var(--kb-skala)); font-weight: 500; cursor: pointer;
}
.info-detail__back:hover { color: var(--kb-accent-hover); background: var(--kb-understrek); }
.info-detail__back .material-symbols-rounded { font-size: 17px; }
.info-detail__hode { display: flex; align-items: flex-start; flex-wrap: wrap; gap: 8px 16px; margin-bottom: 6px; }
.info-detail__title { margin: 0; min-width: 0; font-family: var(--kb-display); font-weight: 600; letter-spacing: -0.015em; }
.info-detail__title:focus { outline: none; }
.info-detail__handlinger { margin-left: auto; display: flex; gap: 6px; }
.info-detail__slett { background: none; border-color: transparent; color: var(--kb-danger); }
.info-detail__slett:hover { background: var(--kb-danger-soft); color: var(--kb-danger); }
.info-detail__meta { color: var(--kb-ink-2); }
.info-detail__delt {
    display: flex; align-items: center; gap: 6px; margin: -4px 0 16px;
    font-size: calc(12.5px * var(--kb-skala)); color: var(--kb-ink-2);
}
.info-detail__delt .material-symbols-rounded { font-size: 17px; color: var(--kb-primary); }

/* Notatskjemaet: verktøylinjen med Skriv | Forhåndsvis, og vedleggene. */
.info-md-toolbar { align-items: center; }
.info-md-toolbar .kb-seg { margin-right: 6px; }
.info-md-toolbar .btn { width: auto; min-width: 30px; height: 30px; padding: 0 8px; }
.info-md-preview { min-height: 190px; border-color: var(--kb-line); background: var(--kb-canvas); border-radius: var(--kb-r); }
#sharedWarning { border-radius: var(--kb-r) !important; border-color: var(--kb-notice-line) !important; background: var(--kb-notice-soft) !important; color: var(--kb-ink) !important; }
#postError { border-radius: var(--kb-r) !important; border-color: var(--kb-danger-line) !important; background: var(--kb-danger-soft) !important; color: var(--kb-danger) !important; }
.info-vedlegg__tittel { display: block; margin-bottom: 4px; font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.info-vedlegg { display: flex; align-items: center; gap: 8px; padding: 5px 0; border-bottom: 1px solid var(--kb-line-2); }
.info-vedlegg > .material-symbols-rounded { font-size: 17px; color: var(--kb-ink-2); }
.info-vedlegg__navn { flex: 1 1 auto; min-width: 0; font-size: calc(13px * var(--kb-skala)); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Husets sideskuff (infotavlen) i samme farger. */
.side-drawer__panel { background: var(--kb-surface); box-shadow: var(--kb-shadow-dialog); }
.side-drawer__title { font-family: var(--kb-display); }

/* ============================================================================
   Nøkkeltallet og tallene rundt det (kitet: ett avgjørende tall, forklart
   av de andre, ikke like store KPI-kort)
   ============================================================================ */
.kb-hero { display: flex; gap: 28px; align-items: flex-start; flex-wrap: wrap; margin-bottom: 28px; }
.kb-hero__main { flex: 1 1 380px; min-width: 0; }
.kb-hero__label {
    display: flex; align-items: center; gap: 6px;
    font-size: calc(12.5px * var(--kb-skala)); color: var(--kb-ink-2);
    margin-bottom: 2px;
}
.kb-hero__label .material-symbols-rounded { font-size: calc(16px * var(--kb-skala)); }
.kb-hero__figure {
    font-family: var(--kb-display);
    font-size: calc(36px * var(--kb-skala)); font-weight: 600;
    letter-spacing: -0.02em; line-height: 1.15;
    font-variant-numeric: tabular-nums;
    color: var(--kb-ink);
}
/* Enheten ved tallet: liten og dempet (runde 4b; anleggsregisteret har sin
   egen, `ar-enhet`, med samme mål). */
.kb-hero__enhet { margin-left: 6px; font-size: calc(18px * var(--kb-skala)); font-weight: 500; letter-spacing: 0; color: var(--kb-ink-2); }
.kb-hero__parts { margin: 12px 0 0; display: grid; grid-template-columns: max-content 1fr; gap: 3px 10px; font-size: calc(13px * var(--kb-skala)); }
.kb-hero__parts dt { margin: 0; font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.kb-hero__parts dd { margin: 0; color: var(--kb-ink-2); }
.kb-hero__side { flex: 0 1 340px; min-width: 260px; }
.kb-insight {
    padding: calc(14px * var(--kb-skala)) calc(16px * var(--kb-skala));
    background: var(--kb-surface);
    border: 1px solid var(--kb-line);
    border-radius: var(--kb-r);
    font-size: calc(13px * var(--kb-skala));
}
/* Faktabåndet (runde 11a; Ansattes `ans-fakta` har de samme målene): de
   tallene som beskriver noe, i stedet for like store KPI-kort. Et ikon i en
   flis, navnet, verdien og en linje under. Oransje bare for det som mangler.
   Kolonnene settes av siden (`--kb-fakta-kol`, standard 5); under 900 px
   `--kb-fakta-kol-smal` (standard 3, to for fire deler), og en liste med
   navnet til venstre under 560 px i sidens container. Delene har samme
   rader, så verdiene står på én linje også når noen har en note. */
.kb-fakta { display: grid; grid-template-columns: repeat(var(--kb-fakta-kol, 5), minmax(0, 1fr)); gap: 16px 24px;
            margin: 0; padding: 16px 18px; background: var(--kb-surface); border: 1px solid var(--kb-line); border-radius: var(--kb-r); }
.kb-fakta__del { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-rows: auto auto 1fr; gap: 0 10px; align-items: start; min-width: 0; }
.kb-fakta__ikon { grid-row: span 3; width: 32px; height: 32px; display: grid; place-items: center; border-radius: var(--kb-r);
                  background: var(--kb-accent-soft); color: var(--kb-accent); font-size: 18px; }
.kb-fakta__del.is-mangler .kb-fakta__ikon { background: var(--kb-notice-soft); color: var(--kb-warning); }
.kb-fakta__navn { font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.kb-fakta__verdi { font-weight: 600; font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kb-fakta__del.is-mangler .kb-fakta__verdi { color: var(--kb-warning); }
.kb-fakta__verdi a { color: var(--kb-accent); text-decoration: none; }
.kb-fakta__verdi a:hover { background: var(--kb-understrek); }
.kb-fakta__note { font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.kb-fakta__verdi .kb-skjelett { display: block; height: 12px; width: 70%; margin: 4px 0; }
@container (max-width: 900px) { .kb-fakta { grid-template-columns: repeat(var(--kb-fakta-kol-smal, 3), minmax(0, 1fr)); } }
@container (max-width: 560px) {
    .kb-fakta { grid-template-columns: minmax(0, 1fr); gap: 0; padding: 4px 16px; }
    .kb-fakta__del { grid-template-columns: minmax(0, 1fr) auto; grid-template-rows: none; gap: 0 12px; padding: 9px 0; border-top: 1px solid var(--kb-line-2); }
    .kb-fakta__del:first-child { border-top: 0; }
    .kb-fakta__ikon { display: none; }
    .kb-fakta__navn { grid-column: 1; grid-row: 1; align-self: center; font-size: calc(13px * var(--kb-skala)); }
    .kb-fakta__verdi { grid-column: 2; grid-row: 1; text-align: right; }
    .kb-fakta__note { grid-column: 1 / -1; grid-row: 2; text-align: right; white-space: normal; }
}
.kb-insight__title { font-weight: 600; }
.kb-insight__meta { color: var(--kb-ink-2); }
.kb-insight .kb-link { margin-top: 8px; }

/* Et listekort: tittel, et stille antall, verktøy til høyre. */
.kb-listcard { background: var(--kb-surface); border: 1px solid var(--kb-line); border-radius: var(--kb-r); overflow: hidden; overflow: clip; }
.kb-listcard__head {
    display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
    padding: 14px 18px;
}
.kb-listcard__title { font-family: var(--kb-display); font-size: calc(16px * var(--kb-skala)); font-weight: 600; margin: 0; }
.kb-listcard__count { color: var(--kb-ink-2); font-size: calc(13px * var(--kb-skala)); }
.kb-listcard__tools { margin-left: auto; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; align-items: center; }
.kb-listcard__tools[hidden] { display: none; }
.kb-listcard .table { margin-bottom: 0; }
.kb-listcard .table > thead > tr > th:first-child, .kb-listcard .table > tbody > tr > td:first-child,
.kb-listcard .table > tfoot > tr > td:first-child { padding-left: 18px; }
.kb-listcard .table > thead > tr > th:last-child, .kb-listcard .table > tbody > tr > td:last-child,
.kb-listcard .table > tfoot > tr > td:last-child { padding-right: 18px; }
/* Fanene som tittel i et listekort (runde 1, Bokføring): «Bokførte bilag · 35
   | Kladder · 1». Samme skrift som en korttittel; den valgte har kobolt-
   streken mot tabellen, og antallet står stille etter navnet. Hodet er like
   høyt i begge fanene, med eller uten verktøyene. */
.kb-listcard__head--faner { padding-top: 4px; padding-bottom: 0; }
.kb-faner { display: flex; gap: calc(24px * var(--kb-skala)); align-self: stretch; }
.kb-fane {
    display: inline-flex; align-items: center; gap: 6px;
    margin: 0; padding: 9px 1px 10px;
    border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: none;
    font-family: var(--kb-display); font-size: calc(16px * var(--kb-skala)); font-weight: 600; letter-spacing: -0.01em;
    color: var(--kb-ink-2); cursor: pointer; white-space: nowrap;
}
.kb-fane:hover { color: var(--kb-ink); }
/* Ringen innenfor fanen: fanene står i en flate som ruller sidelengs, og den
   klipte en ring utenfor (runde 10b). */
.kb-fane:focus-visible { outline-offset: -2px; }
.kb-fane[aria-selected="true"], .kb-fane[aria-current="page"] { color: var(--kb-ink); border-bottom-color: var(--kb-accent); }
.kb-fane__antall {
    font-family: var(--kb-sans); font-size: calc(13px * var(--kb-skala)); font-weight: 500; letter-spacing: 0;
    color: var(--kb-ink-2); font-variant-numeric: tabular-nums;
}
.kb-fane__antall:empty, .kb-antall:empty { display: none; }
/* Skjermleseren hører «Alle notater, 4», ikke «Alle notater4» (runde 6b). */
.kb-fane__antall::before, .kb-antall::before { content: "·"; content: "·" / ", "; margin-right: 6px; }
.kb-antall { margin-left: -4px; color: var(--kb-ink-2); font-size: calc(13px * var(--kb-skala)); font-variant-numeric: tabular-nums; }
/* Båndet når rader er valgt (runde 1–2): antallet og handlingene. Det står
   sist i kortet og flyter nederst i vinduet mens lista ruller (sticky), så
   det alltid er for hånden, og radene over flytter seg ikke når det kommer
   (runde 2: et bånd over tabellen dyttet lista 52 px ned, og neste klikk
   traff feil rad). Klassen is-visible viser det. */
.kb-utvalg {
    display: none; align-items: center; flex-wrap: wrap; gap: 8px;
    position: sticky; bottom: 12px; z-index: 4;
    margin: 12px;
    padding: 8px 10px 8px 14px;
    background: var(--kb-surface);
    border: 1px solid var(--kb-accent-line); border-radius: var(--kb-r-flyt);
    box-shadow: var(--kb-shadow-pop);
    font-size: calc(13px * var(--kb-skala));
}
.kb-utvalg.is-visible { display: flex; }
.kb-utvalg__antall { font-weight: 600; color: var(--kb-accent); }
.kb-utvalg__skjult { color: var(--kb-ink-2); }
.kb-utvalg__skjult:empty { display: none; }
.kb-utvalg__luft { flex: 1; }
/* Menyen på en rad (kebab, style.css) i kobolt (runde 2). */
.kebab-menu__panel { background: var(--kb-surface); border-color: var(--kb-line); border-radius: var(--kb-r-flyt); box-shadow: var(--kb-shadow-pop); }
.kebab-menu__item { color: var(--kb-ink); font-size: calc(13px * var(--kb-skala)); }
.kebab-menu__item .material-symbols-rounded { color: var(--kb-ink-2); }
.kebab-menu__item:hover:not(:disabled), .kebab-menu__item:focus-visible { background: var(--kb-soft); }
.kebab-menu__item:focus-visible { outline-offset: -2px; }
.kebab-menu__item.danger, .kebab-menu__item.danger .material-symbols-rounded { color: var(--kb-danger); }
/* En merknad om en feil (saldobalansen går ikke opp, runde 7b): rød flate. */
.kb-notice.is-feil { background: var(--kb-danger-soft); border-color: var(--kb-danger-line); }
.kb-notice.is-feil .kb-notice__icon { color: var(--kb-danger); }
/* Det en status betyr, uten noe å ta stilling til (runde 11a: «Ingenting å
   melde denne måneden»): hvit med kobolt ikon, ikke varm. */
.kb-notice.is-info { background: var(--kb-surface); border-color: var(--kb-line); }
.kb-notice.is-info .kb-notice__icon { color: var(--kb-accent); }
/* Noe som gikk bra (passordet er satt, vilkårene er godtatt): hvit med grønn
   hake. --kb-done er en flate; haken er prikkens grønne (runde 15a rettet:
   haken var usynlig, særlig i mørkt tema). */
.kb-notice.is-ok { background: var(--kb-surface); border-color: var(--kb-done-line); }
.kb-notice.is-ok .kb-notice__icon { color: var(--kb-done-dot); }

/* Sperret med aria-disabled (fokus og grunnen står, se runde 4b) ser ut som
   :disabled: knappene, valgene i kb-seg og lenkeknappene (runde 7a). */
.btn[aria-disabled="true"], .kb-seg button[aria-disabled="true"], .kb-link[aria-disabled="true"] {
    opacity: .45; cursor: not-allowed; box-shadow: none;
}

/* Infotavle-knappen i sidehodet har de andre knappenes høyde (runde 7b). */
.page-header__actions .info-page-btn { min-height: 36px; }

/* Periodevelgeren (period_selector.js; hovedboken og saldobalansen, runde 7a):
   ingen egen boks, typene som et segmentert valg, perioden som en knapp med
   pila som åpner tidslinjen, og tidslinjen i kobolts farger. */
/* nowrap: i en kolonne som brytes, er linja så bred som innholdet, og typene
   gjorde siden 466 px bred på en telefon (runde 7a). */
.period-bar { gap: 0; padding: 0; background: none; border: 0; border-radius: 0; flex-wrap: nowrap; }
.period-bar__top { gap: 10px 18px; }
.period-bar__pills { flex-wrap: wrap; }
.period-bar__nav { gap: 2px; }
.period-bar__nav .btn-icon { width: 32px; height: 32px; padding: 0; }
.period-bar__label {
    display: inline-flex; align-items: center; justify-content: center; gap: 2px;
    min-width: calc(180px * var(--kb-skala)); height: 32px; margin: 0; padding: 0 6px 0 10px;
    border: 0; border-radius: var(--kb-r); background: none;
    font-family: var(--kb-display); font-size: calc(16px * var(--kb-skala)); font-weight: 600; color: var(--kb-ink);
    cursor: pointer; white-space: nowrap;
}
.period-bar__label:hover { background: var(--kb-hover); }
.period-bar__label::after { display: none; }
.period-bar__label .material-symbols-rounded { font-size: 20px; color: var(--kb-ink-2); transition: transform 150ms ease; }
.period-bar.is-ribbon-open .period-bar__label .material-symbols-rounded { transform: rotate(180deg); }
/* Forrige og neste holder plassen når de ikke gjelder, så perioden ikke hopper. */
.period-bar__nav [data-skjult] { visibility: hidden; }
.period-bar__custom { gap: 6px; flex-wrap: wrap; }
.period-bar__custom[hidden] { display: none; }
.period-bar .period-bar__custom input.form-control[type="text"] { width: calc(150px * var(--kb-skala)); }
.period-bar__custom .arrow { color: var(--kb-ink-2); }
.period-bar__feil { flex-basis: 100%; margin: 0; font-size: calc(12px * var(--kb-skala)); color: var(--kb-danger); }
.period-bar__feil[hidden] { display: none; }
.period-bar__spacer { display: none; }
.period-bar__actions { margin-left: auto; }
.period-bar__actions .btn-icon { width: 32px; height: 32px; padding: 0; }
/* Mens siden viser noe velgeren ikke styrer («per dato»). */
.period-bar.is-inert { opacity: .45; }
/* Telefon: typene ruller sidelengs i stedet for å brytes over to linjer. */
.period-bar__top { min-width: 0; }
.period-bar__pills { min-width: 0; max-width: 100%; overflow-x: auto; flex-wrap: nowrap; scrollbar-width: none; }
.period-bar__pills::-webkit-scrollbar { display: none; }
.period-bar__pills button { flex: none; }
.period-ribbon {
    margin-top: 12px; padding: 16px 10px 8px;
    background: var(--kb-surface); border: 1px solid var(--kb-line); border-radius: var(--kb-r);
}
.period-ribbon__cell { color: var(--kb-ink-2); background: var(--kb-surface); border-color: var(--kb-line-2); }
.period-ribbon__cell:first-child { border-left-color: var(--kb-line-2); }
.period-ribbon__row:first-child .period-ribbon__cell { border-top-color: var(--kb-line-2); }
.period-ribbon__cell:hover { background: var(--kb-hover); color: var(--kb-ink); }
.period-ribbon__cell--year { color: var(--kb-ink); }
.period-ribbon__highlight { background: color-mix(in srgb, var(--kb-accent) 12%, transparent); border-left-color: var(--kb-accent); border-right-color: var(--kb-accent); }
.period-ribbon__cell--year { justify-content: flex-start; }
.period-ribbon__aar { position: sticky; left: 0; padding: 0 10px; }
.period-ribbon__handle::after { background: var(--kb-accent); }
.period-ribbon__handle-label { color: var(--kb-accent); background: var(--kb-surface); font-size: calc(11px * var(--kb-skala)); }
.period-ribbon__handle-label[hidden] { display: none; }

/* En knapp med det valgte og en meny (kebabMenu med `checked`): perioden på
   Oversikt og kategorien på Infotavla (runde 6). Samme høyde som søket. */
.kb-menyknapp .kebab-menu__trigger {
    width: auto; height: 32px; padding: 0 6px 0 10px; gap: 2px;
    border: 1px solid var(--kb-line); background: var(--kb-surface); color: var(--kb-ink);
    font-size: calc(12.5px * var(--kb-skala)); font-weight: 500; font-variant-numeric: tabular-nums; white-space: nowrap;
}
.kb-menyknapp .kebab-menu__trigger:hover { border-color: var(--kb-line-hover); background: var(--kb-hover); }
/* Et filter med et valg ser annerledes ut enn standardvalget (runde 8b). */
.kb-menyknapp.is-valgt .kebab-menu__trigger { border-color: var(--kb-accent-line); background: var(--kb-accent-soft); color: var(--kb-accent); }
.kb-menyknapp.is-valgt .kebab-menu__trigger .material-symbols-rounded { color: var(--kb-accent); }
.kb-menyknapp .kebab-menu__trigger .material-symbols-rounded { font-size: 18px; color: var(--kb-ink-2); }
/* I sidehodet står menyen ved knappene, og er like høy som dem (runde 9;
   saldobalansen og MVA hadde hver sin regel for det). */
.page-header__actions .kb-menyknapp .kebab-menu__trigger { height: 36px; padding: 0 8px 0 12px; gap: 6px; font-size: calc(13px * var(--kb-skala)); }
/* Lukket: lås og gruppenummer, klikk for å gjenåpne. Den samme i hovedboken
   og reskontroen (runde 9). */
.kb-lukket {
    display: inline-flex; align-items: center; gap: 3px; flex: none;
    padding: 1px 7px; border: 0; border-radius: var(--kb-r);
    background: var(--kb-soft); color: var(--kb-ink-2); cursor: pointer;
    font: inherit; font-size: calc(11px * var(--kb-skala)); font-weight: 600; white-space: nowrap;
}
.kb-lukket:hover { background: var(--kb-accent-soft); color: var(--kb-accent); }
/* Leserollen: et merke, ikke en knapp som gjenåpner (reskontroen, hovedboken). */
.kb-lukket.kb-lukket--les { cursor: default; }
.kb-lukket.kb-lukket--les:hover { background: var(--kb-soft); color: var(--kb-ink-2); }
.kb-lukket .material-symbols-rounded { font-size: 12px; }
/* Et valg blant flere (perioden): haken står på fast plass, synlig på det valgte. */
.kebab-menu__item[aria-checked="false"] > .material-symbols-rounded { visibility: hidden; }
.kebab-menu__item[aria-checked="true"] > .material-symbols-rounded { color: var(--kb-accent); }
.kebab-menu__item.danger:hover:not(:disabled) { background: var(--kb-danger-soft); }
.kebab-menu__item:disabled, .kebab-menu__item:disabled .material-symbols-rounded { color: var(--kb-ink-3); }
/* Et valg som ikke kan brukes, med grunnen under (kebabMenu, `hint`). */
.kebab-menu__item[aria-disabled="true"], .kebab-menu__item[aria-disabled="true"] .material-symbols-rounded { color: var(--kb-ink-3); cursor: default; }
.kebab-menu__item[aria-disabled="true"]:hover { background: transparent; }
.kebab-menu__tekst { display: flex; flex-direction: column; min-width: 0; }
.kebab-menu__hint { max-width: 260px; margin-top: 1px; font-size: calc(12px * var(--kb-skala)); line-height: 1.4; color: var(--kb-ink-2); white-space: normal; }
.kebab-menu__sep { background: var(--kb-line-2); }
.kebab-menu__trigger .material-symbols-rounded { font-size: 20px; }
/* ⋮ i en liste på telefon: 40 × 40 px, for resten av raden åpner skuffen, så
   et bom åpner noe annet enn menyen (runde 14a rettet). */
@media (max-width: 640px) {
    .kb-listcard td.row-actions .kebab-menu__trigger { width: 40px; height: 40px; }
}
/* Pila som åpner en rad: en knapp med aria-expanded (runde 1). */
.rad-pil {
    width: 28px; height: 28px; padding: 0;
    display: inline-grid; place-items: center;
    border: 0; border-radius: var(--kb-r); background: none;
    color: var(--kb-ink-2); cursor: pointer; vertical-align: middle;
}
.rad-pil:hover { background: var(--kb-soft); color: var(--kb-ink); }
.table-data .rad-pil .expand-caret { color: inherit; }
.table-data tr.is-expanded .rad-pil .expand-caret { color: var(--kb-accent); }
@media (max-width: 640px) {
    .kb-listcard__tools { margin-left: 0; width: 100%; justify-content: flex-start; padding-bottom: 12px; }
    .kb-listcard__head--faner .kb-listcard__tools { padding-top: 8px; }
    .kb-listcard__tools .kb-sok, .kb-listcard__tools .kb-sok > input { width: 100%; }
}
/* Søket i hodet på et listekort (runde 1, 30.09.2026): ikon og felt ved
   verktøyene, og tabellen filtreres mens man skriver. no-style på feltet
   holder skjemaenes feltregler unna. */
.kb-sok { position: relative; display: inline-flex; align-items: center; margin: 0; }
/* I hodet på et listekort fyller feltet etiketten, så en side som gjør søket
   bredere, ikke får et tomrom før utvalget, og et utvalg (kb-velger) er like
   høyt som søket (runde 13b rettet; før 32 og 36 px). */
.kb-listcard__tools { --kb-velger-h: 32px; }
.kb-listcard__tools .kb-sok { width: calc(220px * var(--kb-skala)); }
.kb-listcard__tools .kb-sok > input { width: 100%; }
.kb-sok > .material-symbols-rounded {
    position: absolute; left: 9px;
    font-size: 17px; color: var(--kb-ink-3); pointer-events: none;
}
.kb-sok > input {
    width: calc(220px * var(--kb-skala)); height: 32px; padding: 0 10px 0 32px;
    border: 1px solid var(--kb-line); border-radius: var(--kb-r);
    background: var(--kb-surface); color: var(--kb-ink);
    font: inherit; font-size: calc(13px * var(--kb-skala));
    transition: border-color 150ms ease, box-shadow 150ms ease;
}
.kb-sok > input::placeholder { color: var(--kb-ink-2); }
.kb-sok > input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
.kb-sok > input:hover { border-color: var(--kb-line-hover); }
.kb-sok > input:focus { outline: none; border-color: var(--kb-accent); box-shadow: 0 0 0 3px var(--kb-accent-soft); }
/* Tom liste, og ingen treff på søket: en flis med ikon, en tittel og én
   linje, og eventuelt det man kan gjøre. --rad er varianten inne i tabellen. */
.kb-tomt { padding: 44px 20px 40px; text-align: center; }
.kb-tomt[hidden] { display: none; }
.kb-tomt__ikon {
    display: inline-grid; place-items: center; width: 48px; height: 48px;
    border-radius: var(--kb-r); background: var(--kb-accent-soft); color: var(--kb-accent);
}
.kb-tomt__tittel { margin: 16px 0 0; font-family: var(--kb-display); font-size: calc(17px * var(--kb-skala)); font-weight: 600; color: var(--kb-ink); }
.kb-tomt__tekst { max-width: 460px; margin: 6px auto 0; color: var(--kb-ink-2); font-size: calc(13px * var(--kb-skala)); line-height: 1.55; }
.kb-tomt--rad { padding: 28px 20px; }
.kb-tomt--rad .kb-tomt__tittel { margin: 0; font-family: var(--kb-sans); font-size: calc(13.5px * var(--kb-skala)); font-weight: 500; }
/* Ikonflisen sto helt inntil tittelen (runde 14b rettet). */
.kb-tomt--rad .kb-tomt__ikon + .kb-tomt__tittel { margin-top: 10px; }
.kb-tomt--rad .kb-link { margin-top: 6px; }
.kb-tomt--feil .kb-tomt__ikon { background: var(--kb-danger-soft); color: var(--kb-danger); }
/* Ingen tilgang: låsen i den nøytrale flisen (runde 16b). */
.kb-tomt--laas .kb-tomt__ikon { background: var(--kb-soft); color: var(--kb-ink-2); font-size: 24px; }
.kb-ingen-tilgang { max-width: calc(560px * var(--kb-skala)); margin: 24px auto 0; }
/* Leserollen: «Kun lesing» ved tittelen og i sidemenyen, og det som endrer,
   er borte på innstillingssidene (runde 16b). */
.kb-kun-lesing {
    display: inline-flex; align-items: center; gap: 4px; margin-left: 12px; vertical-align: middle;
    font-family: var(--kb-sans); font-size: calc(12.5px * var(--kb-skala)); font-weight: 500; letter-spacing: 0;
    color: var(--kb-ink-2); white-space: nowrap;
}
.kb-kun-lesing .material-symbols-rounded { font-size: 15px; }
.kb-company__lesing { display: flex; width: max-content; margin-top: 3px; font-size: calc(11.5px * var(--kb-skala)); color: var(--kb-ink-2); }
/* Tittelen og «Kun lesing» på samme linje; på en smal skjerm brytes merket
   til linja under, uten innrykk (det står utenfor <h1>). */
.kb-tittelrad { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: 12px; row-gap: 2px; min-width: 0; }
.kb-tittelrad > .kb-kun-lesing { margin-left: 0; }
/* Merket står ved hver tittel; en skjult tittel (lista når detaljen vises)
   tar merket med seg. */
.kb-tittelrad:has(> .page-header__title[hidden]) { display: none; }
body[data-kun-lesing] .kb-skriv { display: none !important; }
/* En tabell som ruller i sin egen flate, holder det som er absolutt
   plassert (sr-only i kolonnehodet) inne i flaten. */
.table-responsive { position: relative; }
/* Lenka som hopper over sidemenyen, synlig bare med tastaturfokus. */
.kb-hopp { position: absolute; left: 12px; top: -48px; z-index: 2000; padding: 8px 14px; border-radius: var(--kb-r);
    background: var(--kb-surface); color: var(--kb-accent); box-shadow: 0 2px 8px rgba(0, 0, 0, .12); font-weight: 500; }
.kb-hopp:focus { top: 12px; }
#innhold:focus { outline: none; }
body[data-kun-lesing]:is([data-innstilling], [data-lesbar]) .page-header .btn-soft,
body[data-kun-lesing]:is([data-innstilling], [data-lesbar]) .kb-link[data-endre],
body[data-kun-lesing]:is([data-innstilling], [data-lesbar]) [data-ny],
body[data-kun-lesing][data-innstilling] #vk-hent,
body[data-kun-lesing][data-innstilling] [data-vk-hent],
body[data-kun-lesing][data-innstilling] #pr-tomt-ny,
body[data-kun-lesing][data-innstilling] #kk-tomt-ny { display: none !important; }
.kb-tomt > .kb-link { margin-top: 12px; }
/* En knapp i en tom tilstand (Prøv igjen, Last opp) står med luft under teksten. */
.kb-tomt__knapp { margin-top: 14px; }
/* Lasting: et stille skjelett, med aria-busy på lista (skillen). Ingen
   bevegelse; det står bare til dataene kommer. */
.kb-skjelett { display: inline-block; width: 70%; max-width: 100%; height: 10px; border-radius: 3px; background: var(--kb-soft); vertical-align: middle; }
td.text-right > .kb-skjelett { width: 50%; }

/* Kildebrikken (static/js/kildebrikke.js): hvor bilaget kom fra. Vanlig
   skrift på én linje i kobolt-fargene; en tilbakeføring er ingen advarsel,
   så den er nøytral (runde 1; før store bokstaver i pastell). */
.source-chip {
    display: inline-block; max-width: 100%; vertical-align: middle;
    padding: 1px 8px; border-radius: 999px;
    font-size: calc(12px * var(--kb-skala)); font-weight: 500; line-height: 1.6;
    text-transform: none; letter-spacing: 0;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    background: var(--kb-soft); color: var(--kb-ink-2);
}
.source-chip.invoice { background: var(--kb-accent-soft); color: var(--kb-accent); }
.source-chip.bank { background: var(--kb-done); color: var(--kb-done-ink); }

/* Enhetsregisteret (brreg.js) i kobolt (runde 5): boksen som en stille flate,
   overskriften i vanlig skrift, og statusene som prikker med tekst i stedet
   for store fargede piller. Gjelder firmaprofilen og kontaktkortet. */
.brreg { margin: -4px 0 12px; padding: 10px 12px; border: 1px solid var(--kb-line); border-radius: var(--kb-r); background: var(--kb-hover); font-size: calc(13px * var(--kb-skala)); color: var(--kb-ink); }
.brreg__label { font-size: calc(12px * var(--kb-skala)); font-weight: 400; letter-spacing: 0; text-transform: none; color: var(--kb-ink-2); }
.brreg__name { font-weight: 600; }
.brreg__notes li { color: var(--kb-ink-2); }
.brreg__notes li.is-warn { color: var(--kb-warning); }
.brreg__notes li.is-bad { color: var(--kb-danger); }
.brreg-chip {
    display: inline-flex; align-items: center; gap: 6px; margin: 6px 14px 0 0; padding: 0;
    border-radius: 0; background: none !important;
    font-size: calc(12.5px * var(--kb-skala)); font-weight: 400; letter-spacing: 0; text-transform: none;
    color: var(--kb-ink-2) !important;
}
.brreg-chip::before { content: ''; width: 7px; height: 7px; border-radius: 50%; flex: none; background: var(--kb-ink-3); }
.brreg-chip--ok::before { background: var(--kb-done-dot); }
.brreg-chip--warn { color: var(--kb-warning) !important; }
.brreg-chip--warn::before { background: var(--kb-warning); }
.brreg-chip--bad { color: var(--kb-danger) !important; }
.brreg-chip--bad::before { background: var(--kb-danger); }
.brreg-forslag { background: var(--kb-surface); border: 1px solid var(--kb-line); border-radius: var(--kb-r-flyt); box-shadow: var(--kb-shadow-pop); }
.brreg-forslag li.is-active, .brreg-forslag li:hover { background: var(--kb-accent-soft); box-shadow: inset 2px 0 0 var(--kb-accent); }
.brreg-forslag__navn { color: var(--kb-ink); }
.brreg-forslag__meta { color: var(--kb-ink-2); }
.brreg-forslag__status { color: var(--kb-danger); }

/* Endringsloggens detaljer (audit-log.js, renderDetail): før og etter,
   linjene og det et objekt var, i kobolt (runde 8b). Brukes på Endringslogg
   og i endringsloggen for et bilag. */
.audit-detalj { font-size: calc(13px * var(--kb-skala)); }
.audit-detalj .table { margin: 0 0 10px; background: var(--kb-surface); }
.audit-detalj .table td, .audit-detalj .table th { font-variant-numeric: normal; }
.audit-detalj .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.audit-detalj .audit-navn { width: 28%; color: var(--kb-ink-2); }
.audit-detalj .audit-for { color: var(--kb-ink-2); }
.audit-detalj .audit-etter { color: var(--kb-ink); font-weight: 500; }
.audit-detalj .audit-pil { width: 36px; text-align: center; }
.audit-detalj .audit-pil .material-symbols-rounded { font-size: 16px; color: var(--kb-accent); vertical-align: middle; }
.audit-detalj .audit-seksjon { margin: 12px 0 6px; font-size: calc(12.5px * var(--kb-skala)); font-weight: 600; color: var(--kb-ink-2); }
.audit-detalj .audit-sum, .audit-detalj .audit-tom, .audit-detalj .audit-meta { margin: 0 0 8px; font-size: calc(12.5px * var(--kb-skala)); color: var(--kb-ink-2); }
.audit-detalj .audit-meta { margin: 8px 0 0; }
.audit-detalj .audit-ingen { color: var(--kb-ink-2); }
.audit-detalj .audit-merke { width: 96px; white-space: nowrap; }
.audit-detalj .audit-lik { color: var(--kb-ink-2); font-size: calc(12px * var(--kb-skala)); }
.audit-detalj .audit-dato { white-space: nowrap; }
.audit-detalj .audit-ekstra { display: block; font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); }
.audit-detalj tr.is-borte td { color: var(--kb-ink-2); text-decoration: line-through; text-decoration-color: var(--kb-line-hover); }
.audit-detalj tr.is-borte td.audit-merke { text-decoration: none; }
.audit-detalj .audit-rull { overflow-x: auto; }

/* ---- Ukas rutenett for timene (TIMER.md fase 1; static/js/timeuke.js) ----
   Brukt på Timer i appen og i ansattportalen. Uka er en tabell med dagene som
   kolonner og rutene som felt med en kant, så det synes hvor man fører (som
   i Tripletex); helg og helligdager er skyggelagt, i dag har en strek i
   hodet. Feltene har no-style, så skjemaenes feltregler holdes unna. Uka får
   plass fra 640 px (dagene 60 px, × i radhodet); under det er det én dag om
   gangen, med kommentaren under timene. Designgjennomgangen 09.10.2026:
   datoene og helgedagene i ink-2, prikken og i dag nøytrale (blått er det
   som kan klikkes), og en tydeligere kant og helg i mørkt. */
.tu { display: flex; flex-direction: column; gap: 14px; }
.tu [hidden] { display: none !important; }
/* En annen uke eller ansatt hentes: sperret og dempet. */
.tu.is-laster { opacity: .55; pointer-events: none; }
.tu-hode { display: flex; align-items: center; gap: 8px 16px; flex-wrap: wrap; }
.tu-nav { display: flex; align-items: center; gap: 2px; min-width: 0; flex-wrap: wrap; }
.tu-tittel { margin: 0 6px 0 8px; font-family: var(--kb-display); font-size: calc(17px * var(--kb-skala)); font-weight: 600;
             color: var(--kb-ink); white-space: nowrap; }
.tu-tittel:focus { outline: none; }
.tu-periode { margin-left: 4px; font-family: var(--kb-sans); font-size: calc(13px * var(--kb-skala)); font-weight: 400; color: var(--kb-ink-2); }
.tu-denne { margin-left: 4px; font-size: calc(13px * var(--kb-skala)); }
.tu-hode__hoyre { display: flex; align-items: center; gap: 4px 16px; flex-wrap: wrap; margin-left: auto; }
.tu-lagring { margin: 0; font-size: calc(12.5px * var(--kb-skala)); color: var(--kb-ink-2); }
.tu-lagring:empty { display: none; }
.tu-ukesum { margin: 0; font-size: calc(13px * var(--kb-skala)); color: var(--kb-ink-2); white-space: nowrap; }
.tu-ukesum__tall { margin-left: 4px; font-family: var(--kb-display); font-size: calc(18px * var(--kb-skala)); font-weight: 600;
                   color: var(--kb-ink); font-variant-numeric: tabular-nums; }
/* Feilen står rett under uka (eller dagstripen), ved rutene den gjelder. */
.tu-feil { margin: -6px 0 0; font-size: calc(13px * var(--kb-skala)); color: var(--kb-danger); }
.tu-laster { display: flex; flex-direction: column; gap: 12px; padding: 18px; }
.tu-laster .kb-skjelett { display: block; height: 12px; }
.tu-rull { position: relative; overflow-x: auto; border: 1px solid var(--kb-line); border-radius: var(--kb-r); background: var(--kb-surface); }
.tu-tabell { width: 100%; min-width: 600px; margin: 0; border-collapse: collapse; table-layout: fixed; font-variant-numeric: tabular-nums;
             font-size: calc(13.5px * var(--kb-skala)); }
.tu-tabell th, .tu-tabell td { border-bottom: 1px solid var(--kb-line-2); vertical-align: middle; }
.tu-tabell thead th { background: var(--kb-head); border-bottom-color: var(--kb-head-line); color: var(--kb-ink-2);
                      font-size: calc(12px * var(--kb-skala)); font-weight: 500; padding: 7px 4px; }
.tu-tabell tbody tr:last-child th, .tu-tabell tbody tr:last-child td { border-bottom-color: var(--kb-line); }
.tu-tabell tfoot th, .tu-tabell tfoot td { border-bottom: 0; font-weight: 600; color: var(--kb-ink); padding: 9px 4px; }
.tu-tabell th.tu-rad { width: auto; text-align: left; padding: 6px 6px 6px 14px; font-weight: 400; }
.tu-tabell thead th.tu-rad, .tu-tabell tfoot th.tu-rad { font-weight: 500; }
.tu-tabell .tu-dag, .tu-tabell .tu-celle { width: calc(60px * var(--kb-skala)); text-align: center; }
.tu-tabell .tu-sum { width: calc(60px * var(--kb-skala)); text-align: right; padding-right: 12px; font-weight: 600; }
.tu-tabell thead .tu-dag { line-height: 1.25; }
.tu-ukedag { display: block; text-transform: capitalize; }
.tu-dato { display: block; color: var(--kb-ink-2); font-weight: 400; }
.tu-tabell .is-helg { background: var(--kb-hover); }
.theme-dark .tu-tabell td.is-helg { background: var(--kb-soft); }
.tu-tabell thead .is-helg { background: var(--kb-head); color: var(--kb-ink-2); }
.tu-tabell thead .is-idag { box-shadow: inset 0 -2px 0 var(--kb-ink); color: var(--kb-ink); }
.tu-tabell thead .is-idag .tu-dato { color: var(--kb-ink); }
/* Radhodet: prosjektet og aktiviteten på én linje, kunden under, og × til
   høyre på en rad uten timer. */
.tu-rad__innhold { display: flex; align-items: center; gap: 4px; min-width: 0; }
.tu-radnavn { flex: 1 1 auto; min-width: 0; }
.tu-prosjekt { display: block; font-weight: 500; color: var(--kb-ink); overflow-wrap: anywhere; }
.tu-aktivitet { font-weight: 400; color: var(--kb-ink-2); }
.tu-under { display: block; margin-top: 1px; font-size: calc(12px * var(--kb-skala)); color: var(--kb-ink-2); overflow-wrap: anywhere; }
.tu-fjern { flex: none; }
.tu-tabell tr.is-avsluttet .tu-prosjekt { color: var(--kb-ink-2); }
.tu-celle { position: relative; padding: 3px; }
.tu-inn { width: 100%; height: 34px; padding: 0 4px; border: 1px solid var(--kb-line); border-radius: var(--kb-r);
          background: var(--kb-surface); color: var(--kb-ink); font: inherit; text-align: center; font-variant-numeric: tabular-nums; }
.theme-dark .tu-inn { border-color: var(--kb-line-hover); }
.tu-inn:hover:not(:focus):not(.is-invalid) { border-color: var(--kb-line-hover); }
.theme-dark .tu-inn:hover:not(:focus):not(.is-invalid) { border-color: var(--kb-ink-3); }
.tu .tu-inn:focus { outline: none; border-color: var(--kb-primary); background: var(--kb-surface); box-shadow: 0 0 0 3px var(--kb-accent-soft); }
.tu .tu-inn.is-invalid { border-color: var(--kb-danger); background: var(--kb-danger-soft); }
/* Utenfor prosjektets periode: timene kan bare tas bort. */
.tu-inn.is-utenfor { border-style: dashed; }
.tu-verdi { display: inline-block; min-width: 24px; padding: 6px 0; color: var(--kb-ink); }
.tu:not(.is-les) .is-sperret .tu-verdi { color: var(--kb-ink-2); }
.tu-verdi[data-les] { cursor: pointer; border-radius: var(--kb-r); padding: 6px 8px; }
.tu-verdi[data-les]:hover { background: var(--kb-soft); }
.tu-verdi[data-les]:focus-visible { outline: 2px solid var(--kb-primary); outline-offset: 1px; }
/* Låst av en timeliste (REGLER §58): ikonet i radhodet og merknaden over uka. */
.tu-las { font-size: 16px; color: var(--kb-ink-2); vertical-align: -3px; margin-right: 4px; }
.tu-laas { margin: 0; }
.tu-laas .kb-notice__text p { margin: 0; }
.tu-laas .kb-notice__text p + p { margin-top: 4px; }
/* Prikken: ruta har en kommentar. */
.tu-merke { position: absolute; top: 6px; right: 6px; width: 6px; height: 6px; border-radius: 50%; background: var(--kb-ink-2); pointer-events: none; }
.tu-dagsum { color: var(--kb-ink); }
.tu-tom { padding: 22px 16px; text-align: center; color: var(--kb-ink-2); }
.tu-ny { display: flex; align-items: center; gap: 8px 10px; flex-wrap: wrap; --kb-velger-h: 32px; }
.tu-ny select[data-ny="prosjekt"], .tu-ny select[data-ny="prosjekt"] + .ts-wrapper { width: min(360px, 100%); }
.tu-ny select[data-ny="aktivitet"], .tu-ny select[data-ny="aktivitet"] + .ts-wrapper { width: min(200px, 100%); }
.tu-ny select.form-control { height: 32px; }
.tu-kopier { margin-left: 4px; font-size: calc(13px * var(--kb-skala)); }
.tu-ingen { margin: 0; color: var(--kb-ink-2); font-size: calc(13px * var(--kb-skala)); }
/* Kommentaren til ruta med fokus står fast under uka, også før en rute er
   valgt (da sperret), så siden ikke hopper. */
.tu-kommentar { display: flex; flex-direction: column; gap: 6px; max-width: 720px; }
.tu-kommentar__hode { display: flex; align-items: center; gap: 2px 6px; flex-wrap: wrap; min-height: 22px; }
.tu-kommentar__tittel { font-size: calc(12.5px * var(--kb-skala)); font-weight: 600; color: var(--kb-ink); }
.tu-kommentar__rute { margin-left: 4px; font-size: calc(12.5px * var(--kb-skala)); color: var(--kb-ink-2); }
.tu-kommentar textarea { min-height: 58px; resize: vertical; }
.tu-kommentar textarea:disabled { background: var(--kb-hover); }
.tu-kommentar__lest { margin: 0; min-height: 58px; white-space: pre-wrap; color: var(--kb-ink); }
/* Én dag om gangen (telefonen). */
.tu-dager { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
.tu-dagknapp { display: flex; flex-direction: column; align-items: center; gap: 1px; min-height: 56px; padding: 6px 2px; border: 1px solid var(--kb-line);
               border-radius: var(--kb-r); background: var(--kb-surface); color: var(--kb-ink); font: inherit; cursor: pointer;
               font-size: calc(12px * var(--kb-skala)); font-variant-numeric: tabular-nums; }
.tu-dagknapp .tu-ukedag { color: var(--kb-ink-2); }
.tu-dagknapp.is-helg { background: var(--kb-hover); }
.theme-dark .tu-dagknapp.is-helg { background: var(--kb-soft); }
.tu-dagknapp.is-idag .tu-dato { font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
.tu-dagknapp[aria-selected="true"] { border-color: var(--kb-primary); background: var(--kb-accent-soft); box-shadow: inset 0 -2px 0 var(--kb-primary); }
.tu-dagknapp .tu-dato { color: var(--kb-ink); font-size: calc(15px * var(--kb-skala)); font-weight: 500; }
.tu-dagknapp__sum { min-height: 1.3em; color: var(--kb-ink-2); }
.tu-dagliste { display: flex; flex-direction: column; border: 1px solid var(--kb-line); border-radius: var(--kb-r); background: var(--kb-surface); }
.tu-dagrad { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 6px 12px; padding: 12px 14px; border-bottom: 1px solid var(--kb-line-2); }
.tu-dagrad:last-child { border-bottom: 0; }
.tu-dagrad__timer { display: flex; align-items: center; gap: 4px; }
.tu-dagrad__timer .tu-inn { width: 76px; height: 40px; font-size: calc(15px * var(--kb-skala)); }
.tu-enhet { color: var(--kb-ink-2); font-size: calc(13px * var(--kb-skala)); }
.tu-verdi--dag { min-width: 76px; text-align: center; }
.tu-dagkommentar, .tu-dagrad__kommentar { grid-column: 1 / -1; }
.tu-dagkommentar { min-height: 52px; resize: vertical; }
.tu-dagkommentar:disabled { background: var(--kb-hover); }
.tu-dagrad__kommentar { margin: 0; white-space: pre-wrap; color: var(--kb-ink); font-size: calc(13px * var(--kb-skala)); }
.tu--dag .tu-ny select, .tu--dag .tu-ny .ts-wrapper { width: 100%; }
.tu--dag .tu-ny .btn { flex: 1 1 auto; }
/* Telefon og nettbrett: 16 px i feltene (ellers zoomer iOS inn), og 40 px
   å treffe på for pilene, ×, knappene, nedtrekkene og lenkene. */
@media (max-width: 640px), (pointer: coarse) {
    .tu .tu-inn, .tu textarea { font-size: 16px; }
    .tu .tu-pil, .tu .tu-fjern { width: 40px; height: 40px; }
    .tu-ny { --kb-velger-h: 40px; }
    .tu-ny .btn, .tu-ny select.form-control { min-height: 40px; height: 40px; }
    .tu-kopier, .tu-denne { display: inline-flex; align-items: center; min-height: 40px; }
}
