/* ── Self-hostede webfonts (P8, 2026-07-05) ───────────────────────────────────
   IBM Plex Sans + JetBrains Mono som latin-subset woff2 (dekker æ/ø/å + versaler,
   glyf-verifisert), servert lokalt fra /static/fonts/ i stedet for Google Fonts
   (fonts.googleapis.com/gstatic.com). Fjerner tredjeparts-SPOF + rundtur, og lar
   CSP droppe google-domenene. font-display:swap → tekst vises umiddelbart i
   fallback-fonten og bytter når webfonten er lastet (ingen FOIT/blank tekst).
   URL-ene er relative til denne fila (css/ → ../fonts/); filene cachess immutable
   (P8 after_request) og endres i praksis aldri. Vekter 400/500/600/700 matcher
   nøyaktig de gamle Google Fonts-forespørslene. */
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/ibm-plex-sans-400.woff2') format('woff2');}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/ibm-plex-sans-500.woff2') format('woff2');}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/ibm-plex-sans-600.woff2') format('woff2');}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:700;font-display:swap;src:url('../fonts/ibm-plex-sans-700.woff2') format('woff2');}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/jetbrains-mono-400.woff2') format('woff2');}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/jetbrains-mono-500.woff2') format('woff2');}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/jetbrains-mono-600.woff2') format('woff2');}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url('../fonts/jetbrains-mono-700.woff2') format('woff2');}

/* v-fiks 01.07 (v234) — kontrast-fiks for --text-3, hevet 7d8694→87909e
   (≥4,68:1). KaiRK meldte fortsatt «ganske blass» etter deploy → 6
   mockup-alternativer i ~/kairk/Dashboard/design-mockups/
   kontrast-label-varianter-2026-07.html (A-F). KaiRK valgte **variant F —
   full lysstyrke**: --text-3 SATT LIK --text-1 (label = nøyaktig samme farge
   som verdien den beskriver). --text-3 brukes av .wpsr .wl, .mk-kpi .l,
   tabell-th, KPI-captions m.fl. på tvers av HELE plattformen (én token →
   Makro-kort, KPI-captions på I dag/Posisjoner/Risiko/Journal/Papirbot,
   tabell-headere på Varsler/Detalj/Brukere osv. rettes samtidig). Bevisst
   avveining (flagget i mockupen, KaiRK valgte det likevel): label og verdi
   har nå IDENTISK lysstyrke — hierarkiet mellom dem bæres kun av
   størrelse/versaler/posisjon, ikke lenger av farge.

   D1 (2026-07-06, designvurdering) — variant F REVERSERT riktig: --text-3 skilles
   fra --text-1 igjen og settes til #9aa4b2 (kontrast 7,2:1 mot --bg-1 → består WCAG),
   men label-selektorene løftes samtidig til 10,5px/600/uppercase/.09em i JetBrains Mono
   (se .lbl-utility + normaliserte label-selektorer nederst) slik at hierarkiet nå bæres
   av BÅDE farge OG type — ikke bare størrelse. Ny --amber skilles fra
   --orange (varsling) for edge-fargeskalaen; --edge = identitet/primærhandling
   (samme verdi som cockpit --ck-edge). Fasit: mockup 04 (komponenter-og-tilstander).

   ═══ ÉN PALETT, ETT STED (2026-07-30) ══════════════════════════════════════
   Tema-laget er FJERNET. Det fantes aldri to valgbare temaer — carbon var
   eneste tema siden juli 2026 — men den gamle grunnpaletten rendret fortsatt
   live gjennom fem kanaler. Rotårsaken: tema-klassen satt på <body>, og custom
   properties arver NEDOVER, så <html> (body sin FORELDER) så aldri carbon og
   leste :root, altså grunnpaletten. Målt live 30.07: html rgb(10,13,18) mot
   body rgb(0,0,0) — synlig ved overscroll. Samme feilklasse traff /login (som
   ikke har noen tema-klasse i det hele tatt) og /graf.

   Nå bor carbons verdier HER. Da finnes det ikke lenger noe tema å plassere på
   riktig element: <html>, /login og /graf blir riktige VED KONSTRUKSJON, og
   regelen «speil token-endringer i begge blokker» — som ble brutt tre ganger
   (--text-3 06.07, fire arvede tokens 25.07, --card/--mono/inline-CSS 30.07) —
   trengs ikke lenger i stedet for å måtte huskes.

   🔴 Å endre en farge er nå ÉN linje her. verktoy/css-guard.py (kjøres av
   deploy.sh før dry-run) feiler hvis en pensjonert palettverdi, en udefinert
   token, en død fallback eller en theme-*-klasse dukker opp igjen.
   ═══════════════════════════════════════════════════════════════════════════ */
:root {
  color-scheme: dark;

  /* ── flater, rammer, tekst ── */
  --bg-0:#000000; --bg-1:#0a0a0d; --bg-2:#0d0d11; --bg-3:#17181c;
  --border:#1e1f24; --border-2:#2a2c31;
  /* --bg-2-hi = kortflaten LOEFTET (hover/aapen rad i varselloggen, toppen av
     gradienten i Makro sine regime-celler). Erstatter --card-hi og --mk-card-hi,
     som begge var #141a24 og begge var kopier av hverandre. ÉN linje aa endre.
     45 % holder samme relative loeft som #10151d -> #141a24 hadde (+4/+5/+5 mot
     dagens +4/+5/+7); --bg-3 alene ville doblet spranget. */
  --bg-2-hi:color-mix(in srgb, var(--bg-3) 45%, var(--bg-2));
  --text-0:#ffffff; --text-1:#e7e7ec; --text-2:#a5b0bf; --text-3:#7d8794;

  /* ── semantiske farger ── */
  --green:#00e596; --green-soft:rgba(0,229,150,.14);
  --red:#ff3b5c; --red-soft:rgba(255,59,92,.14);
  --orange:#ffc24a; --orange-soft:rgba(255,194,74,.14);
  --amber:#ffc742; --amber-soft:rgba(255,199,66,.14);
  /* --blue-tekst = --blue: denne blåtonen ER allerede den lyse tekstvarianten.
     (I grunnpaletten fantes --blue-tekst kun fordi #1f6feb var for mørk som tekst.) */
  --blue:#4db5ff; --blue-soft:rgba(77,181,255,.14); --blue-tekst:#4db5ff;
  --purple:#b388ff; --purple-soft:rgba(179,136,255,.14);
  --edge:#00e596;

  /* ── cockpit-lokale tokens (bodde i .shell-cockpit / .shell-cockpit.theme-carbon) ── */
  --ck-edge:#00e596; --ck-rail:#050506; --ck-card-2:#0a0a0d;

  /* ── typografi. --mono/--sans var brukt 33 steder UTEN å være definert noe sted;
     font-family:var(--mono) døde da (invalid at computed-value time) og tallfeltene
     rendret i IBM Plex Sans. Stakkene er de samme som .mono-klassen og body. ── */
  --sans:'IBM Plex Sans',-apple-system,sans-serif;
  --mono:'JetBrains Mono',monospace;

  /* ── hjoerneradier (1B, valgt av KaiRK 30.07 mot mockup) ─────────────────
     Carbon definerte allerede skalaen — flate 6px, kontroll 5px, overlay 8px —
     men den bodde i fem BETINGEDE regler under tema-klassen, saa alt som ble
     skrevet ETTER carbon (Nyheter, Makro, dv-kortene, tooltips) fikk aldri
     beskjed og havnet paa 8/9/10/12px. Maalt paa render: 5 ulike radier paa
     kort/paneler, 8 paa kontroller.
     Naa er skalaen tre tokens her, og en ny komponent arver riktig verdi i
     stedet for aa gjette. Piller og sirkler (20px, 50%) er bevisste og hoerer
     ikke til skalaen — de staar med sine egne verdier. */
  --r:6px;      /* flate: kort, paneler, hero */
  --r-k:5px;    /* kontroll: knapp, input, fane, chip-knapp */
  --r-o:8px;    /* overlay: tooltip, ⌘K-palett, dropdown */

  /* ── kontrastfarge paa farget flate (2A, valgt av KaiRK 30.07) ────────────
     Sju forskjellige nesten-svarte verdier gjorde nøyaktig samme jobb: lesbar
     tekst oppaa en groenn/oransje/amber flate (#06140d #06150e #0c0d10 #10151c
     #1a1a1a #0a0f0c #06281c). Ingen av dem var en palettverdi, saa css-guard
     var blind for alle sju. Den svakt groenn-tonede svarten er beholdt — den er
     en bevisst designdetalj, den var bare kopiert sju ganger. */
  --on-accent:#06140d;

  /* ── aliaser: navn som brukes i kilden og nå peker på paletten i stedet for
     å være udefinerte (eller å dra en gammel palettverdi inn via fallback).
     --gold: valgt av KaiRK 30.07 mot gold-mockupen (alternativ A = amber). ── */
  --gold:var(--amber);
  --surface-1:var(--bg-2); --surface-2:var(--bg-3);
  --border-0:var(--border); --border-1:var(--border-2);
  --ck-card:var(--bg-2); --panel-2:var(--bg-2);
}
* { box-sizing:border-box; margin:0; padding:0; forced-color-adjust:none; }
html,body { background:var(--bg-0); }
body { font-family:'IBM Plex Sans',-apple-system,sans-serif; color:var(--text-1);
  font-size:14px; line-height:1.5; min-height:100vh; -webkit-font-smoothing:antialiased; }
.mono { font-family:'JetBrains Mono',monospace; font-variant-numeric:tabular-nums; }
.pos { color:var(--green); } .neg { color:var(--red); } .warn { color:var(--orange); }

.topnav { display:flex; align-items:center; justify-content:space-between; padding:13px 24px;
  background:var(--bg-1); border-bottom:1px solid var(--border); position:sticky; top:0; z-index:100; }
.brand { display:flex; align-items:center; gap:10px; font-weight:700; font-size:16px; letter-spacing:-.01em; }
.brand-logo { width:28px; height:28px; background:linear-gradient(135deg,var(--green),color-mix(in srgb, var(--green) 52%, var(--bg-0)));
  border-radius:6px; display:flex; align-items:center; justify-content:center; color:var(--text-0);
  font-weight:700; font-size:11px; letter-spacing:.02em; line-height:1;
  font-family:'JetBrains Mono',monospace; }
.brand small { color:var(--text-3); font-weight:400; font-size:12px; margin-left:6px; }
.tabs { display:flex; gap:2px; }
.tab { padding:8px 14px; background:transparent; color:var(--text-2); border:none; border-radius:6px;
  font-size:13px; font-weight:500; font-family:inherit; cursor:pointer; display:flex; align-items:center; gap:6px; transition:all .12s; }
.tab:hover { background:var(--bg-3); color:var(--text-1); }
.tab.active { background:var(--bg-3); color:var(--green); }
.tab .badge { background:var(--red); color:var(--text-0); font-size:10px; padding:1px 6px; border-radius:8px; font-weight:700; }
.topnav-right { display:flex; align-items:center; gap:12px; }
.search { display:flex; align-items:center; gap:8px; background:var(--bg-3); border:1px solid var(--border-2);
  padding:6px 12px; border-radius:var(--r-k); font-size:13px; color:var(--text-2); min-width:200px; }
.search input { background:transparent; border:none; color:var(--text-1); font-family:inherit; font-size:13px; outline:none; flex:1; }
.refresh-btn { background:var(--blue); color:var(--text-0); border:none; padding:7px 14px; border-radius:6px;
  font-size:13px; font-weight:500; cursor:pointer; font-family:inherit; display:flex; align-items:center; gap:6px; }

/* MODUS BAR */
.modus-bar { display:flex; align-items:center; gap:10px; padding:9px 24px; background:var(--bg-1);
  border-bottom:1px solid var(--border); flex-wrap:wrap; }
.modus-bar .mlbl { font-size:10px; text-transform:uppercase; letter-spacing:.8px; color:var(--text-3); font-weight:600; }
.mb { background:var(--bg-2); border:1px solid var(--border-2); color:var(--text-2); padding:6px 13px;
  border-radius:7px; font-size:12px; cursor:pointer; font-family:inherit; }
.mframe { margin-left:auto; font-size:12px; color:var(--blue-tekst); }

/* MACRO BAR */
.macro-bar { display:flex; gap:0; background:var(--bg-1); border-bottom:1px solid var(--border);
  padding:10px 24px; font-size:13px; overflow-x:auto; }
.macro-item { display:flex; align-items:baseline; gap:8px; padding:0 16px; border-right:1px solid var(--border); white-space:nowrap; }
.macro-item:last-child { border-right:none; } .macro-item:first-child { padding-left:0; }
.macro-label { color:var(--text-3); font-size:11px; text-transform:uppercase; letter-spacing:.5px; font-weight:600; }
.macro-value { color:var(--text-0); font-weight:600; } .macro-chg { font-size:12px; font-weight:500; }

/* v32.1: mykt tak 2000px (full bredde ga rot ved browser-zoom) — litt bredere enn gamle 1800.
   v32.2: minmax(0,1fr) + min-width:0 — uten dette kan venstrekolonnen aldri bli SMALERE enn
   chart-canvasens faste pikselbredde (grid min-width:auto-fella) → zoom inn blåste layouten
   ut til høyre med horisontal scroll. minmax(0,…) lar kolonnen krympe; chartene følger etter
   via ResizeObserver i detaljer.js. */
.main { display:grid; grid-template-columns:minmax(0,1fr) 360px; gap:16px; padding:16px 20px; max-width:2000px; margin:0 auto; }
@media (max-width:1200px) { .main { grid-template-columns:1fr; } }
.col-left,.col-right { display:flex; flex-direction:column; gap:16px; min-width:0; }

.hero { background:var(--bg-2); border:1px solid var(--border); border-radius:var(--r); padding:18px 22px;
  display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:16px; }
.hero-left { flex:1; }
.hero-ticker { display:flex; align-items:center; gap:12px; margin-bottom:6px; }
.hero-ticker h1 { font-size:28px; font-weight:700; letter-spacing:-.02em; color:var(--text-0); }
.hero-ticker .full-name { color:var(--text-3); font-size:14px; border-left:1px solid var(--border-2); padding-left:12px; }
.hero-ticker .exchange-tag { background:var(--bg-3); color:var(--text-2); padding:3px 8px; border-radius:4px; font-size:11px; font-weight:600; letter-spacing:.5px; }
.hero-ticker .mode-tag { background:var(--blue-soft); color:var(--blue-tekst); padding:3px 8px; border-radius:4px; font-size:11px; font-weight:600; letter-spacing:.5px; }
.price-row { display:flex; align-items:baseline; gap:14px; margin-top:4px; }
.price { font-size:42px; font-weight:600; color:var(--text-0); font-family:'JetBrains Mono',monospace; letter-spacing:-.02em; }
.currency { color:var(--text-2); font-size:16px; font-weight:500; }
.change-pill { display:flex; align-items:center; gap:6px; padding:4px 10px; border-radius:20px; font-size:13px; font-weight:600; background:var(--bg-3); color:var(--text-2); }
.change-pill.pos { background:var(--green-soft); color:var(--green); }
.change-pill.neg { background:var(--red-soft); color:var(--red); }
.live-dot { width:6px; height:6px; border-radius:50%; animation:pulse 1.6s infinite; }
.change-pill.pos .live-dot { background:var(--green); }
.change-pill.neg .live-dot { background:var(--red); }
@keyframes pulse { 0%,100%{opacity:1;} 50%{opacity:.3;} }
.hero-meta { color:var(--text-3); font-size:13px; margin-top:6px; display:flex; gap:14px; flex-wrap:wrap; }
.hero-meta .dot { color:var(--border-2); }
.hero-right { text-align:right; }
.last-update { font-size:11px; color:var(--text-3); text-transform:uppercase; letter-spacing:.5px; font-weight:600; }
.last-update-time { font-size:14px; color:var(--text-1); margin-top:4px; font-family:'JetBrains Mono',monospace; }
.edge-badge { margin-top:10px; background:var(--bg-1); border:1px solid var(--border-2); border-radius:8px; padding:8px 12px; }
.edge-badge .el { font-size:10px; text-transform:uppercase; letter-spacing:.8px; color:var(--text-3); font-weight:600; }
.edge-badge .ev { font-size:26px; font-weight:700; color:var(--green); font-family:'JetBrains Mono',monospace; }
.edge-badge .ev small { font-size:13px; color:var(--text-3); font-weight:400; }

/* Ikke-equity referansepapirer: badge i hero + kontekst-note over KPIene */
.ref-badge { margin-top:10px; display:inline-block; background:var(--blue-soft);
  border:1px solid var(--blue); color:var(--blue-tekst); border-radius:8px;
  padding:6px 12px; font-size:11px; font-weight:600; text-transform:uppercase;
  letter-spacing:.8px; }
.ref-view-note { display:flex; gap:12px; align-items:flex-start;
  background:var(--bg-2); border:1px solid var(--border); border-left:3px solid var(--blue);
  border-radius:10px; padding:14px 18px; margin-bottom:16px;
  color:var(--text-2); font-size:13px; line-height:1.6; }
.ref-view-note strong { color:var(--text-1); }
.ref-view-icon { color:var(--blue-tekst); font-size:16px; line-height:1.4; flex-shrink:0; }

.kpi-section { background:var(--bg-2); border:1px solid var(--border); border-radius:var(--r); padding:16px; }
.kpi-section-title { font-size:11px; text-transform:uppercase; letter-spacing:1px; color:var(--text-3); font-weight:600; margin-bottom:12px; display:flex; align-items:center; gap:8px; }
.kpi-section-title::after { content:''; flex:1; height:1px; background:var(--border); }
.kpi-grid { display:grid; grid-template-columns:repeat(6,1fr); gap:10px; }
@media (max-width:1100px){ .kpi-grid{ grid-template-columns:repeat(3,1fr);} }
@media (max-width:600px){ .kpi-grid{ grid-template-columns:repeat(2,1fr);} }
.kpi { background:var(--bg-1); border:1px solid var(--border); border-radius:var(--r); padding:12px 14px; position:relative; overflow:hidden; }
.kpi::before { content:''; position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--border-2); }
.kpi.k-pos::before{background:var(--green);} .kpi.k-neg::before{background:var(--red);}
.kpi.k-warn::before{background:var(--orange);} .kpi.k-info::before{background:var(--blue);}
.kpi-label { font-size:10px; text-transform:uppercase; letter-spacing:.8px; color:var(--text-3); font-weight:600; margin-bottom:4px; }
.kpi-value { font-size:20px; font-weight:600; font-family:'JetBrains Mono',monospace; color:var(--text-0); }
.kpi-value small { font-size:11px; color:var(--text-3); font-weight:400; }
.kpi-sub { font-size:11px; color:var(--text-3); margin-top:2px; }

.card { background:var(--bg-2); border:1px solid var(--border); border-radius:var(--r); padding:18px; }
.card-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:14px; }
.card-title { font-size:12px; text-transform:uppercase; letter-spacing:1px; color:var(--text-3); font-weight:600; }
.card-title-row { display:flex; align-items:baseline; gap:12px; }
.card-title-row h3 { font-size:15px; color:var(--text-0); font-weight:600; }
.chart-controls { display:flex; gap:4px; }
.chart-tab { padding:4px 10px; font-size:12px; background:transparent; border:1px solid var(--border-2); color:var(--text-2); border-radius:var(--r-k); cursor:pointer; font-family:inherit; }
.chart-tab.active { background:var(--bg-3); color:var(--text-0); }
.chart-svg { width:100%; height:auto; display:block; }
.chart-legend { display:flex; gap:18px; margin-top:10px; font-size:12px; color:var(--text-2); flex-wrap:wrap; }
.legend-swatch { display:inline-block; width:14px; height:3px; margin-right:6px; vertical-align:middle; border-radius:1px; }
.legend-swatch.dashed { background-image:linear-gradient(to right,currentColor 50%,transparent 50%); background-size:6px 100%; }

/* CONVICTION (Edge Score lag) */
.conv-grid { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
@media (max-width:700px){ .conv-grid{ grid-template-columns:1fr; } }
.conv-row { display:flex; align-items:center; gap:10px; margin-bottom:9px; }
.conv-row .k { width:92px; font-size:12px; color:var(--text-2); }
.conv-track { flex:1; height:7px; background:var(--bg-1); border-radius:4px; overflow:hidden; }
.conv-fill { height:100%; border-radius:4px; }
.conv-note { font-size:11px; color:var(--text-3); width:128px; }

/* CLAUDE PANEL */
.claude-panel { background:linear-gradient(135deg,color-mix(in srgb, var(--purple) 6%, transparent),color-mix(in srgb, var(--blue) 4%, transparent));
  border:1px solid var(--purple-soft); border-radius:var(--r); padding:18px; position:relative; overflow:hidden; }
.claude-panel::before { content:''; position:absolute; top:0; right:0; bottom:0; width:3px; background:linear-gradient(180deg,var(--purple),var(--blue)); }
.claude-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; flex-wrap:wrap; gap:8px; }
.claude-badge { display:flex; align-items:center; gap:8px; font-size:12px; font-weight:600; color:var(--purple); text-transform:uppercase; letter-spacing:1px; }
.claude-icon { width:18px; height:18px; background:linear-gradient(135deg,var(--purple),var(--blue)); border-radius:4px; display:flex; align-items:center; justify-content:center; color:var(--text-0); font-size:11px; font-weight:700; }
.claude-meta { font-size:11px; color:var(--text-3); }
.claude-summary-row { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin-bottom:14px; }
.claude-stat { background:var(--bg-1); border:1px solid var(--border); border-radius:6px; padding:10px 12px; }
.claude-stat-label { font-size:10px; text-transform:uppercase; letter-spacing:.8px; color:var(--text-3); margin-bottom:4px; font-weight:600; }
.claude-stat-value { font-size:16px; font-weight:600; color:var(--text-0); }
.claude-stat-value.neutral { color:var(--orange); }
.claude-text { font-size:14px; line-height:1.6; color:var(--text-1); }
.claude-text p { margin-bottom:10px; } .claude-text p:last-child { margin-bottom:0; }
.claude-text strong { color:var(--text-0); font-weight:600; }
.claude-text .highlight { background:color-mix(in srgb, var(--purple) 12%, transparent); padding:1px 5px; border-radius:3px; }
.claude-tags { display:flex; gap:6px; margin-top:14px; flex-wrap:wrap; }
.claude-tag { font-size:11px; background:var(--bg-1); border:1px solid var(--border-2); color:var(--text-2); padding:3px 8px; border-radius:4px; }
.claude-actions { display:flex; gap:8px; margin-top:14px; flex-wrap:wrap; }
.claude-btn { font-size:12px; padding:6px 12px; background:transparent; border:1px solid var(--border-2); color:var(--text-1); border-radius:5px; cursor:pointer; font-family:inherit; }
.claude-btn.primary { background:var(--purple); border-color:var(--purple); color:var(--text-0); }

table { width:100%; border-collapse:collapse; }
.fund-table td { padding:8px 0; border-bottom:1px solid var(--border); font-size:13px; }
.fund-table td:first-child { color:var(--text-2); }
.fund-table td:last-child { text-align:right; font-weight:600; color:var(--text-0); font-family:'JetBrains Mono',monospace; }
.fund-table tr:last-child td { border-bottom:none; }

.signals-row { display:flex; justify-content:space-between; align-items:center; padding:8px 0; border-bottom:1px solid var(--border); font-size:13px; }
.signals-row:last-child { border-bottom:none; }
.signals-label { color:var(--text-2); }
.chip { display:inline-block; padding:3px 9px; border-radius:5px; font-size:12px; font-weight:600; }
.chip-pos{background:var(--green-soft);color:var(--green);} .chip-neg{background:var(--red-soft);color:var(--red);}
.chip-warn{background:var(--orange-soft);color:var(--orange);} .chip-neutral{background:var(--bg-3);color:var(--text-2);}
/* F5b: blå kontekst-chip (kilde/kontekst-klassen, som OLJEMEDVIND·EIA) — aldri retning. */
.chip-info{background:var(--blue-soft);color:var(--blue-tekst);}

/* POSITIONS TABLE */
.pos-table { font-size:13px; }
.pos-table thead th { text-align:left; font-size:11px; color:var(--text-3); text-transform:uppercase; letter-spacing:.5px; font-weight:600; padding:8px 10px; }
.pos-table thead th.r { text-align:right; }
.pos-table tbody td { padding:9px 10px; border-top:1px solid var(--border); }
.pos-table tbody td.r { text-align:right; font-family:'JetBrains Mono',monospace; }
.tag { padding:2px 7px; border-radius:5px; font-size:11px; }
.tag-cfd{background:var(--blue-soft);color:var(--blue);} .tag-cash{background:var(--green-soft);color:var(--green);}

.exp-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; }
@media (max-width:700px){ .exp-grid{ grid-template-columns:repeat(2,1fr);} }

.sect-bar { display:flex; height:10px; border-radius:5px; overflow:hidden; }
.legend { display:flex; gap:16px; margin-top:8px; font-size:12px; color:var(--text-2); flex-wrap:wrap; }
.sw { display:inline-block; width:10px; height:10px; border-radius:2px; vertical-align:middle; margin-right:5px; }

/* ALERTS / NEWS / RIGHT */
.alerts-list { display:flex; flex-direction:column; gap:8px; }
.alert-item { display:flex; gap:10px; padding:10px; background:var(--bg-1); border:1px solid var(--border); border-radius:6px; border-left:3px solid var(--orange); }
.alert-item.alert-pos{border-left-color:var(--green);} .alert-item.alert-neg{border-left-color:var(--red);} .alert-item.alert-info{border-left-color:var(--blue);}
.alert-icon { width:28px; height:28px; background:var(--bg-3); border-radius:6px; display:flex; align-items:center; justify-content:center; font-size:14px; flex-shrink:0; }
.alert-content { flex:1; min-width:0; }
.alert-row { display:flex; justify-content:space-between; align-items:baseline; gap:8px; }
.alert-ticker { font-weight:600; font-size:13px; color:var(--text-0); }
.alert-time { font-size:11px; color:var(--text-3); white-space:nowrap; }
.alert-msg { font-size:12px; color:var(--text-2); margin-top:2px; }
.news-list { display:flex; flex-direction:column; gap:10px; }
.news-item { padding:10px 0; border-bottom:1px solid var(--border); }
.news-item:last-child { border-bottom:none; }
.news-source { font-size:10px; text-transform:uppercase; letter-spacing:.8px; color:var(--text-3); font-weight:600; display:flex; gap:6px; align-items:center; margin-bottom:4px; }
.news-source .source-tag { background:var(--bg-3); padding:1px 6px; border-radius:3px; color:var(--text-2); }
.news-title { font-size:13px; color:var(--text-1); font-weight:500; line-height:1.4; }
.news-claude { font-size:12px; color:var(--text-2); margin-top:5px; border-left:2px solid var(--purple); padding-left:9px; line-height:1.5; }
.news-sentiment { display:inline-block; font-size:10px; padding:1px 6px; border-radius:3px; font-weight:600; text-transform:uppercase; letter-spacing:.5px; margin-top:5px; }
.news-sentiment.pos{background:var(--green-soft);color:var(--green);} .news-sentiment.neg{background:var(--red-soft);color:var(--red);} .news-sentiment.neu{background:var(--bg-3);color:var(--text-2);}
.corr-grid { display:grid; grid-template-columns:64px repeat(6,1fr); gap:2px; font-family:'JetBrains Mono',monospace; font-size:11px; }
.corr-cell { padding:8px 4px; text-align:center; border-radius:3px; color:var(--text-1); background:var(--bg-3); }
.corr-header { font-size:10px; color:var(--text-3); font-weight:600; }
.corr-row-label { font-size:11px; color:var(--text-2); padding:8px 6px; text-align:right; font-weight:600; }
.footer { padding:18px 24px; text-align:center; font-size:11px; color:var(--text-3); border-top:1px solid var(--border); margin-top:16px; }
.cluster-note { display:flex; gap:8px; align-items:flex-start; background:var(--orange-soft); border:1px solid rgba(200,130,50,.3); border-radius:6px; padding:9px 12px; margin-top:10px; font-size:12px; color:var(--orange); }

/* ===== Flask-tillegg: lenke-faner + Oversikt-side ===== */
a.tab { text-decoration:none; }
.ov-wrap { max-width:2000px; margin:0 auto; padding:16px 20px; display:flex; flex-direction:column; gap:16px; }
.ov-stats { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px; }
.ov-table { width:100%; border-collapse:collapse; font-size:13px; }
.ov-table thead th { text-align:left; font-size:11px; color:var(--text-3); text-transform:uppercase;
  letter-spacing:.5px; font-weight:600; padding:9px 10px; border-bottom:1px solid var(--border-2);
  cursor:pointer; user-select:none; white-space:nowrap; }
.ov-table thead th.r { text-align:right; }
.ov-table thead th:hover { color:var(--text-1); }
.ov-table th.sorted-asc::after { content:' \2191'; color:var(--green); }
.ov-table th.sorted-desc::after { content:' \2193'; color:var(--green); }
.ov-table tbody td { padding:10px; border-bottom:1px solid var(--border); }
.ov-table tbody tr { cursor:pointer; transition:background .1s; }
.ov-table tbody tr:hover { background:var(--bg-3); }
.ov-table tbody tr:last-child td { border-bottom:none; }
.ov-table td.r { text-align:right; font-variant-numeric:tabular-nums; }
.ov-table .tk { font-weight:600; color:var(--text-0); }
.ov-table .nm { color:var(--text-3); font-size:12px; }
.ov-ccy { color:var(--text-3); font-size:11px; }
.ov-empty { padding:40px 20px; text-align:center; color:var(--text-3); font-size:13px; line-height:1.8; }

/* ── Watchlist fase 1: filterbar + favorittstjerne + sparkline ── */
.ov-filters { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:4px 2px 14px; }
.ov-filters .filt-group { display:flex; gap:6px; flex-wrap:wrap; }
.ov-filters .filt-sep { width:1px; height:20px; background:var(--border-2); margin:0 4px; }
.filt { background:var(--bg-2); border:1px solid var(--border-2); color:var(--text-2);
  padding:5px 11px; border-radius:6px; font-size:12px; font-weight:600; cursor:pointer;
  font-family:inherit; white-space:nowrap; transition:background .12s,color .12s,border-color .12s; }
.filt:hover { background:var(--bg-3); color:var(--text-1); }
.filt.active { background:var(--blue-soft); color:var(--blue-tekst); border-color:var(--blue); }
.filt-star.active { background:var(--orange-soft); color:var(--orange); border-color:var(--orange); }
.filt-count { margin-left:auto; font-size:11px; color:var(--text-3); font-family:'JetBrains Mono',monospace;
  white-space:nowrap; align-self:center; }
.ov-noresult { padding:28px 20px; text-align:center; color:var(--text-3); font-size:13px; }

.ov-table th.c-star, .ov-table td.c-star { width:34px; text-align:center; padding-left:6px; padding-right:6px; cursor:default; }
.ov-table th.c-star:hover { color:var(--text-3); }
.ov-table th.sortable { cursor:pointer; }
.ov-table th:not(.sortable):hover { color:var(--text-3); }
.star { background:none; border:none; cursor:pointer; font-size:15px; line-height:1; padding:2px 4px;
  color:var(--text-3); transition:color .12s,transform .08s; }
.star:hover { color:var(--orange); transform:scale(1.15); }
.star.on { color:var(--orange); }
.star:disabled { opacity:.5; cursor:default; }

.ov-table th.c-spark, .ov-table td.c-spark { width:90px; text-align:center; cursor:default; padding:6px 8px; }
.ov-table th.c-spark:hover { color:var(--text-3); }
svg.spark { width:84px; height:24px; display:inline-block; vertical-align:middle; }

/* ===== Sammenligning ===== */
.cmp-wrap { max-width:2000px; margin:0 auto; padding:16px 20px; display:flex; flex-direction:column; gap:16px; }
.cmp-hint { color:var(--text-3); font-size:12px; margin:6px 0 0; }
.cmp-actions { display:flex; gap:8px; flex-wrap:wrap; }
.btn-link { padding:6px 12px; background:transparent; color:var(--text-3); border:1px solid var(--border-2);
  border-radius:var(--r-k); cursor:pointer; font-size:12px; font-family:inherit; }
.btn-link:hover { color:var(--text-1); background:var(--bg-3); }
.cmp-chart-head { display:flex; align-items:center; justify-content:space-between; gap:16px;
  flex-wrap:wrap; margin-bottom:12px; }
.cmp-chart { width:100%; min-height:200px; }
.cmp-empty { padding:50px 20px; text-align:center; color:var(--text-3); font-size:13px; line-height:1.8; }
.cmp-legend { display:flex; gap:16px; flex-wrap:wrap; }
.cmp-legend-item { display:inline-flex; align-items:center; gap:6px; font-size:12px; }
.cmp-legend-sw { display:inline-block; width:14px; height:3px; border-radius:1px; }
.cmp-legend-lbl { color:var(--text-1); font-weight:600; }
.cmp-legend-pct { font-variant-numeric:tabular-nums; }
.cmp-legend-pct.pos { color:var(--green); }
.cmp-legend-pct.neg { color:var(--red); }

/* ===== Søkbar multi-select (gjenbrukbar: .ms-root) ===== */
.ms-root { position:relative; margin:14px 0; }
.ms-control { display:flex; flex-wrap:wrap; align-items:center; gap:6px; min-height:42px;
  padding:6px 8px; background:var(--bg-1); border:1px solid var(--border-2); border-radius:8px;
  cursor:text; }
.ms-control:focus-within { border-color:var(--blue); }
.ms-chips { display:flex; flex-wrap:wrap; gap:6px; }
.ms-chip { display:inline-flex; align-items:center; gap:6px; padding:4px 6px 4px 8px;
  background:var(--bg-3); border:1px solid var(--border-2); border-radius:6px; font-size:12px;
  font-family:'JetBrains Mono',monospace; }
.ms-chip-sw { width:10px; height:3px; border-radius:1px; }
.ms-chip-lbl { color:var(--text-1); }
.ms-chip-x { background:none; border:none; color:var(--text-3); cursor:pointer; font-size:15px;
  line-height:1; padding:0 2px; }
.ms-chip-x:hover { color:var(--red); }
.ms-input { flex:1; min-width:140px; border:none; background:transparent; color:var(--text-1);
  font-size:13px; font-family:inherit; outline:none; padding:4px; }
.ms-input::placeholder { color:var(--text-3); }
.ms-dropdown { position:absolute; left:0; right:0; top:calc(100% + 4px); z-index:40;
  max-height:340px; overflow-y:auto; background:var(--bg-2); border:1px solid var(--border-2);
  border-radius:var(--r-o); box-shadow:0 12px 32px color-mix(in srgb, var(--bg-0) 45%, transparent); }
.ms-group { padding:8px 12px 4px; font-size:10px; text-transform:uppercase; letter-spacing:.6px;
  color:var(--text-3); font-weight:600; position:sticky; top:0; background:var(--bg-2); }
.ms-option { display:flex; align-items:center; gap:10px; padding:8px 12px; cursor:pointer;
  font-size:13px; font-family:'JetBrains Mono',monospace; }
.ms-option:hover, .ms-option.active { background:var(--bg-3); }
.ms-option.selected { color:var(--text-0); }
.ms-sw { width:12px; height:3px; border-radius:1px; flex:none; }
.ms-opt-lbl { flex:1; }
.ms-opt-badge { font-size:10px; color:var(--text-3); border:1px solid var(--border-2);
  border-radius:4px; padding:1px 5px; }
.ms-opt-check { color:var(--green); width:14px; text-align:center; }
.ms-noresult { padding:14px 12px; color:var(--text-3); font-size:13px; text-align:center; }

/* ===== Detaljer: switcher, graf, plassholdere ===== */
.det-switch { background:var(--bg-1); color:var(--text-1); border:1px solid var(--border-2);
  border-radius:var(--r-k); padding:4px 8px; font-size:12px; font-family:'JetBrains Mono',monospace;
  cursor:pointer; margin-left:8px; }
.det-switch:hover { border-color:var(--blue); }
.det-chart { width:100%; min-height:200px; }
/* v55: kontrollgruppe i graf-headeren (iv-velger + perioder + ⛶/↗).
   Flex med gap — ingen item-marginer (flexbox-fella). */
.chart-ctl-group { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.chart-icon-btn { display:inline-flex; align-items:center; justify-content:center;
  min-width:26px; padding:3px 8px; border:1px solid var(--border-2); border-radius:5px;
  background:transparent; color:var(--text-2); font-size:13px; line-height:1;
  cursor:pointer; text-decoration:none; font-family:'JetBrains Mono',monospace; }
.chart-icon-btn:hover { color:var(--text-1); border-color:var(--text-3); }
/* v55: stor skjerm — graf-kortet legges over dashbordet. box-shadow-spread
   dimmer alt bak uten ekstra backdrop-element. */
#detChartCard.chart-max { position:fixed; inset:12px; z-index:1200; margin:0;
  overflow:auto; background:var(--bg-1); border:1px solid var(--border-2);
  border-radius:10px; box-shadow:0 0 0 100vmax color-mix(in srgb, var(--bg-0) 66%, transparent); }
body.chart-max-open { overflow:hidden; }
/* v55: dedikert /graf/-side (egen fane / egen skjerm) */
body.graf-page { margin:0; background:var(--bg-0); }
.graf-wrap { padding:12px; }
.graf-wrap .card { margin:0; }
.graf-sym { color:var(--green); }
body.graf-page #chartMaxBtn { display:none; }
/* v54: crosshair-readout over hovedgrafen (OHLC · ±% · vol · MA). Egen flex-rad
   med gap (ALDRI margin på items — flexbox-fella). min-height hindrer layout-hopp. */
.chart-readout { display:flex; flex-wrap:wrap; gap:4px 14px; margin:2px 0 6px;
  font-size:11px; line-height:16px; min-height:16px; color:var(--text-3); letter-spacing:.2px; }
.chart-readout b { font-weight:600; color:var(--text-1); }
.chart-readout .ro-d { color:var(--text-2); }
.chart-readout .ro-live { color:var(--orange); }
.chart-readout .pos { color:var(--green); }
.chart-readout .neg { color:var(--red); }
/* v171: V3-oscillator-layout. Sub-head-radene er erstattet av in-pane overlays:
   .osc-corner (label + readout + RSI-periode, øverst venstre) og .osc-note (øverst
   høyre). Ett pane vises om gangen; velgeren (.osc-select) injiseres i hovedchartet. */
.osc-zone { margin-top:10px; }
.osc-pane { position:relative; }
.osc-pane + .osc-pane { margin-top:10px; }
.osc-corner { position:absolute; top:6px; left:10px; z-index:4; display:flex; align-items:center; gap:8px;
  font-size:11px; color:var(--purple); font-weight:600;
  background:color-mix(in srgb, var(--bg-0) 55%, transparent); padding:2px 8px; border-radius:5px; pointer-events:auto; }
.osc-corner .osc-lbl { letter-spacing:.4px; }
.osc-note { position:absolute; top:8px; right:64px; z-index:4; font-size:10px; color:var(--text-3);
  background:color-mix(in srgb, var(--bg-0) 50%, transparent); padding:2px 7px; border-radius:5px; pointer-events:none;
  max-width:52%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* live indikator-verdi (RSI / MACD under crosshair) — uendret semantikk fra v54 */
.osc-corner .sub-val { color:var(--text-1); font-weight:600; }
/* v233: oscillator-velger — segmentert kontroll høyrestilt i readout-linja.
   Erstatter V3-varianten som lå absolutt-posisjonert nederst til venstre oppå
   kursflaten (kolliderte med fib-100%-etiketten + volumsøylene). #detReadout er
   allerede en flex-rad: .ro-vals bærer OHLC til venstre, .osc-select skyves til
   høyre kant med margin-left:auto. Ingen vertikal margin (flexbox-fella). */
.chart-readout .ro-vals { display:flex; flex-wrap:wrap; align-items:center; gap:4px 14px; }
.osc-select { display:inline-flex; align-items:center; gap:7px; margin-left:auto; }
.osc-select-lbl { font-size:10px; font-weight:700; letter-spacing:.5px; text-transform:uppercase; color:var(--text-3); }
.osc-seg { display:inline-flex; background:var(--bg-1); border:1px solid var(--border-2); border-radius:8px; padding:2px; gap:2px; }
.osc-select-btn { font-size:11px; color:var(--text-2); background:transparent;
  border:none; border-radius:6px; padding:3px 11px; cursor:pointer; font:inherit; line-height:1.4; }
.osc-select-btn:hover { color:var(--text-1); }
.osc-select-btn.on { color:var(--text-0); background:var(--purple); box-shadow:0 1px 4px color-mix(in srgb, var(--purple) 40%, transparent); }
.osc-select-btn[disabled] { opacity:.35; cursor:default; }
.det-rsi { width:100%; min-height:105px; }

/* Ærlige plassholdere */
.ph-body { padding:20px 18px; color:var(--text-3); font-size:13px; line-height:1.7;
  background:repeating-linear-gradient(45deg, transparent, transparent 9px, rgba(125,134,148,.04) 9px, rgba(125,134,148,.04) 18px);
  border:1px dashed var(--border-2); border-radius:var(--r); }
.ph-tag { font-size:10px; letter-spacing:.6px; color:var(--text-3); border:1px solid var(--border-2);
  border-radius:4px; padding:2px 7px; text-transform:uppercase; font-weight:600; }
.ph-inline { opacity:.55; }
.ph-claude { opacity:.92; }
.ph-claude .ph-body { background:repeating-linear-gradient(45deg, transparent, transparent 9px, color-mix(in srgb, var(--purple) 6%, transparent) 9px, color-mix(in srgb, var(--purple) 6%, transparent) 18px);
  border-color:color-mix(in srgb, var(--purple) 30%, transparent); }

/* ===== Detaljer: conviction-lag + sizing-noter ===== */
.conv-grid { display:flex; flex-direction:column; gap:14px; }
.conv-row { display:flex; flex-direction:column; gap:5px; }
.conv-head { display:flex; justify-content:space-between; align-items:baseline; gap:12px; flex-wrap:wrap; }
.conv-name { font-size:13px; color:var(--text-1); display:inline-flex; align-items:center; gap:7px; }
.conv-dot { width:9px; height:9px; border-radius:2px; display:inline-block; }
.conv-prov { font-size:9px; text-transform:uppercase; letter-spacing:.5px; color:var(--text-3);
  border:1px solid var(--border-2); border-radius:3px; padding:1px 5px; }
.conv-prov.auto { color:var(--green); border-color:color-mix(in srgb, var(--green) 40%, transparent); }
.conv-num { font-size:11px; color:var(--text-2); }
.conv-num .conv-w { color:var(--text-3); }
.conv-track { height:6px; background:var(--bg-3); border-radius:3px; overflow:hidden; }
.conv-fill { height:100%; border-radius:3px; transition:width .3s; }
.conv-sub { font-size:10px; color:var(--text-3); line-height:1.5; margin-top:1px; }
.joblog { background:var(--bg-1); border:1px solid var(--border); border-radius:8px; max-height:260px; overflow:auto; }
.jl-row { display:flex; gap:10px; align-items:baseline; padding:5px 11px; border-bottom:1px solid var(--border); font-size:11.5px; }
.jl-row:last-child { border-bottom:none; }
.jl-dot { width:7px; height:7px; border-radius:50%; flex:0 0 auto; background:var(--text-3); }
.jl-dot.ok { background:var(--green); } .jl-dot.feil { background:var(--red); } .jl-dot.timeout { background:var(--orange); }
.jl-dot.advarsel { background:var(--orange); }
.jl-ts { color:var(--text-3); white-space:nowrap; }
.jl-job { color:var(--blue-tekst); white-space:nowrap; min-width:118px; }
.jl-tail { color:var(--text-2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.short-metrics { display:flex; gap:18px; margin-bottom:10px; }
.short-metrics .sm { display:flex; flex-direction:column; gap:2px; }
.sm-k { font-size:10px; text-transform:uppercase; letter-spacing:.5px; color:var(--text-3); font-weight:600; }
.sm-v { font-size:16px; font-weight:600; color:var(--text-0); }
.short-chart { margin:4px 0 10px; }
.short-chart .short-spark { width:100%; height:84px; display:block; }
.short-holders { width:100%; border-collapse:collapse; font-size:11px; }
.short-holders td { padding:3px 0; border-bottom:1px solid var(--border); color:var(--text-2); }
.short-holders td.r { text-align:right; color:var(--text-1); }
.short-holders tr:last-child td { border-bottom:none; }
.pill-auto { font-size:9px; text-transform:uppercase; letter-spacing:.5px; color:var(--purple); border:1px solid color-mix(in srgb, var(--purple) 40%, transparent); background:color-mix(in srgb, var(--purple) 10%, transparent); border-radius:4px; padding:0 5px; }
.wl-admin td .mut, td.mut { color:var(--text-3); }
.conv-score { font-size:14px; font-family:'JetBrains Mono',monospace; }
.conv-score.pos { color:var(--green); } .conv-score.warn { color:var(--orange); } .conv-score.neg { color:var(--red); }
.ev.pos { color:var(--green); } .ev.warn { color:var(--orange); } .ev.neg { color:var(--red); }
.ph-note { margin-top:12px; padding:9px 12px; font-size:11px; line-height:1.6; color:var(--text-3);
  border-left:2px solid var(--border-2); background:var(--bg-1); border-radius:0 6px 6px 0; }

/* ===== Innstillinger ===== */
.gear-btn { display:inline-flex; align-items:center; justify-content:center; width:34px; height:34px;
  border-radius:8px; border:1px solid var(--border-2); background:var(--bg-2); color:var(--text-2);
  text-decoration:none; font-size:16px; }
.gear-btn:hover, .gear-btn.active { color:var(--text-0); border-color:var(--blue); background:var(--bg-3); }
.set-wrap { max-width:1100px; margin:0 auto; padding:16px 24px; display:flex; flex-direction:column; gap:16px; }
.set-banner { padding:12px 16px; border-radius:8px; font-size:13px; }
.set-banner.ok { background:color-mix(in srgb, var(--green) 12%, transparent); border:1px solid color-mix(in srgb, var(--green) 40%, transparent); color:var(--green); }
.set-banner.err { background:color-mix(in srgb, var(--red) 10%, transparent); border:1px solid color-mix(in srgb, var(--red) 40%, transparent); color:var(--red); }
.set-banner.err ul { margin:6px 0 0; padding-left:18px; }
.set-grid { display:flex; flex-wrap:wrap; gap:18px; align-items:flex-end; }
.set-field { display:flex; flex-direction:column; gap:5px; font-size:12px; color:var(--text-2); }
.set-field input { width:160px; padding:8px 10px; background:var(--bg-1); border:1px solid var(--border-2);
  border-radius:var(--r-k); color:var(--text-0); font-family:'JetBrains Mono',monospace; font-size:14px; }
.set-field input:focus { outline:none; border-color:var(--blue); }
.set-derived { font-size:13px; color:var(--text-2); display:flex; flex-direction:column; gap:4px; padding-bottom:4px; }
.set-derived strong { color:var(--text-0); font-family:'JetBrains Mono',monospace; }
.set-note { font-size:11px; color:var(--text-3); }
.set-cols { display:grid; grid-template-columns:1fr 1fr; gap:24px; }
.set-col-h { font-size:12px; text-transform:uppercase; letter-spacing:.5px; color:var(--text-3);
  font-weight:600; margin-bottom:10px; }
.set-col .set-field { margin-bottom:10px; }
.set-weights { width:100%; border-collapse:collapse; font-size:13px; }
.set-weights th { text-align:left; font-size:11px; text-transform:uppercase; letter-spacing:.5px;
  color:var(--text-3); padding:8px 10px; border-bottom:1px solid var(--border-2); }
.set-weights td { padding:8px 10px; border-bottom:1px solid var(--border); }
.set-mode { text-transform:capitalize; color:var(--text-1); }
.set-w { width:64px; padding:6px 8px; background:var(--bg-1); border:1px solid var(--border-2);
  border-radius:5px; color:var(--text-0); font-family:'JetBrains Mono',monospace; text-align:right; }
.set-w:focus { outline:none; border-color:var(--blue); }
.set-sum.good { color:var(--green); } .set-sum.bad { color:var(--red); font-weight:700; }
.set-actions { display:flex; align-items:center; gap:16px; }
.set-save { padding:11px 22px; background:var(--blue); color:var(--text-0); border:none; border-radius:var(--r-k);
  font-size:14px; font-weight:600; cursor:pointer; font-family:inherit; }
.set-save:hover { filter:brightness(1.1); }
@media(max-width:760px){ .set-cols{grid-template-columns:1fr} }

/* ── TEKNISKE FORMASJONER ─────────────────────────────────────────────── */
#patternList { display:grid; grid-template-columns:1fr 1fr; gap:12px; padding-top:2px; }
@media (max-width:980px) { #patternList { grid-template-columns:1fr; } }
.pat-card { position:relative; background:var(--bg-1); border:1px solid var(--border);
            border-left:3px solid var(--border-2); border-radius:8px; padding:12px 14px;
            cursor:pointer; transition:opacity .12s, border-color .12s, background .12s; }
.pat-card:hover { background:var(--bg-2); }
.pat-card.on.bullish { border-left-color:var(--green); }
.pat-card.on.bearish { border-left-color:var(--red); }
.pat-card.on.neutral { border-left-color:var(--orange); }
.pat-card.off { opacity:.5; border-left-color:var(--border-2); }
.pat-card.off:hover { opacity:.78; }
.pat-eye { display:inline-flex; align-items:center; color:var(--text-3); flex-shrink:0; }
.pat-card.on.bullish .pat-eye { color:var(--green); }
.pat-card.on.bearish .pat-eye { color:var(--red); }
.pat-card.on.neutral .pat-eye { color:var(--orange); }
.pat-allbtn { background:var(--bg-3); border:1px solid var(--border-2); color:var(--text-2);
              font-size:11px; padding:4px 11px; border-radius:5px; cursor:pointer;
              font-family:inherit; margin-left:10px; }
.pat-allbtn:hover { background:var(--bg-2); color:var(--text-1); }
.pat-h { display:flex; align-items:center; gap:8px; margin-bottom:9px; }
.pat-h .pat-name { font-size:13px; font-weight:600; color:var(--text-0); flex:1;
                   white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pat-conf { font-family:'JetBrains Mono',monospace; font-size:19px; font-weight:700; line-height:1; }
.pat-conf.bullish { color:var(--green); } .pat-conf.bearish { color:var(--red); } .pat-conf.neutral { color:var(--orange); }
.pat-conf small { font-size:11px; color:var(--text-3); font-weight:500; }
.pat-bar { height:4px; background:var(--bg-3); border-radius:2px; overflow:hidden; margin-bottom:11px; }
.pat-bar > i { display:block; height:100%; border-radius:2px; }
.pat-trade { display:flex; align-items:center; gap:9px; font-family:'JetBrains Mono',monospace;
             font-size:13px; margin-bottom:7px; flex-wrap:wrap; }
.pat-trade .lvl { color:var(--text-1); font-weight:600; }
.pat-trade .arr { color:var(--text-3); }
.pat-trade .tgt-up { color:var(--green); font-weight:600; }
.pat-trade .tgt-dn { color:var(--red); font-weight:600; }
.pat-trade .pat-st { margin-left:auto; }
.pat-st-ok { color:var(--green); font-size:11px; font-weight:600; }
.pat-st-wait { color:var(--text-3); font-size:11px; font-weight:600; }
.pat-rat { font-size:10px; color:var(--text-3); margin-bottom:9px; font-family:'JetBrains Mono',monospace; }
.pat-subs { display:flex; gap:4px 12px; flex-wrap:wrap; font-family:'JetBrains Mono',monospace;
            font-size:10.5px; color:var(--text-3); border-top:1px solid var(--border); padding-top:8px; }
.pat-subs span b { color:var(--text-2); font-weight:600; }
.pat-tent { font-size:9px; text-transform:uppercase; letter-spacing:.5px; color:var(--orange);
            border:1px solid var(--orange-soft); padding:1px 6px; border-radius:4px; }

/* ── Intradag-ferskhet (steg: price_intraday inn i Flask) ── */
/* Dempet, ærlig markør. Aldri presentert som sanntid: ~15–20 min forsinket. */
.px-delay { margin-top:6px; font-size:11px; color:var(--text-3); letter-spacing:.2px; }
.px-delay::first-letter { color:var(--orange); }
.itd-dot { color:var(--orange); font-size:8px; vertical-align:middle; margin-right:5px; opacity:.85; cursor:help; }
.macro-value .itd-dot { font-size:7px; margin-right:4px; }

/* ── Høyrekolonne: posisjoner / sektor / varsler / datakilder ── */
.rail-list { padding:6px 0; }
.rail-row { display:flex; align-items:center; gap:9px; padding:9px 16px; border-top:1px solid var(--border); font-size:13px; }
.rail-row:first-child { border-top:none; }
.rail-empty { padding:16px; color:var(--text-3); font-size:12.5px; line-height:1.6; }

/* Posisjoner */
.pos-row { justify-content:space-between; align-items:flex-start; }
.pos-l { display:flex; align-items:center; gap:7px; flex-wrap:wrap; }
.pos-sym { font-weight:600; color:var(--text-0); }
.pos-mode { font-size:10px; text-transform:uppercase; letter-spacing:.5px; color:var(--text-3); }
.pos-r { text-align:right; display:flex; flex-direction:column; gap:2px; }
.pos-r .pos-sub { font-size:11px; color:var(--text-3); font-weight:400; }

/* Sektoreksponering */
.expo-row { padding:8px 16px; border-top:1px solid var(--border); }
.expo-row:first-child { border-top:none; }
.expo-top { display:flex; justify-content:space-between; font-size:13px; color:var(--text-1); margin-bottom:5px; }
.expo-bar { height:5px; background:var(--bg-3); border-radius:3px; overflow:hidden; }
.expo-bar > i { display:block; height:100%; background:var(--blue); border-radius:3px; }

/* Varsler */
.alert-dot { width:7px; height:7px; border-radius:50%; flex-shrink:0; }
.alert-dot.warn { background:var(--orange); } .alert-dot.info { background:var(--blue); }
.alert-sym { font-weight:600; color:var(--text-0); min-width:54px; }
.alert-txt { color:var(--text-2); }

/* Datakilder */
.src-dot { width:7px; height:7px; border-radius:50%; flex-shrink:0; }
.src-dot.ok { background:var(--green); } .src-dot.err { background:var(--red); } .src-dot.run { background:var(--orange); }
.src-job { color:var(--text-1); font-weight:600; }
.src-meta { color:var(--text-3); font-size:11.5px; flex:1; }
.src-when { color:var(--text-3); font-size:11px; }

/* Nyheter */
.news-row { padding:10px 16px; border-top:1px solid var(--border); }
.news-row:first-child { border-top:none; }
.news-row.material { border-left:2px solid var(--orange); }
.news-row.news-flash { animation:newsFlash 2s ease-out 1; }
@keyframes newsFlash {
  0% { background:var(--orange-soft); } 100% { background:transparent; }
}
.news-top { display:flex; align-items:flex-start; justify-content:space-between; gap:10px; }
.news-title { color:var(--text-1); font-size:13px; line-height:1.4; text-decoration:none; }
a.news-title:hover { color:var(--blue-tekst); text-decoration:underline; }
.news-meta { color:var(--text-3); font-size:11px; margin-top:4px; }
.news-fakta { color:var(--text-2); font-size:12px; line-height:1.5; margin-top:5px; border-left:2px solid var(--purple); padding-left:9px; }
.mat-pill { display:inline-block; padding:1px 7px; border-radius:5px; font-size:11px; font-weight:600; letter-spacing:.2px; }
/* MATERIALITETS-SKALAEN — EEN skala, ETT sted (30.07.2026, KaiRKs valg E3).
   🔴 FOER dette hadde Detalj og Nyheter HVER SIN skala for samme felt
   (n.materiality): Detalj hadde high=oransje / medium=blaa, Nyheter hadde
   high=roed / medium=oransje. Samme ord ga altsaa tre forskjellige signaler
   avhengig av hvilken side du sto paa — og oransje betydde «high» paa Detalj,
   men «medium» paa Nyheter. Ingen maskinell sjekk kunne se det: begge brukte
   lovlige tokens. Samme feilklasse som edge-ringen (A1).
   NAA: Nyheter-skalaen vant, og den bor HER. `nyheter.html` har ikke lenger
   egne .nf-mat-*-fargeregler — templaten setter `class="nf-mat mat-{{ ... }}"`
   og henter fargen herfra. Endres skalaen, endres begge flatene samtidig.
   `.nf-mat` / `.mat-pill` styrer fortsatt FORM (stoerrelse, padding); disse
   tre reglene styrer KUN farge. */
.mat-high { background:color-mix(in srgb, var(--red) 13%, transparent); color:var(--red); }
.mat-medium { background:color-mix(in srgb, var(--orange) 13%, transparent); color:var(--orange); }
.mat-low { background:var(--bg-3); color:var(--text-3); }

/* Claude-panel: ekte syntese-innhold (Sonnet) */
.claude-body { padding-top:2px; }
.claude-assessment { margin:0 0 14px; color:var(--text-1); font-size:13.5px; line-height:1.65; }
.claude-foot { display:flex; align-items:center; gap:16px; flex-wrap:wrap; font-size:11px;
  color:var(--text-3); text-transform:uppercase; letter-spacing:.4px; }
.claude-foot .synth-kv { display:flex; align-items:center; gap:6px; }
.claude-foot .synth-based { margin-left:auto; text-transform:none; letter-spacing:0;
  font-size:11px; color:var(--text-3); }

/* Tidligere analyser — kollapset historikk under nyeste syntese (native details) */
.claude-history { margin-top:14px; border-top:1px solid var(--border); padding-top:12px; }
.claude-history-summary { cursor:pointer; user-select:none; list-style:none;
  display:flex; align-items:center; gap:8px; font-size:11px; font-weight:600;
  text-transform:uppercase; letter-spacing:.8px; color:var(--text-3); }
.claude-history-summary:hover { color:var(--text-1); }
.claude-history-summary::-webkit-details-marker { display:none; }
.claude-history-summary .ch-chevron { font-size:10px; color:var(--text-3);
  transition:transform .15s ease; display:inline-block; }
.claude-history[open] .claude-history-summary .ch-chevron { transform:rotate(90deg); }
.claude-history-summary .ch-count { background:var(--bg-3); color:var(--text-2);
  border-radius:5px; padding:1px 7px; font-size:11px; letter-spacing:0; }
.claude-history-list { margin-top:10px; max-height:300px; }
.claude-history-item { padding:10px 0; border-bottom:1px solid var(--border); }
.claude-history-item:last-child { border-bottom:none; }
.chi-head { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:6px;
  font-size:11px; color:var(--text-3); }
.chi-date { color:var(--text-2); font-size:11px; }
.chi-horizon { text-transform:none; }
.chi-based { margin-left:auto; }
.chi-excerpt { margin:0; font-size:12.5px; line-height:1.55; color:var(--text-1); }

/* Nyhets-kort: laast hoyde (~5 rader) med scroll naar det blir mange meldinger */
.news-scroll { max-height:440px; overflow-y:auto; overflow-x:hidden; padding-right:6px;
  scrollbar-width:thin; scrollbar-color:var(--border-2) transparent; }
.news-scroll::-webkit-scrollbar { width:8px; }
.news-scroll::-webkit-scrollbar-track { background:transparent; }
.news-scroll::-webkit-scrollbar-thumb { background:var(--border-2); border-radius:4px; }
.news-scroll::-webkit-scrollbar-thumb:hover { background:var(--text-3); }

/* Minimerbare paneler.
   D8 pkt 16: caret ligger nå HELT TIL HØYRE i header-raden (collapse.js appender
   den som SISTE barn). `margin-left:auto` spiser all ledig plass FØR caret — det
   slår justify-content:space-between på .card-header, så tittel + evt. søkefelt
   pakkes til venstre og caret havner ytterst til høyre uansett antall barn. */
.collapsible-header { cursor:pointer; user-select:none; }
.collapse-chevron { display:inline-block; margin-left:auto; margin-right:0; font-size:10px;
  color:var(--text-3); transition:transform .15s ease; vertical-align:middle; flex:none;
  padding-left:8px; }
.is-collapsed .collapse-chevron { transform:rotate(-90deg); }
.collapsible-header:hover .collapse-chevron { color:var(--text-1); }
/* Headere som ikke var flex fra før (kpi-seksjoner, Kairk AI-panelet) må bli det
   for at caret-en skal ligge på linje med tittelen. */
.kpi-section-title.collapsible-header,
.claude-header.collapsible-header { display:flex; align-items:center; gap:10px;
  position:relative; padding-right:24px; }
/* 🔴 MÅLT I EKTE CHROME: på disse to headerne resolver `margin-left:auto` til 0 —
   auto-margin fikk ingen ledig plass å spise (bekreftet: selv `margin-left:auto
   !important` INLINE flyttet ikke caret-en, mens et probe-element med flex:1 vokste).
   Flex-fri, deterministisk plassering i stedet: caret-en ankres til høyre kant.
   `top` brukes (ikke translateY) så rotasjons-transformen for kollapset tilstand
   (▾ → ▸) forblir uforstyrret. */
.kpi-section-title.collapsible-header > .collapse-chevron,
.claude-header.collapsible-header > .collapse-chevron {
  position:absolute; right:0; top:calc(50% - 7px); margin:0; padding-left:0; }
.collapsed-hidden { display:none !important; }
.is-collapsed { padding-bottom:0; }
.kpi-section.is-collapsed, .card.is-collapsed, .claude-panel.is-collapsed { margin-bottom:10px; }

/* Claude-dekning admin-side */
.col-full { width:100%; max-width:980px; margin:0 auto; padding:0 0 40px; }
.admin-page { padding-top:12px; }
.admin-header { margin-bottom:20px; }
.admin-title { margin:0 0 6px; font-size:22px; font-weight:600; }
.admin-sub { margin:0; color:var(--text-2); font-size:14px; line-height:1.6; }
.admin-sub strong { color:var(--text-1); }
.admin-run-card { padding:12px 18px; }
.run-row { display:flex; align-items:center; gap:14px; font-size:13px; flex-wrap:wrap; }
.run-label { color:var(--text-3); text-transform:uppercase; font-size:11px; letter-spacing:.4px; }
.run-when { color:var(--text-2); }
.run-stat { color:var(--text-1); }
.admin-table { width:100%; border-collapse:collapse; font-size:14px; }
.admin-table th { text-align:left; padding:8px 12px; color:var(--text-3); font-size:11px;
  text-transform:uppercase; letter-spacing:.4px; font-weight:600;
  border-bottom:1px solid var(--border); }
.admin-table th.num { text-align:right; }
.admin-table td { padding:11px 12px; border-bottom:1px solid var(--border-2); vertical-align:middle; }
.admin-table tr:last-child td { border-bottom:none; }
.admin-table .sym-cell { font-size:15px; font-weight:600; color:var(--text-0); width:80px; }
.admin-table .dimmed { color:var(--text-3); }
.admin-table .num { text-align:right; font-variant-numeric:tabular-nums; }
.admin-table .pos { color:var(--green); }
.admin-table .neg { color:var(--red); }
.admin-table tr.row-followed td:first-child { border-left:2px solid var(--green); }

/* Varsel-tabeller: søk + scroll (sticky header) — holder rutene korte ved mange varsler */
.al-search { display:flex; align-items:center; gap:6px; background:var(--bg-3);
  border:1px solid var(--border-2); padding:5px 10px; border-radius:var(--r-k); min-width:180px; }
.al-search input { background:transparent; border:none; color:var(--text-1);
  font-family:inherit; font-size:13px; outline:none; flex:1; width:100%; }
.al-search input::placeholder { color:var(--text-3); }
.al-scroll { max-height:420px; overflow:auto; border-radius:8px; }
.al-scroll .admin-table thead th { position:sticky; top:0; background:var(--bg-2); z-index:2; }
.al-noresult { padding:16px 12px; color:var(--text-3); font-size:13px; }
.al-noresult.hidden { display:none; }
.admin-note { margin:0 0 12px; color:var(--text-3); font-size:13px;
  padding:0 12px; }
.ref-list { display:flex; flex-wrap:wrap; gap:8px; padding:0 12px 12px; }
.ref-chip { padding:4px 10px; background:var(--bg-3); border:1px solid var(--border);
  border-radius:20px; font-size:12px; color:var(--text-2); font-family:var(--mono); }
/* Follow-toggle knapp */
.follow-btn { padding:5px 14px; border-radius:20px; font-size:12px; font-weight:600;
  cursor:pointer; border:1px solid var(--border); background:var(--bg-3);
  color:var(--text-2); transition:all .15s; white-space:nowrap; }
.follow-btn:hover:not(:disabled) { opacity:.8; border-color:var(--green); color:var(--green); }
.follow-btn.following { background:var(--green-soft); color:var(--green);
  border-color:var(--green); }
.follow-btn:disabled { opacity:.5; cursor:default; }

/* ══ POSISJONER-SIDE ═══════════════════════════════════════════════════════ */
.pos-wrap { max-width:2000px; margin:0 auto; padding:16px 20px; display:flex; flex-direction:column; gap:16px; }
.pos-header { margin-bottom:4px; }
.pos-title { font-size:22px; font-weight:600; margin:0 0 6px; }
.pos-sub { color:var(--text-2); font-size:13px; margin:0; line-height:1.6; }

/* D6/§4 punkt 4: «Ny posisjon»-skjemaet kollapset som default — «+ Registrer
   handel»-header åpner. .pos-form-body skjules med mindre kortet har .is-open
   (server-rendret ved edit/feil/bekreft-behov, ellers via JS-klikk). */
.pos-form-card .pos-form-toggle { cursor:pointer; user-select:none; }
.pos-form-card .pos-form-plus { color:var(--edge); font-weight:700; margin-right:2px; }
.pos-form-card .pos-form-chev { color:var(--text-3); transition:transform .15s ease; flex:0 0 auto; }
.pos-form-card.is-open .pos-form-chev { transform:rotate(180deg); }
.pos-form-card .pos-form-body { display:none; }
.pos-form-card.is-open .pos-form-body { display:block; }

/* Skjema-grid */
.pos-form-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; }
@media (max-width:1100px) { .pos-form-grid { grid-template-columns:repeat(2,1fr); } }
@media (max-width:600px) { .pos-form-grid { grid-template-columns:1fr; } }
.pos-thesis-field { grid-column:span 2; }
@media (max-width:1100px) { .pos-thesis-field { grid-column:span 2; } }
.pos-select { padding:8px 10px; background:var(--bg-1); border:1px solid var(--border-2);
  border-radius:6px; color:var(--text-0); font-size:13px; font-family:inherit; width:100%; }
.pos-select:focus { outline:none; border-color:var(--blue); }
.pos-input { width:100%; padding:8px 10px; background:var(--bg-1); border:1px solid var(--border-2);
  border-radius:6px; color:var(--text-0); font-size:13px; font-family:inherit; }
.pos-input:focus { outline:none; border-color:var(--blue); }

/* Tabell */
.pos-table-wrap { overflow-x:auto; }
.pos-full-table { font-size:13px; }
.pos-full-table thead th { text-align:left; font-size:11px; color:var(--text-3); text-transform:uppercase;
  letter-spacing:.4px; font-weight:600; padding:8px 10px; border-bottom:1px solid var(--border); }
.pos-full-table thead th.r { text-align:right; }
.pos-full-table tbody td { padding:10px; border-bottom:1px solid var(--border-2); vertical-align:middle; }
/* Bulk-slett (multi-select arkiv) */
.bulk-chk-col { width:28px; text-align:center; padding-left:6px !important; padding-right:6px !important; }
.bulk-chk-col input { cursor:pointer; }
.card-title-row .bulk-del-form { margin:0; align-self:center; }
.bulk-del-btn:disabled { opacity:.4; cursor:not-allowed; }
.pos-full-table tbody tr:last-child td { border-bottom:none; }
.pos-full-table tbody tr:hover { background:var(--bg-3); }
.pos-full-table td.r { text-align:right; }
.pos-full-table td.mono { font-family:'JetBrains Mono',monospace; }
.pos-sym-link { color:var(--text-0); font-weight:600; text-decoration:none; font-size:14px; }
.pos-sym-link:hover { color:var(--blue-tekst); text-decoration:underline; }
.pos-sym { font-weight:600; color:var(--text-0); font-size:14px; }
.pos-mode { font-size:10px; text-transform:uppercase; letter-spacing:.5px; color:var(--text-3); }
.pos-setup-cell { color:var(--text-2); font-size:11px; max-width:140px; white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; }

/* Lukk/kanseller inline */
.pos-actions { display:flex; align-items:center; gap:6px; }
.pos-inline-form { display:flex; align-items:center; gap:5px; }
.pos-exit-input { width:80px; padding:5px 7px; background:var(--bg-1); border:1px solid var(--border-2);
  border-radius:5px; color:var(--text-0); font-size:12px; font-family:'JetBrains Mono',monospace; }
.pos-exit-input:focus { outline:none; border-color:var(--blue); }
.pos-act-btn { padding:4px 10px; border-radius:5px; font-size:11px; font-weight:600;
  cursor:pointer; border:none; font-family:inherit; white-space:nowrap; }
.pos-lukk { background:var(--blue-soft); color:var(--blue-tekst); }
.pos-lukk:hover { background:var(--blue); color:var(--text-0); }
.pos-kanseller { background:var(--red-soft); color:var(--red); }
.pos-kanseller:hover { background:var(--red); color:var(--text-0); }
.pos-endre { background:var(--orange-soft); color:var(--orange); text-decoration:none;
  display:inline-flex; align-items:center; line-height:1.4; }
.pos-endre:hover { background:var(--orange); color:var(--on-accent); }

/* + Ny posisjon-lenke fra Detaljer */
.pos-new-btn { display:inline-block; margin-top:8px; padding:5px 12px;
  background:var(--blue-soft); color:var(--blue-tekst); border-radius:var(--r-k);
  font-size:12px; font-weight:600; text-decoration:none; }
.pos-new-btn:hover { background:var(--blue); color:var(--text-0); }

/* ───────────── auth: bruker-chip + logg ut (topnav) ───────────── */
.user-chip { font-size:12px; color:var(--text-2); background:var(--bg-3);
  border:1px solid var(--border-2); padding:6px 10px; border-radius:6px; white-space:nowrap; }
.logout-btn { font-size:13px; color:var(--text-2); background:transparent;
  border:1px solid var(--border-2); padding:7px 12px; border-radius:6px; text-decoration:none;
  font-family:inherit; white-space:nowrap; transition:all .12s; }
.logout-btn:hover { color:var(--red); border-color:var(--red); background:var(--red-soft); }

/* ───────────── auth: login-side ───────────── */
.login-body { display:flex; align-items:center; justify-content:center; min-height:100vh;
  background:radial-gradient(900px 500px at 50% -10%, var(--bg-1) 0%, var(--bg-0) 60%); margin:0; }
.login-wrap { width:100%; max-width:380px; padding:24px; }
.login-card { background:var(--bg-2); border:1px solid var(--border); border-radius:var(--r);
  padding:30px 28px; display:flex; flex-direction:column; box-shadow:0 18px 50px color-mix(in srgb, var(--bg-0) 45%, transparent); }
.login-brand { display:flex; align-items:center; gap:11px; }
.login-title { font-size:18px; font-weight:700; color:var(--text-0); }
.login-title small { color:var(--text-3); font-weight:400; font-size:12px; margin-left:4px; }
.login-sub { color:var(--text-3); font-size:12px; margin:8px 0 20px; }
.login-label { font-size:11px; text-transform:uppercase; letter-spacing:.6px; color:var(--text-3);
  font-weight:600; margin-bottom:6px; }
.login-input { background:var(--bg-0); border:1px solid var(--border-2); color:var(--text-1);
  border-radius:var(--r-k); padding:11px 13px; font-size:14px; margin-bottom:16px; outline:none; transition:border .12s; }
.login-input:focus { border-color:var(--green); }
.login-btn { background:var(--green); color:var(--on-accent); border:none; border-radius:var(--r-k);
  padding:12px; font-size:14px; font-weight:700; cursor:pointer; font-family:inherit; margin-top:4px; transition:filter .12s; }
.login-btn:hover { filter:brightness(1.08); }
.login-error { background:var(--red-soft); border:1px solid color-mix(in srgb, var(--red) 40%, transparent); color:var(--red);
  font-size:13px; padding:10px 12px; border-radius:7px; margin-bottom:16px; }
.login-foot { text-align:center; color:var(--text-3); font-size:11px; margin-top:18px; }

/* ───────────── auth: brukeradmin ───────────── */
.bru-notice { background:var(--green-soft); border:1px solid color-mix(in srgb, var(--green) 40%, transparent); color:var(--green);
  font-size:13px; padding:10px 14px; border-radius:8px; margin-bottom:14px; }
.bru-error { background:var(--red-soft); border:1px solid color-mix(in srgb, var(--red) 40%, transparent); color:var(--red);
  font-size:13px; padding:10px 14px; border-radius:8px; margin-bottom:14px; }
.bru-card { margin-bottom:16px; }
.bru-new { display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
.bru-inp { background:var(--bg-0); border:1px solid var(--border-2); color:var(--text-1);
  border-radius:6px; padding:9px 11px; font-size:13px; font-family:inherit; outline:none; }
.bru-inp:focus { border-color:var(--green); }
.bru-inp-sm { padding:6px 8px; font-size:12px; }
.bru-btn { background:var(--bg-3); border:1px solid var(--border-2); color:var(--text-1);
  border-radius:6px; padding:8px 12px; font-size:12px; cursor:pointer; font-family:inherit; transition:all .12s; }
.bru-btn:hover { background:var(--border); }
.bru-btn-primary { background:var(--green); color:var(--on-accent); border-color:var(--green); font-weight:600; }
.bru-btn-warn:hover { color:var(--red); border-color:var(--red); background:var(--red-soft); }
.bru-btn-danger { color:var(--red); border-color:var(--red); background:var(--red-soft); }
.bru-btn-danger:hover { color:var(--text-0); background:var(--red); border-color:var(--red); }
.bru-table { width:100%; border-collapse:collapse; }
.bru-table th { text-align:left; font-size:11px; text-transform:uppercase; letter-spacing:.5px;
  color:var(--text-3); font-weight:600; padding:8px 10px; border-bottom:1px solid var(--border); }
.bru-table td { padding:10px; border-bottom:1px solid var(--border); font-size:13px; vertical-align:middle; }
.bru-inactive { opacity:.5; }
.bru-inline { display:inline-flex; gap:6px; align-items:center; margin:0; }
.bru-actions { display:flex; gap:10px; flex-wrap:wrap; }
.bru-tag { font-size:10px; padding:2px 7px; border-radius:5px; font-weight:600; margin-right:4px; }
.bru-tag-on { background:var(--green-soft); color:var(--green); }
.bru-tag-off { background:var(--red-soft); color:var(--red); }
.bru-tag-lock { background:var(--orange-soft); color:var(--orange); }
.bru-dim { color:var(--text-3); }
.bru-foot { color:var(--text-3); font-size:12px; margin-top:6px; }

/* ══ §2A POLISH ═══════════════════════════════════════════════════════════ */

/* Fade-in: kort, diskret animasjon på KPI-kort og cards ved sidelast.
   Brukes sparsomt — kun på det som faktisk er synlig i viewport. */
@keyframes fadeInUp {
  from { opacity:0; transform:translateY(6px); }
  to   { opacity:1; transform:translateY(0); }
}
.kpi { animation:fadeInUp .22s ease both; }
.kpi:nth-child(1){animation-delay:.03s} .kpi:nth-child(2){animation-delay:.06s}
.kpi:nth-child(3){animation-delay:.09s} .kpi:nth-child(4){animation-delay:.12s}
.kpi:nth-child(5){animation-delay:.15s} .kpi:nth-child(6){animation-delay:.18s}

/* Hover-lift: subtil løft + lysere border på cards. Disabled for tabeller
   og grafer der hover allerede er definert. */
.card:not(.no-collapse):not(.chart-card) {
  transition: transform .14s ease, border-color .14s ease, box-shadow .14s ease;
}
.card:not(.no-collapse):not(.chart-card):hover {
  transform: translateY(-2px);
  border-color: var(--border-2);
  box-shadow: 0 6px 20px color-mix(in srgb, var(--bg-0) 28%, transparent);
}

/* Edge Score progress-bar: animert bredde-sett fra JS via CSS custom property.
   Brukes i conv-fill (conviction-lag) — gjerne for edge-badge også.
   conv-fill har allerede transition:width .3s fra v17 — beholder den. */
.edge-badge .ev {
  position: relative;
}
/* Animert score-stripe under Edge Score-tallet (subbar) */
.edge-score-bar {
  height: 3px;
  background: var(--bg-3);
  border-radius: 2px;
  overflow: hidden;
  margin-top: 6px;
}
.edge-score-bar > span {
  display: block;
  height: 100%;
  border-radius: 2px;
  transition: width .4s cubic-bezier(.4,0,.2,1);
}

/* Pulse-markør: konsistent på alle live-dot-forekomster (orange for intradag,
   grønn/rød på change-pill håndteres allerede av .change-pill.pos/neg). */
@keyframes pulseOrange { 0%,100%{opacity:.9;box-shadow:0 0 0 0 color-mix(in srgb, var(--orange) 50%, transparent);}
  50%{opacity:.5;box-shadow:0 0 0 4px color-mix(in srgb, var(--orange) 0%, transparent);} }
.itd-dot { animation:pulseOrange 1.8s infinite; }

/* Topnav søke-field: visuell aktiv-state */
.search:focus-within {
  border-color: var(--blue);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--blue) 18%, transparent);
}
.search { transition: border-color .12s, box-shadow .12s; }

/* Søkbar single-select for Detaljer-ticker-velger (ss-root) */
.ss-root { position:relative; }
.ss-control { display:flex; align-items:center; gap:8px; padding:4px 10px;
  background:var(--bg-1); border:1px solid var(--border-2); border-radius:8px;
  cursor:pointer; min-width:180px; transition:border-color .12s; }
.ss-control:focus-within { border-color:var(--blue); }
.ss-lbl { flex:1; font-size:13px; font-family:'JetBrains Mono',monospace;
  color:var(--text-1); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ss-caret { color:var(--text-3); font-size:10px; transition:transform .15s; }
.ss-root.open .ss-caret { transform:rotate(180deg); }
.ss-input { width:100%; padding:8px 12px; background:transparent; border:none;
  color:var(--text-1); font-size:13px; font-family:inherit; outline:none; }
.ss-input::placeholder { color:var(--text-3); }
.ss-dropdown { position:absolute; left:0; right:0; top:calc(100% + 4px); z-index:50;
  max-height:320px; overflow-y:auto; background:var(--bg-2); border:1px solid var(--border-2);
  border-radius:var(--r-o); box-shadow:0 12px 32px color-mix(in srgb, var(--bg-0) 50%, transparent); display:none; }
.ss-root.open .ss-dropdown { display:block; }
.ss-group { padding:8px 12px 4px; font-size:10px; text-transform:uppercase;
  letter-spacing:.6px; color:var(--text-3); font-weight:600;
  position:sticky; top:0; background:var(--bg-2); }
.ss-option { display:flex; align-items:center; gap:10px; padding:9px 12px;
  cursor:pointer; font-size:13px; font-family:'JetBrains Mono',monospace; transition:background .08s; }
.ss-option:hover, .ss-option.active { background:var(--bg-3); }
.ss-option.selected { color:var(--green); }
.ss-option .ss-check { width:14px; text-align:center; color:var(--green); }
.ss-noresult { padding:14px 12px; color:var(--text-3); font-size:13px; text-align:center; }

/* ───────────────────────── PORTEFØLJE-STRIPE (Oversikt) ───────────────────────── */
.port-strip { padding:16px 18px; }
.port-compact { display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; }
.port-compact-txt { font-size:13px; color:var(--text-3); line-height:1.4; }
.port-compact-links { display:flex; align-items:center; gap:8px; flex-shrink:0; }
.port-compact-links a { font-size:12px; color:var(--blue-tekst); border:1px solid var(--blue); border-radius:6px; padding:3px 10px; text-decoration:none; white-space:nowrap; }
.port-compact-links a:hover { background:var(--blue-soft); }
.port-head { display:flex; align-items:baseline; gap:14px; flex-wrap:wrap; margin-bottom:14px; }
.port-title { font-size:11px; text-transform:uppercase; letter-spacing:1px; color:var(--text-3); font-weight:700; }
.port-sub { font-size:12px; color:var(--text-3); }
.port-sub strong { color:var(--text-0); font-weight:600; }
.port-sub.warn { color:var(--orange); }
.port-body { display:flex; gap:18px; align-items:stretch; flex-wrap:wrap; }
.port-kpis { flex:1 1 540px; display:grid; grid-template-columns:repeat(4,1fr); gap:10px; }
@media (max-width:1100px){ .port-kpis{ grid-template-columns:repeat(2,1fr);} }
@media (max-width:560px){ .port-kpis{ grid-template-columns:1fr 1fr;} }
.pk { background:var(--bg-1); border:1px solid var(--border); border-radius:8px; padding:11px 13px;
  position:relative; overflow:hidden; }
.pk::before { content:''; position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--border-2); }
.pk-label { font-size:10px; text-transform:uppercase; letter-spacing:.7px; color:var(--text-3); font-weight:600; margin-bottom:5px; }
.pk-value { font-size:19px; font-weight:600; color:var(--text-0); letter-spacing:-.01em; }
.pk-value small { font-size:11px; color:var(--text-3); font-weight:400; }
.pk-value.pos { color:var(--green); } .pk-value.neg { color:var(--red); } .pk-value.warn { color:var(--orange); }
.pk-sub { font-size:11px; color:var(--text-3); margin-top:3px; }
.pk-sub.pos { color:var(--green); } .pk-sub.neg { color:var(--red); }

/* Sektor-donut */
.port-donut { flex:0 0 230px; display:flex; align-items:center; gap:14px;
  background:var(--bg-1); border:1px solid var(--border); border-radius:8px; padding:14px; }
@media (max-width:1100px){ .port-donut{ flex:1 1 100%; } }
.donut-wrap { position:relative; width:96px; height:96px; flex-shrink:0; }
.donut { width:96px; height:96px; border-radius:50%; }
.donut-hole { position:absolute; inset:18px; background:var(--bg-1); border-radius:50%;
  display:flex; flex-direction:column; align-items:center; justify-content:center; }
.donut-hole-top { font-size:12px; font-weight:600; color:var(--text-0); line-height:1.1; }
.donut-hole-bot { font-size:9px; text-transform:uppercase; letter-spacing:.6px; color:var(--text-3); }
.donut-legend { flex:1; display:flex; flex-direction:column; gap:5px; min-width:0; }
.dl-row { display:flex; align-items:center; gap:7px; font-size:12px; }
.dl-swatch { width:9px; height:9px; border-radius:2px; flex-shrink:0; }
.dl-name { color:var(--text-2); flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dl-pct { color:var(--text-1); font-weight:600; }

/* Eksponering per modus */
.port-modes { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:13px;
  padding-top:12px; border-top:1px solid var(--border); }
.pm-label { font-size:10px; text-transform:uppercase; letter-spacing:.7px; color:var(--text-3); font-weight:600; margin-right:4px; }
.pm-chip { display:inline-flex; align-items:center; gap:7px; background:var(--bg-3); border:1px solid var(--border-2);
  border-radius:7px; padding:5px 11px; font-size:12px; color:var(--text-2); }
.pm-chip strong { color:var(--text-0); font-weight:600; }
.pm-pct { color:var(--text-3); font-size:11px; }

/* ── kurs-polling (/api/quotes, #2a): kort glød når kursen endres ── */
@keyframes qFlash { 0% { background:color-mix(in srgb, var(--orange) 22%, transparent); } 100% { background:transparent; } }
.ov-table td.q-flash { animation:qFlash 1.2s ease-out; }
/* A5 del 4 + D-fiks 23.07: Detaljer-headerkursen fikk SAMME svake glød som «I dag»-
   tabellcellene (.ov-table td.q-flash), men på det kompakte hero-tallet leste tan-
   gløden (topp ~20 %) som «ingen blink». Hero-kursen får derfor et EGET, tydelig gult
   blink (qFlashHero) — sterkere bakgrunn + ring-glød. box-shadow påvirker ikke flyten
   (ingen forskyvning i .ck-h-px-flexraden). «I dag»-flash-en (qFlash) er URØRT.
   .ck-h-px .p = cockpit-heroens synlige kurs (v174: pollen skriver den direkte). */
@keyframes qFlashHero {
  0%   { background:rgba(245,205,90,.60); box-shadow:0 0 0 3px rgba(245,205,90,.35); }
  100% { background:transparent;          box-shadow:0 0 0 3px rgba(245,205,90,0); }
}
.price.q-flash, .ck-h-px .p.q-flash { animation:qFlashHero 1.15s ease-out; border-radius:5px; }

/* ── jobbplan v24: ukedag-checkboxer + min/sek-par ── */
.set-days { display:flex; flex-wrap:wrap; gap:8px; margin:6px 0 10px; }
.set-day { display:inline-flex; align-items:center; gap:4px; font-size:11px; color:var(--text-2);
  background:var(--bg-3); border:1px solid var(--border-2); border-radius:6px; padding:3px 8px; cursor:pointer; }
.set-day input { accent-color: var(--green); margin:0; }
.set-pair { display:inline-flex; align-items:center; gap:6px; }
.set-pair .set-w { width:52px; }

/* ── varsler v25: regelskjema + handlingsknapper + ulest-markering ── */
.al-grid { display:flex; flex-wrap:wrap; gap:14px; align-items:flex-end; }
.al-grid .set-field input, .al-select { width:180px; padding:8px 10px; background:var(--bg-1);
  border:1px solid var(--border-2); border-radius:var(--r-k); color:var(--text-0); font-size:13px; }
.al-select:focus, .al-grid .set-field input:focus { outline:none; border-color:var(--blue); }
.al-grid .set-field input:disabled { opacity:.45; }
/* Avhukingsfelt (Push / Gjentakelse): checkbox venstrejustert rett under teksten,
   naturlig størrelse (overstyrer 180px-bredden for tekstfelt over). */
.al-check-field input[type="checkbox"] { width:16px; height:16px; align-self:flex-start;
  margin-top:4px; cursor:pointer; }
.al-check-field.al-disabled { opacity:.45; }
.al-save { padding:9px 18px; }

/* «Nytt varsel» — to-kolonne chip-skjema (Forslag C) */
.nv-toolbar { display:flex; flex-wrap:wrap; gap:14px; align-items:flex-end;
  margin-bottom:18px; padding-bottom:16px; border-bottom:1px solid var(--border-2); }
.nv-cols { display:grid; grid-template-columns:1.15fr 1fr; gap:26px; }
@media (max-width:780px) { .nv-cols { grid-template-columns:1fr; } }
.nv-colh { font-size:11px; text-transform:uppercase; letter-spacing:.7px; color:var(--text-3);
  font-weight:700; margin:0 0 12px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.nv-pill { font-size:10px; background:var(--bg-3); border:1px solid var(--border-2);
  border-radius:10px; padding:1px 7px; color:var(--text-3); letter-spacing:0; text-transform:none; }
.nv-trow { padding:11px 4px; border-bottom:1px solid var(--border); }
.nv-trow-head { display:flex; align-items:center; gap:10px; cursor:pointer; }
.nv-trow-head input[type="checkbox"] { width:16px; height:16px; accent-color:var(--green); cursor:pointer; flex:0 0 auto; }
.nv-trow-head .lbl { flex:1; font-size:14px; color:var(--text-1); }
.nv-trow.on .lbl { color:var(--text-0); font-weight:600; }
.nv-trow-head .unit { font-size:11.5px; color:var(--text-3); }
.nv-chipbox { display:none; flex-wrap:wrap; gap:6px; align-items:center; margin:9px 0 2px 26px;
  padding:7px 8px; background:var(--bg-1); border:1px solid var(--border-2); border-radius:7px;
  min-height:38px; cursor:text; }
.nv-trow.on .nv-chipbox { display:flex; }
.nv-vchip { display:inline-flex; align-items:center; gap:5px; background:var(--green-soft);
  border:1px solid color-mix(in srgb, var(--green) 40%, transparent); color:var(--green); border-radius:5px;
  padding:3px 6px 3px 9px; font-family:'JetBrains Mono',monospace; font-size:12.5px; }
.nv-vchip b { font-weight:600; }
.nv-vchip .r { cursor:pointer; background:none; border:none; padding:0; font-size:12px;
  line-height:1; opacity:.3; filter:grayscale(1); }
.nv-vchip.rec { border-color:var(--green); background:color-mix(in srgb, var(--green) 22%, transparent); }
.nv-vchip.rec .r { opacity:1; filter:none; }
.nv-vchip .x { cursor:pointer; color:var(--green); opacity:.7; font-size:13px; line-height:1; }
.nv-vchip .x:hover { opacity:1; }
.nv-chipbox input { flex:1; min-width:90px; background:transparent; border:none; outline:none;
  color:var(--text-1); font-family:'JetBrains Mono',monospace; font-size:13px; padding:3px 2px; }
.nv-chiphint { display:none; margin:5px 0 0 26px; font-size:11px; color:var(--text-3); }
.nv-trow.on .nv-chiphint { display:block; }
.nv-crow { display:flex; align-items:center; gap:10px; padding:9px 4px; border-bottom:1px solid var(--border); }
.nv-crow-main { display:flex; align-items:center; gap:10px; flex:1; cursor:pointer; min-width:0; }
.nv-crow input[type="checkbox"] { width:16px; height:16px; accent-color:var(--green); cursor:pointer; flex:0 0 auto; }
.nv-crow .lbl { flex:1; font-size:13.5px; color:var(--text-1); }
.nv-crow .lbl .sub { color:var(--text-3); font-size:12px; }
.nv-crow.on .lbl { color:var(--text-0); font-weight:600; }
/* Per-hendelse 🔁: skjult til raden er valgt; dim når av, grønn når på */
.nv-evrec { display:none; align-items:center; gap:4px; font-size:12px; color:var(--text-3);
  cursor:pointer; flex:0 0 auto; opacity:.4; filter:grayscale(1); }
.nv-crow.on .nv-evrec { display:flex; }
.nv-evrec:has(input:checked) { opacity:1; filter:none; }
.nv-evrec input { width:14px; height:14px; accent-color:var(--green); cursor:pointer; }
.nv-evnote { margin-top:12px; }
.nv-foot { display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap;
  margin-top:18px; padding-top:16px; border-top:1px solid var(--border-2); }
.nv-foot-checks { display:flex; gap:18px; flex-wrap:wrap; }
.nv-check { display:flex; align-items:center; gap:7px; font-size:13px; color:var(--text-2); cursor:pointer; }
.nv-check input[type="checkbox"] { width:15px; height:15px; accent-color:var(--green); cursor:pointer; }
.nv-foot-actions { display:flex; align-items:center; gap:14px; }
.nv-count { font-size:13px; color:var(--text-2); }
/* Dedup-UI (v166): topp-oppsummering + eksisterende-nivåer + lås av aktive hendelser.
   :not([hidden]) så display-regelen ikke overstyrer hidden-attributtet. */
.nv-existing:not([hidden]) { display:flex; flex-wrap:wrap; align-items:center; gap:7px;
  margin:2px 0 14px; padding:9px 11px; background:var(--bg-3); border:1px solid var(--border-2);
  border-radius:7px; font-size:12px; }
.nv-existing-h { color:var(--text-2); font-weight:600; }
.nv-exist-chip { display:inline-flex; align-items:center; background:var(--bg-2);
  border:1px solid var(--border-2); color:var(--text-2); border-radius:11px; padding:2px 9px;
  font-size:11.5px; white-space:nowrap; }
.nv-exist-chip.sm { padding:1px 7px; font-size:11px; }
.nv-exist-lvls:not([hidden]) { display:block; margin:5px 0 0 26px; font-size:11px; color:var(--text-3); }
.nv-exist-lvls .lab { margin-right:6px; }
.nv-exist-lvls [data-nv-exist-chips] { display:inline-flex; flex-wrap:wrap; gap:5px; vertical-align:middle; }
.nv-crow.locked { opacity:.55; }
.nv-crow.locked .nv-crow-main { cursor:default; }
.nv-active-badge { font-size:11px; color:var(--green); border:1px solid var(--green);
  border-radius:10px; padding:1px 8px; white-space:nowrap; flex:0 0 auto; }
.nv-vchip.dup { border-color:var(--red); background:var(--red-soft); }
.nv-vchip.dup b { color:var(--red); }
.al-note { margin-top:10px; }
.al-actions { white-space:nowrap; }
.al-actions form { display:inline-block; margin-left:6px; }
.al-btn { padding:4px 12px; border-radius:6px; font-size:12px; font-weight:600; cursor:pointer;
  background:var(--bg-3); border:1px solid var(--border-2); color:var(--text-2); }
.al-btn:hover { border-color:var(--blue); color:var(--text-1); }
.al-btn.arm { background:var(--green-soft); color:var(--green); border-color:transparent; }
.al-btn.danger:hover { border-color:var(--red); color:var(--red); }
.al-unseen td { background:var(--orange-soft); }
.al-link { color:inherit; text-decoration:none; border-bottom:1px dotted var(--border-2); }
.al-link:hover { color:var(--blue-tekst); border-bottom-color:var(--blue); }
.al-ext { color:var(--text-3); font-size:11px; }
.warn-txt { color:var(--orange); }

/* ── watchlist fase 2 (v26): liste-faner + radmeny + admin-kort ── */
.wl-tabs { padding-bottom:0; }
.wl-tabs .filt { border-radius:8px 8px 0 0; border-bottom:none; }
.wl-tabs .filt[hidden] { display:none; }
.wl-count { display:inline-block; min-width:16px; margin-left:5px; padding:0 5px;
  background:var(--bg-3); border-radius:8px; font-size:10px; color:var(--text-3);
  font-family:'JetBrains Mono',monospace; }
.filt.active .wl-count { background:var(--blue-soft); color:var(--blue-tekst); }
.ov-table th.c-star, .ov-table td.c-star { width:58px; white-space:nowrap; }
.wl-btn { background:none; border:none; cursor:pointer; font-size:14px; line-height:1;
  padding:2px 4px; color:var(--text-3); }
.wl-btn:hover { color:var(--blue-tekst); transform:scale(1.1); }
.wl-menu { position:absolute; z-index:60; min-width:170px; padding:8px;
  background:var(--bg-2); border:1px solid var(--border-2); border-radius:8px;
  box-shadow:0 8px 24px color-mix(in srgb, var(--bg-0) 50%, transparent); display:flex; flex-direction:column; gap:6px; }
.wl-menu-item { display:flex; align-items:center; gap:8px; font-size:12px;
  color:var(--text-2); cursor:pointer; padding:3px 6px; border-radius:6px; }
.wl-menu-item:hover { background:var(--bg-3); color:var(--text-1); }
.wl-menu-item input { accent-color:var(--blue); margin:0; }
.wl-admin { width:100%; border-collapse:collapse; font-size:12px; margin-bottom:12px; }
.wl-admin th { text-align:left; color:var(--text-3); font-weight:600; padding:6px 10px;
  border-bottom:1px solid var(--border-2); }
.wl-admin th.r, .wl-admin td.r { text-align:right; }
.wl-admin td { padding:6px 10px; border-bottom:1px solid var(--border); }
.wl-inline { display:inline-flex; align-items:center; gap:8px; }
.wl-name { width:200px; padding:6px 10px; background:var(--bg-1);
  border:1px solid var(--border-2); border-radius:var(--r-k); color:var(--text-0); font-size:12px; }
.wl-name:focus { outline:none; border-color:var(--blue); }
.wl-rowactions form { white-space:nowrap; }
.wl-rowactions .btn-link { padding:4px 9px; font-size:12px; }
.wl-del:hover { border-color:var(--red); color:var(--red); }
.wl-newform { display:flex; align-items:center; gap:10px; }
.wl-empty { color:var(--text-3); }

/* ── sammenligning v26: crosshair-dato i grafhodet ── */
.cmp-cross-date { margin-left:10px; font-size:11px; color:var(--orange); font-weight:400; }

/* ── risiko v28: sizing-simulator (kontroll-kort + KPI-rutenett + netto-tabell) ── */
.rk-grid { display:grid; grid-template-columns:360px 1fr; gap:16px; align-items:start; }
@media (max-width: 980px) { .rk-grid { grid-template-columns:1fr; } }
.rk-controls .set-field { display:block; margin-bottom:14px; }
.rk-controls .set-field input[type="text"], .rk-controls .al-select { width:100%;
  box-sizing:border-box; padding:8px 10px; background:var(--bg-1);
  border:1px solid var(--border-2); border-radius:var(--r-k); color:var(--text-0); font-size:13px; }
.rk-controls .set-field input[type="text"]:focus, .rk-controls .al-select:focus {
  outline:none; border-color:var(--blue); }
.rk-row2 { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.rk-slider input[type="range"] { width:100%; margin-top:6px; accent-color:var(--green); }
.rk-val { float:right; color:var(--orange); font-size:12px; }
.rk-kpis { display:grid; grid-template-columns:repeat(3, 1fr); gap:12px; }
@media (max-width: 1280px) { .rk-kpis { grid-template-columns:repeat(2, 1fr); } }
.rk-kpi { background:var(--bg-1); border:1px solid var(--border); border-radius:var(--r);
  padding:10px 12px; }
.rk-kpi-label { font-size:10px; text-transform:uppercase; letter-spacing:.06em;
  color:var(--text-3); margin-bottom:4px; }
.rk-kpi-value { font-size:17px; font-weight:600; color:var(--text-0); }
.rk-kpi-sub { font-size:11px; color:var(--text-3); margin-top:3px; }
.rk-warn { margin-top:12px; padding:8px 12px; border-radius:6px; font-size:12px;
  background:var(--orange-soft); color:var(--orange); }
.rk-warn.err { background:var(--red-soft); color:var(--red); }
.rk-sep { margin-top:18px; }
.rk-net td:first-child { color:var(--text-2); }
.rk-net-total td { border-top:1px solid var(--border-2); font-weight:700; }
.rk-foot { margin-top:10px; }

/* ── v29: søkbar ticker-select i skjemaer (.ss-form — Varsler/Posisjoner/Risiko) ── */
.ss-root.ss-form { display:block; width:100%; }
.ss-form .ss-control { min-width:0; width:100%; box-sizing:border-box; padding:8px 10px;
  background:var(--bg-1); border:1px solid var(--border-2); border-radius:6px; }
.ss-form .ss-control:focus { outline:none; border-color:var(--blue); }
.ss-form .ss-dropdown { left:0; right:auto; min-width:100%; width:max-content; max-width:340px; }
.al-grid .ss-root.ss-form { width:180px; }

/* ── v30: fritekst-søk på Oversikt (ticker + navn) ── */
.ov-search { width:220px; padding:6px 10px; background:var(--bg-1); border:1px solid var(--border-2);
  border-radius:6px; color:var(--text-0); font-size:12px; }
.ov-search:focus { outline:none; border-color:var(--blue); }
.ov-search::placeholder { color:var(--text-3); }

/* ── v31: Journal-siden (.jr-*) ── */
.jr-kpis { grid-template-columns:repeat(6, 1fr); }
@media (max-width: 1500px) { .jr-kpis { grid-template-columns:repeat(3, 1fr); } }
@media (max-width: 900px) { .jr-kpis { grid-template-columns:repeat(2, 1fr); } }
.jr-chart { width:100%; height:320px; }
.jr-cross { color:var(--orange); }
.jr-empty { padding:24px 12px; text-align:center; color:var(--text-3); font-size:12px; }
.jr-grid { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:16px; }
@media (max-width: 1100px) { .jr-grid { grid-template-columns:1fr; } }
.jr-setup-name { margin-bottom:4px; }
.jr-bar { height:4px; background:var(--bg-3); border-radius:2px; overflow:hidden; }
.jr-bar-fill { height:100%; background:var(--green); border-radius:2px; }
.jr-bar-fill.neg { background:var(--red); }
.jr-hint { margin-top:12px; padding:8px 12px; border-radius:6px; font-size:12px;
  background:var(--bg-3); color:var(--text-2); }
.jr-hint.pos { background:var(--green-soft); color:var(--green); }
.jr-hint.neg { background:var(--red-soft); color:var(--red); }
.jr-thin { font-size:10px; color:var(--text-3); text-transform:uppercase;
  letter-spacing:.05em; }
/* IDÉ 12: dempet snapshot-/stop-dekningsbadge */
.jr-cov { margin:12px 0 4px; padding:10px 14px; border-radius:var(--r);
  background:var(--bg-3); border:1px solid var(--border); }
.jr-cov-head { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.jr-cov-badge { font-size:12px; color:var(--text-2); }
.jr-cov-badge b { color:var(--text-1); }
.jr-cov-note { color:var(--text-3); }
.jr-cov-sub { margin-top:5px; font-size:13px; color:var(--text-2); line-height:1.5; }
.jr-hist { display:flex; align-items:flex-end; gap:8px; padding:8px 4px 0; }
.jr-hist-col { flex:1; min-width:0; text-align:center; }
.jr-hist-count { font-size:11px; color:var(--text-2); height:16px; }
.jr-hist-barwrap { height:140px; display:flex; align-items:flex-end; }
.jr-hist-bar { width:100%; border-radius:3px 3px 0 0; min-height:0; }
.jr-hist-bar.pos { background:var(--green-soft); border-top:2px solid var(--green); }
.jr-hist-bar.neg { background:var(--red-soft); border-top:2px solid var(--red); }
.jr-hist-label { margin-top:6px; font-size:9px; color:var(--text-3); white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; }

/* ───────────── v32: Detaljer — strukturlag (MACD-subplot, overlays, struktur & nivåer) ───────────── */
.det-chart { position:relative; }
.struct-canvas { position:absolute; left:0; top:0; pointer-events:none; z-index:3; }
.det-macd { width:100%; min-height:105px; }
.legend-spacer { flex:1; }
.ov-chip { padding:2px 9px; border:1px solid var(--border-2); border-radius:5px; background:transparent;
  color:var(--text-2); font:inherit; font-size:11px; cursor:pointer; line-height:1.5; }
.ov-chip:hover { color:var(--text-1); }
.ov-chip.on { border-color:color-mix(in srgb, var(--green) 40%, transparent); color:var(--green); background:var(--green-soft); }
.rsi-per { margin-left:8px; display:inline-flex; gap:2px; }
.rsi-per-btn { padding:0 6px; border:1px solid var(--border-2); border-radius:4px; background:transparent;
  color:var(--text-3); font:inherit; font-size:10px; cursor:pointer; line-height:1.6; }
.rsi-per-btn:hover { color:var(--text-1); }
.rsi-per-btn.on { border-color:color-mix(in srgb, var(--purple) 50%, transparent); color:var(--purple); background:color-mix(in srgb, var(--purple) 12%, transparent); }

.struct-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--border);
  border:1px solid var(--border); border-radius:var(--r); overflow:hidden; margin-top:4px; }
@media (max-width:900px) { .struct-grid { grid-template-columns:1fr; } }
.struct-grid .st { background:var(--bg-2); padding:11px 15px; }
.struct-grid .k { font-size:9.5px; letter-spacing:.10em; text-transform:uppercase; color:var(--text-2);
  display:flex; gap:7px; align-items:center; }
.struct-grid .v { margin-top:4px; font-size:13px; color:var(--text-1); }
.st-dim { color:var(--text-3); font-size:12px; }
/* IDÉ 2: kontekst-underlinje under en signal_stats-rad (dempet, ingen egen border-topp). */
.st-has-ctx > td { border-bottom:none; }
.st-ctx-row > td { padding-top:0; padding-bottom:8px; font-size:12px; }
.st-ctx-arrow { color:var(--text-3); }
.st-ctx-txt { color:var(--text-2); }
.st-ctx-txt.pos { color:var(--green); } .st-ctx-txt.neg { color:var(--red); }
.st-dot { width:6px; height:6px; border-radius:50%; display:inline-block; background:var(--text-3); }
.st-dot.pos { background:var(--green); } .st-dot.neg { background:var(--red); }
.st-dot.warn { background:var(--orange); } .st-dot.vol { background:#2dd4bf; }

.lv-list { margin-top:12px; border-top:1px solid var(--border); }
.lv-head { display:flex; align-items:center; justify-content:space-between; padding:10px 2px 4px;
  font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--text-2); }
.lv-head .mono { color:var(--text-3); letter-spacing:0; text-transform:none; }
.lv-row { display:flex; align-items:center; gap:12px; padding:8px 2px; border-top:1px solid var(--bg-3); }
.lv-row:first-of-type { border-top:0; }
.lv-price { min-width:74px; font-weight:600; font-size:13px; color:var(--text-0); }
.lv-nm { color:var(--text-2); font-size:12px; }
.lv-grow { flex:1; }
.lv-dist { font-size:12px; color:var(--text-2); }
.src { font-size:9.5px; letter-spacing:.04em; text-transform:uppercase; padding:2px 7px;
  border-radius:5px; border:1px solid var(--border-2); color:var(--text-2); white-space:nowrap; }
.src.fib { color:#e0707a; border-color:rgba(224,112,122,.3); background:rgba(224,112,122,.07); }
.src.ma { color:#94a2b2; } .src.ma50 { color:var(--orange); border-color:color-mix(in srgb, var(--orange) 30%, transparent); }
.src.vol { color:#2dd4bf; border-color:rgba(45,212,191,.3); background:rgba(45,212,191,.10); }
.src.piv { color:var(--text-1); }
.src.gap { color:#e0a860; border-color:color-mix(in srgb, var(--orange) 35%, transparent); background:color-mix(in srgb, var(--orange) 10%, transparent); }
.sr { font-size:9.5px; letter-spacing:.05em; text-transform:uppercase; padding:2px 7px;
  border-radius:5px; min-width:64px; text-align:center; }
.sr.res { color:var(--red); background:var(--red-soft); border:1px solid color-mix(in srgb, var(--red) 20%, transparent); }
.sr.sup { color:var(--green); background:var(--green-soft); border:1px solid color-mix(in srgb, var(--green) 20%, transparent); }

/* ───────────────────────── v34: Claude-dekning + manuell tagging ───────────────────────── */
/* Dekning-badge: synliggjør papirer med aktiv Claude-analyse i alle oversikter.
   .cov-claude = Sonnet-syntese (followed=1). .cov-opus reservert for fremtidig
   ekstern Opus fundamental-dekning (samme markup, annen farge) — se _macros.html. */
.cov-badge { display:inline-flex; align-items:center; line-height:0; margin-left:6px; vertical-align:middle; }
.cov-badge svg { display:block; }
.cov-badge svg path { fill:currentColor; }
.cov-claude { color:var(--purple); }
.cov-opus { color:var(--blue-tekst); }
.hero-ticker h1 .cov-badge svg { width:14px; height:14px; }

/* Favorittstjerne i Detalj-heroen (klassisk skall) — samkjørt med Oversikt-stjerna
   via /watchlist/medlem (se detaljer.js). .star/.star-ro/.on er felles med
   Oversikt; .det-h-star løfter kun størrelsen til hero-skala. */
.det-h-star { font-size:20px; padding:0 2px; }

/* Skrivebeskyttet favorittstjerne (ikke-Admin): vis markøren, ingen interaksjon. */
.star-ro { cursor:default; }
.star-ro:hover { color:inherit; transform:none; }
.star-ro.on { color:var(--orange); }

/* Skrivebeskyttet «følges»-status på /claude/ for ikke-Admin. */
.follow-ro { font-size:12px; font-weight:600; }
.follow-ro.following { color:var(--green); }
.ro-note { color:var(--purple); }
.dimmed { color:var(--text-3); }

/* Innstillinger: nyhets-tagging & syntese-kort. */
.src-dot.warn { background:var(--orange); }
.tag-grid { display:flex; gap:28px; align-items:center; flex-wrap:wrap; margin:6px 0 16px; }
.tag-stat { display:flex; flex-direction:column; gap:2px; min-width:120px; }
.tag-num { font-size:30px; font-weight:700; color:var(--orange); line-height:1; }
.tag-lbl { font-size:12px; color:var(--text-2); }
.tag-info { display:flex; flex-direction:column; gap:5px; }
.tag-line { display:flex; align-items:center; gap:8px; font-size:13px; flex-wrap:wrap; }
.tag-state { font-weight:600; }
.tag-res { font-size:12px; }
.tag-form { display:flex; align-items:center; gap:16px; flex-wrap:wrap; }
.tag-form .set-note { flex:1; min-width:260px; margin:0; }

/* ───────────────────────── v36: Korrelasjonspanel (Detaljer) ───────────────────────── */
.corr-list { margin-top:4px; }
.corr-head, .corr-row {
  display:grid;
  grid-template-columns:minmax(160px,2.4fr) repeat(4,1fr) 84px;
  align-items:center; gap:10px;
}
.corr-head {
  padding:6px 8px; font-size:9.5px; letter-spacing:.10em; text-transform:uppercase;
  color:var(--text-3); border-bottom:1px solid var(--border);
}
.corr-row { padding:9px 8px; border-bottom:1px solid var(--bg-3); }
.corr-row:last-child { border-bottom:0; }
.corr-row.is-brent { background:var(--orange-soft); border-radius:var(--r-k); }
.corr-row.is-brent .corr-sym { color:var(--orange); }
.corr-c-ref { display:flex; flex-direction:column; gap:1px; min-width:0; }
.corr-sym { font-size:12.5px; font-weight:600; color:var(--text-1); }
.corr-nm { font-size:11px; color:var(--text-2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.corr-fx { color:var(--text-3); }
.corr-c-num { text-align:right; font-size:13px; color:var(--text-1); }
.corr-c-str { text-align:right; }
.corr-head .corr-c-num, .corr-head .corr-c-str { text-align:right; }
.corr-dim { color:var(--text-2); font-size:12px; }
.corr-tone.strong { color:var(--orange); font-weight:600; }
.corr-tone.mod { color:var(--text-1); }
.corr-tone.neutral { color:var(--text-2); }
.corr-pill {
  display:inline-block; padding:1px 8px; border-radius:9px; font-size:10px;
  letter-spacing:.04em; text-transform:uppercase; font-weight:600;
}
.corr-pill.strong { background:var(--orange-soft); color:var(--orange); }
.corr-pill.mod { background:var(--bg-3); color:var(--text-1); }
.corr-pill.neutral { background:var(--bg-3); color:var(--text-3); }
.dom-pill {
  display:inline-block; padding:1px 8px; border-radius:9px; font-size:10px;
  letter-spacing:.04em; text-transform:uppercase; font-weight:600; white-space:nowrap;
}
.dom-pill.edge { background:var(--green-soft); color:var(--green); }
.dom-pill.svak { background:var(--blue-soft); color:var(--blue-tekst); }
.dom-pill.ingen { background:var(--orange-soft); color:var(--orange); }
.dom-pill.lown, .dom-pill.flat { background:var(--bg-3); color:var(--text-3); }
@media (max-width:900px) {
  .corr-head { display:none; }
  .corr-row { grid-template-columns:1fr 1fr; gap:4px 10px; }
  .corr-c-ref { grid-column:1 / -1; }
  .corr-c-num::before { content:attr(data-lbl); float:left; color:var(--text-3); font-size:10px; }
}

/* ═══════════ Posisjoner v50: cockpit · pengekolonner · R-bar · «?»-help ═══════════ */
.pcockpit { display:grid; grid-template-columns:repeat(5,1fr); gap:12px; }
@media (max-width:1100px) { .pcockpit { grid-template-columns:repeat(2,1fr); } }
@media (max-width:600px) { .pcockpit { grid-template-columns:1fr; } }
.pmetric { background:var(--bg-2); border:1px solid var(--border); border-radius:var(--r); padding:13px 15px; }
.pmetric .pm-l { font-size:11px; color:var(--text-3); text-transform:uppercase; letter-spacing:.5px; margin-bottom:5px; display:flex; align-items:center; }
.pmetric .pm-v { font-size:22px; font-weight:600; color:var(--text-0); font-family:'JetBrains Mono',monospace; letter-spacing:-.01em; }
.pmetric .pm-v.pos { color:var(--green); } .pmetric .pm-v.neg { color:var(--red); }
.pmetric .pm-s { font-size:11px; color:var(--text-2); margin-top:3px; }

.pos-money.pos { color:var(--green); } .pos-money.neg { color:var(--red); }

.r-cell { min-width:148px; }
.r-track { position:relative; height:6px; background:var(--bg-3); border-radius:3px; margin:4px 0; }
.r-track .rt { position:absolute; top:-2px; width:2px; height:10px; }
.r-track .rt-stop { background:var(--red); }
.r-track .rt-entry { background:var(--text-3); }
.r-track .rt-tgt { background:var(--green); }
.r-track .rt-mark { top:-3px; width:11px; height:11px; border-radius:50%; border:2px solid var(--bg-2); transform:translateX(-5px); }
.r-track .rt-mark.pos { background:var(--green); } .r-track .rt-mark.neg { background:var(--red); }
.r-val { font-size:11px; font-family:'JetBrains Mono',monospace; }
.r-nudge { display:inline-flex; align-items:center; gap:5px; font-size:11px; color:var(--orange); background:var(--orange-soft); padding:3px 8px; border-radius:5px; white-space:nowrap; }

.edge-chip { display:inline-flex; align-items:center; gap:4px; font-size:10px; padding:2px 7px; border-radius:5px; background:var(--bg-3); color:var(--text-2); font-family:'JetBrains Mono',monospace; margin-left:6px; vertical-align:middle; font-weight:600; }
.edge-chip.edge-pos { color:var(--green); } .edge-chip.edge-warn { color:var(--orange); } .edge-chip.edge-neg { color:var(--red); }

.lukk-preview { font-size:11px; color:var(--text-3); font-family:'JetBrains Mono',monospace; white-space:nowrap; min-height:13px; margin-top:3px; }
.lukk-preview .pv.pos { color:var(--green); } .lukk-preview .pv.neg { color:var(--red); }
.pos-lukk-wrap { display:flex; flex-direction:column; gap:0; }
.pos-full-table td .pos-actions { align-items:flex-start; }

/* ═══ Posisjoner v57: gruppert visning (ticker + instrument) ═══ */
.pos-grp-table { width:100%; border-collapse:collapse; }
.pos-grp-table th.c, .pos-grp-table td.c { text-align:center; }
.sub-s { font-size:11px; color:var(--text-3); margin-top:1px; font-weight:400; }

/* morsrad */
.pos-grp-table tr.grp { cursor:pointer; transition:background .12s; }
.pos-grp-table tr.grp:hover { background:var(--bg-3); }
.pos-grp-table tr.grp.open { background:var(--bg-3); }
.pos-grp-table tr.grp > td { border-top:1px solid var(--border-2); padding:12px 10px; }
.pos-grp-table .chev { display:inline-block; width:13px; color:var(--text-3); font-size:9px;
  transition:transform .15s; vertical-align:middle; }
.pos-grp-table tr.grp.open .chev { transform:rotate(90deg); }
.gcount { background:var(--bg-0); color:var(--text-2); font-size:10px; font-weight:600;
  padding:1px 7px; border-radius:8px; margin-left:8px; border:1px solid var(--border-2); }
.instr { display:inline-block; font-size:10px; font-weight:700; letter-spacing:.4px;
  padding:1px 7px; border-radius:5px; margin-left:8px; text-transform:uppercase; vertical-align:middle; }
.instr-cfd { background:var(--blue-soft); color:var(--blue); }
.instr-aksjer { background:var(--green-soft); color:var(--green); }
.ksb { display:inline-block; min-width:22px; text-align:center; font-weight:700; font-size:12px;
  padding:2px 7px; border-radius:5px; font-family:'JetBrains Mono',monospace; }
.ksb-k { background:var(--green-soft); color:var(--green); }
.ksb-s { background:var(--red-soft); color:var(--red); }
.mixtag { color:var(--orange); font-size:12px; margin-left:5px; cursor:help; }

/* barn-rader (lott) */
.pos-grp-table tr.lot { display:none; background:var(--bg-1); }
.pos-grp-table tr.lot.show { display:table-row; }
.pos-grp-table tr.lot > td { border-top:1px solid var(--border); padding:7px 10px; font-size:12px; color:var(--text-2); }
.pos-grp-table tr.lot td.ordid { padding-left:28px; }
.pos-grp-table .oid { color:var(--text-1); font-weight:500; }
.pos-grp-table .odate { color:var(--text-3); font-size:11px; margin-left:6px; }

/* «Lukk hele» — gruppe-lukk-knapp på morsraden */
.pos-grp-lukk-form { display:flex; align-items:center; gap:5px; }
.pos-lukk-alle { background:var(--orange-soft); color:var(--orange); border:1px solid color-mix(in srgb, var(--orange) 40%, transparent); }
.pos-lukk-alle:hover { background:var(--orange); color:var(--on-accent); }

/* ═══ CMC CSV-import (v58) ═══ */
.imp-upload { display:flex; align-items:center; gap:14px; padding:16px 18px; flex-wrap:wrap; }
.imp-file { color:var(--text-2); font-size:13px; font-family:inherit; }
.imp-file::file-selector-button { background:var(--bg-3); color:var(--text-1); border:1px solid var(--border-2);
  border-radius:6px; padding:7px 12px; font-family:inherit; font-size:13px; cursor:pointer; margin-right:12px; }
.imp-file::file-selector-button:hover { border-color:var(--text-3); }
.imp-table td { vertical-align:top; }
.imp-name { font-weight:600; color:var(--text-0); font-size:13px; }
.imp-warn { color:var(--orange); font-size:11px; margin-top:3px; }
.imp-unmapped { background:var(--orange-soft); }
.imp-lots { margin-top:5px; }
.imp-lots summary { font-size:11px; color:var(--text-3); cursor:pointer; }
.imp-lottbl { margin-top:6px; border-collapse:collapse; width:100%; }
.imp-lottbl th { padding:3px 8px 3px 0; font-size:10px; text-transform:uppercase; letter-spacing:.4px; color:var(--text-3); text-align:left; border:0; }
.imp-lottbl th.r { text-align:right; }
.imp-lottbl td { padding:3px 8px 3px 0; font-size:11px; color:var(--text-2); border:0; }
.imp-lev { width:110px; }
.imp-stop { width:90px; }
.imp-th-opt { color:var(--text-3); font-weight:400; }
.imp-hint { font-size:10px; color:var(--text-3); margin-top:3px; }
.imp-lotlev { width:84px; padding:3px 6px; font-size:11px; }
.imp-lotlev.is-off { opacity:.35; }

/* Edge-preview i Ny posisjon-skjema (v51) */
.pos-edge { display:flex; align-items:center; gap:18px; margin-top:16px; padding:13px 15px; background:var(--bg-1); border:1px solid var(--border); border-radius:9px; flex-wrap:wrap; }
.pe-score { display:flex; align-items:center; gap:8px; }
.pe-score b { font-size:26px; font-weight:700; color:var(--text-0); font-family:'JetBrains Mono',monospace; }
.pe-score b.edge-pos { color:var(--green); } .pe-score b.edge-warn { color:var(--orange); } .pe-score b.edge-neg { color:var(--red); }
.pe-cap { font-size:11px; color:var(--text-3); text-transform:uppercase; letter-spacing:.05em; line-height:1.15; }
.pe-layers { display:flex; gap:10px; flex:1; flex-wrap:wrap; min-width:240px; }
.pe-layer { display:flex; flex-direction:column; gap:4px; min-width:104px; flex:1; }
.pe-ln { font-size:11px; color:var(--text-2); display:flex; justify-content:space-between; }
.pe-bar { height:5px; border-radius:3px; background:var(--bg-3); overflow:hidden; }
.pe-bar i { display:block; height:100%; border-radius:3px; }
.pe-note { flex-basis:100%; font-size:11px; color:var(--text-3); }
.pe-be { flex-basis:100%; margin-top:6px; padding:6px 10px; border-radius:6px;
  font-size:11px; background:var(--bg-3); color:var(--text-2); }

/* Oversikt v52: dempet KPI (equity-avhengige) + kontant-hurtigredigering */
.pk-soft { opacity:.5; }
.pk-soft:hover { opacity:1; }
.pk-cash-form { display:flex; align-items:center; gap:6px; margin:2px 0 1px; }
.pk-cash-input { width:108px; padding:4px 8px; background:var(--bg-1); border:1px solid var(--border-2); border-radius:6px; color:var(--text-0); font-size:18px; font-weight:600; outline:none; }
.pk-cash-input:focus { border-color:var(--green); }
.pk-cash-save { padding:5px 10px; border:1px solid var(--green); background:var(--green-soft); color:var(--green); border-radius:6px; font-size:13px; font-weight:600; cursor:pointer; font-family:inherit; line-height:1; }
.pk-cash-save:hover { background:var(--green); color:var(--on-accent); }

/* «?»-help — gjenbrukbart, dashbord-bredt */
.help { display:inline-flex; align-items:center; justify-content:center; width:15px; height:15px; border-radius:50%; border:1px solid var(--border-2); background:var(--bg-3); color:var(--text-2); font-size:10px; font-weight:700; cursor:help; position:relative; margin-left:6px; vertical-align:middle; -webkit-user-select:none; user-select:none; }
.help:hover, .help:focus, .help.pin { color:var(--green); border-color:var(--green); outline:none; }
.help .tip { position:absolute; top:150%; left:50%; transform:translateX(-50%); width:280px; background:var(--bg-1); border:1px solid var(--border-2); border-radius:var(--r-o); padding:12px 14px; z-index:60; visibility:hidden; opacity:0; transition:opacity .12s; text-align:left; font-weight:400; box-shadow:0 14px 40px color-mix(in srgb, var(--bg-0) 55%, transparent); white-space:normal; }
.help:hover .tip, .help:focus-within .tip, .help.pin .tip { visibility:visible; opacity:1; }
.help .tip::before { content:""; position:absolute; top:-7px; left:50%; transform:translateX(-50%) rotate(45deg); width:12px; height:12px; background:var(--bg-1); border-left:1px solid var(--border-2); border-top:1px solid var(--border-2); }
.tip-wide { width:380px; }
.tip-h { display:block; font-size:13px; color:var(--text-0); font-weight:600; margin-bottom:7px; }
.tip-what { display:block; font-size:12px; color:var(--text-1); line-height:1.5; margin-bottom:6px; }
.tip-why { display:block; font-size:12px; color:var(--text-2); line-height:1.5; margin-bottom:7px; }
.tip-cond { display:block; font-size:11px; color:var(--text-3); line-height:1.55; border-top:1px solid var(--border); padding-top:7px; }
.tip-cond b { color:var(--text-2); }
.pmetric:last-child .tip, th.r .tip { left:auto; right:0; transform:none; }
.pmetric:last-child .tip::before, th.r .tip::before { left:auto; right:6px; transform:rotate(45deg); }

/* A6: klikkbare makro-chips (Rig count US / EIA oil inv → Makro-fanen) */
.macro-link { text-decoration:none; color:inherit; cursor:pointer; border-radius:6px; padding:2px 6px; margin:-2px -2px; transition:background .12s ease; }
.macro-link:hover { background:var(--bg-3); }

/* A6/§4: Detaljer katalysator-kort (ticker-spesifikke + makro) */
.cat-row { display:flex; align-items:center; gap:8px; }
.cat-row .cat-days { min-width:36px; font-weight:600; color:var(--text-1); }
.cat-row .cat-days.warn { color:var(--orange); }
.cat-row .cat-label { flex:1; color:var(--text-1); font-size:13px; }
.cat-row .cat-imp { font-size:11px; color:var(--text-3); text-transform:uppercase; }
.cat-row .cat-imp.warn { color:var(--orange); }
.cat-row .cat-src { font-size:11px; color:var(--text-3); min-width:46px; text-align:right; }

/* A6/§4: makro-relevans-chip på Detaljer (FUNDAMENTALT) */
.makro-rel-chip { display:inline-block; margin:0 0 10px; padding:3px 9px; font-size:11.5px;
  background:var(--bg-1); border:1px solid var(--border-2); border-radius:6px;
  color:var(--text-2); text-decoration:none; transition:background .12s ease; }
.makro-rel-chip:hover { background:var(--bg-3); color:var(--text-0); }

/* ═══════════════ A8 Økt 2 — Morgenbrief (per-selskap linjer) ═══════════════ */
.brief-card { padding:14px 16px 12px; border-left:3px solid var(--purple); }
.brief-head { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:8px; }
.brief-title { font-size:14px; font-weight:700; color:var(--purple); letter-spacing:.3px; }
.brief-sub { font-size:11px; color:var(--text-3); text-transform:uppercase; letter-spacing:.6px; }
.brief-meta { margin-left:auto; font-size:10.5px; color:var(--text-3); letter-spacing:.4px; text-align:right; }
.brief-list { display:flex; flex-direction:column; gap:2px; }
.brief-line { display:grid; grid-template-columns:64px 1fr; gap:12px; align-items:baseline;
  padding:7px 8px; border-radius:6px; text-decoration:none; color:var(--text-1);
  border-left:2px solid var(--purple); transition:background .12s ease; }
.brief-line:hover { background:var(--bg-3); }
.brief-line.brief-quiet { border-left-color:var(--border-2); }
.brief-tk { font-size:13px; font-weight:700; color:var(--text-0); }
.brief-text { font-size:13px; line-height:1.45; }
.brief-quiet .brief-text { color:var(--text-3); }
.brief-foot { margin-top:9px; }
.brief-ovn { display:flex; align-items:center; gap:7px; flex-wrap:wrap; margin:0 0 9px;
  padding:8px 10px; background:var(--bg-1); border:1px solid var(--border); border-radius:6px;
  font-size:11.5px; color:var(--text-2); line-height:1.45; font-family:'JetBrains Mono',monospace; }
.brief-ovn-ico { color:var(--text-3); }

/* Morgenbrief-kort på Detaljer */
.brief-detail { margin:0 0 12px; padding:10px 14px; background:var(--bg-1);
  border:1px solid var(--border); border-left:3px solid var(--purple); border-radius:var(--r); }
.brief-detail .bd-title { font-size:11px; font-weight:700; color:var(--purple);
  text-transform:uppercase; letter-spacing:.6px; }
.brief-detail .bd-sub { font-size:10.5px; color:var(--text-3); margin-left:8px; }
.brief-detail .bd-body { font-size:13.5px; line-height:1.55; color:var(--text-1); margin-top:5px; }
.brief-detail.brief-quiet .bd-body { color:var(--text-3); }

/* To-kolonne forside (mockup §1): Morgenbrief venstre · Signaltavle høyre. Hvert kort har
   kappet høyde (~halv side) med intern scroll i lista, så header/fot står stille. */
.dash-top { display:flex; gap:14px; align-items:stretch; margin-bottom:14px; }
.dash-col { flex:1 1 0; min-width:0; display:flex; flex-direction:column;
  max-height:52vh; margin-bottom:0; }
.dash-col .brief-list, .dash-col .q-list { overflow-y:auto; flex:1 1 auto; min-height:0; }
.dash-col .brief-head, .dash-col .card-header, .dash-col .brief-foot, .dash-col .q-foot { flex:0 0 auto; }
@media (max-width:900px) {
  .dash-top { flex-direction:column; }
  .dash-col { max-height:60vh; }
}

/* ═══════════════ A8 — Beslutningskø + screener-kolonner (Økt 1) ═══════════════ */
/* Edge-fargeskala (delt av kø-bar, edge-mini i tabellen): pos≥70 / warn≥50 / neg ellers */
.edge-pos { color:var(--green); } .edge-warn { color:var(--orange); } .edge-neg { color:var(--red); }
.edge-neutral { color:var(--text-2); }

/* Kø-kort */
.q-card { padding:14px 16px 10px; }
.q-list { display:flex; flex-direction:column; gap:6px; margin-top:6px; }
.q-row { display:grid; grid-template-columns:200px 64px 1fr auto 26px; align-items:center;
  gap:12px; padding:9px 12px; background:var(--bg-1); border:1px solid var(--border);
  border-left:3px solid var(--border-2); border-radius:8px; cursor:pointer;
  transition:background .12s ease, border-color .12s ease; }
.q-row:hover { background:var(--bg-3); }
.q-row:focus-visible { outline:2px solid var(--blue); outline-offset:1px; }
.q-row.q-buy { border-left-color:var(--green); }
.q-row.q-near { border-left-color:var(--orange); }
.q-row.q-exit { border-left-color:var(--red); }
.q-row.q-oversold { border-left-color:var(--purple); }

.q-badge { font-size:10px; font-weight:700; letter-spacing:.6px; text-transform:uppercase;
  padding:3px 8px; border-radius:5px; text-align:center; white-space:nowrap;
  border:1px solid transparent; }
.q-badge.q-buy { background:var(--green-soft); color:var(--green); border-color:color-mix(in srgb, var(--green) 40%, transparent); }
.q-badge.q-near { background:var(--orange-soft); color:var(--orange); border-color:color-mix(in srgb, var(--orange) 40%, transparent); }
.q-badge.q-exit { background:var(--red-soft); color:var(--red); border-color:color-mix(in srgb, var(--red) 40%, transparent); }
.q-badge.q-oversold { background:var(--purple-soft); color:var(--purple); border-color:color-mix(in srgb, var(--purple) 40%, transparent); }

.q-tk { font-size:14px; font-weight:700; color:var(--text-0); }
.q-reason-wrap { display:flex; flex-direction:column; gap:2px; min-width:0; }
.q-reason { font-size:12.5px; color:var(--text-1); line-height:1.35; }
.q-context { font-size:11px; color:var(--text-3); line-height:1.3; }
.q-reason-wrap .sb-empiri { font-size:10.5px; color:var(--text-3); opacity:.9; line-height:1.3; font-family:'JetBrains Mono',monospace; }
.q-stop { color:var(--orange); }
.q-edge { display:flex; align-items:center; gap:8px; justify-self:end; }
.q-edge-bar { width:120px; height:6px; border-radius:3px; background:var(--bg-3); overflow:hidden; }
.q-edge-fill { display:block; height:100%; border-radius:3px; }
.q-edge-fill.edge-pos { background:var(--green); }
.q-edge-fill.edge-warn { background:var(--orange); }
.q-edge-fill.edge-neg { background:var(--red); }
.q-edge-fill.edge-neutral { background:var(--text-3); }
.q-edge-num { font-size:15px; font-weight:700; min-width:24px; text-align:right; }
.q-bell { text-decoration:none; font-size:14px; line-height:1; opacity:.75; text-align:center;
  transition:opacity .12s ease; }
.q-bell:hover { opacity:1; }
.q-bell-off { visibility:hidden; }
.q-foot { margin-top:9px; }

@media (max-width:760px) {
  .q-row { grid-template-columns:1fr auto; grid-row-gap:4px; }
  .q-badge { grid-column:1; justify-self:start; }
  .q-tk { grid-column:2; justify-self:end; }
  .q-reason-wrap { grid-column:1 / -1; }
  .q-edge { grid-column:1 / -1; justify-self:start; }
  .q-bell { grid-column:2; }
}

/* Screener-kolonner i Oversikt-tabellen */
.c-edge { white-space:nowrap; }
.c-edge .edge-mini { display:inline-block; width:34px; height:5px; border-radius:3px;
  background:var(--bg-3); overflow:hidden; vertical-align:middle; margin-right:6px; }
.c-edge .edge-mini-fill { display:block; height:100%; border-radius:3px; }
.c-edge .edge-mini.edge-pos .edge-mini-fill { background:var(--green); }
.c-edge .edge-mini.edge-warn .edge-mini-fill { background:var(--orange); }
.c-edge .edge-mini.edge-neg .edge-mini-fill { background:var(--red); }
.c-edge .edge-mini.edge-neutral .edge-mini-fill { background:var(--text-3); }
.c-edge .edge-num { font-weight:600; }
.c-setup { font-size:11.5px; white-space:nowrap; max-width:210px; overflow:hidden;
  text-overflow:ellipsis; }
/* Setup-chip (mockup §2): ramme i SAMME farge som teksten (currentColor), transparent bunn.
   Bekreftet brudd = grønn/rød · avventer = oransje. */
.setup-chip { display:inline-block; padding:2px 8px; border-radius:5px; font-size:11px;
  font-weight:600; border:1px solid currentColor; background:transparent; white-space:nowrap;
  max-width:100%; overflow:hidden; text-overflow:ellipsis; vertical-align:middle; }
.setup-chip.setup-pos { color:var(--green); }
.setup-chip.setup-warn { color:var(--orange); }
.setup-chip.setup-neg { color:var(--red); }
.setup-chip.setup-neutral { color:var(--text-2); }
/* F5b: blå volum-mini-chip ved siden av setup-chippen — kontekst (volum-tørke), aldri retning. */
.setup-chip.setup-vol { color:var(--blue-tekst); font-size:9.5px; padding:1px 6px; margin-left:4px; vertical-align:middle; }
/* F4: diskret nøytralt ærlighets-merke under setup-chippen (aldri retningsfarget). */
.setup-note { display:block; margin-top:2px; font-size:9.5px; line-height:1.2;
  color:var(--text-3); font-weight:500; white-space:nowrap; overflow:hidden;
  text-overflow:ellipsis; max-width:100%; }
.c-kat.kat-warn { color:var(--orange); font-weight:600; }
.c-shortd.neg { color:var(--red); } .c-shortd.pos { color:var(--green); }
.c-shortd.neutral { color:var(--text-2); }

/* ───────── A3 §5 gruppe-stop + §4 rail-forslag + stop-bekreftelse ───────── */
.grp-stop-cell { display:flex; flex-direction:column; gap:3px; align-items:flex-start; }
.grp-stop-cell .pos-inline-form { display:flex; align-items:center; gap:5px; }
.grp-stop-cell .pos-exit-input { width:74px; }
.pos-set-stop { background:var(--orange-soft); color:var(--orange); border:1px solid var(--orange); }
.pos-set-stop:hover { background:var(--orange); color:var(--on-accent); }
.grp-stop-hint { font-size:10px; color:var(--text-2); line-height:1.3; }
.grp-be-btn { background:none; border:none; padding:0; cursor:pointer; font:inherit;
  color:var(--green); font-weight:600; text-decoration:underline; }
.grp-be-btn:hover { color:var(--text-0); }

.alert-suggest { display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; }
.suggest-form { display:inline-flex; }
/* 🔴 font-family:inherit — <button> arver IKKE font fra body. Uten den rendret
   .suggest-btn i Arial (målt live 30.07). Alle andre knapper i kodebasen setter
   den eksplisitt; denne blokka (skrevet mot surface- og border-0-navn som ikke
   tilhørte noen av palettene) manglet den.
   MERK: skriv ALDRI en stjerne rett foran en skråstrek i en CSS-kommentar —
   sekvensen lukker kommentaren midt i setningen, og regelen under blir spist av
   den foreldreløse halen. Nøyaktig den fella traff her under arbeidet 30.07 og
   slettet hele .suggest-btn-regelen; den ble fanget av computed-style-diffen,
   ikke av gjennomlesing. */
.suggest-btn { background:var(--surface-2); color:var(--text-1); border:1px solid var(--border-0);
  border-radius:var(--r-k); padding:4px 9px; font-size:11px; font-weight:600; cursor:pointer;
  white-space:nowrap; font-family:inherit; }
.suggest-btn:hover { border-color:var(--text-2); color:var(--text-0); }
.suggest-btn.ghost-g { color:var(--green); border-color:var(--green); }
.suggest-btn.ghost-g:hover { background:var(--green); color:var(--on-accent); }

.rail-clickable { text-decoration:none; color:inherit; cursor:pointer; }
.rail-clickable:hover { background:var(--surface-2); }

.stop-confirm-card { border:1px solid var(--orange); }
.al-fill-input { width:88px; padding:4px 8px; border-radius:var(--r-k); border:1px solid var(--border-0);
  background:var(--surface-1); color:var(--text-0); font-family:inherit; }
.al-act { background:var(--surface-2); color:var(--text-1); border:1px solid var(--border-0);
  border-radius:var(--r-k); padding:4px 10px; font-size:11px; font-weight:600; cursor:pointer;
  font-family:inherit; }
.al-act:hover { border-color:var(--text-2); color:var(--text-0); }

/* ── Kort-tilpasning per bruker (punkt 8) ── */
#layoutEditBtn.active { color:var(--green); border-color:var(--green); background:var(--green-soft); }
/* skjulte kort: borte til vanlig, men SYNLIGE (dempet) i redigeringsmodus */
.panel-hidden { display:none; }
body.layout-edit .panel-hidden { display:block; opacity:.42; }
body.layout-edit [data-panel-id] { position:relative; outline:1px dashed var(--border-2); outline-offset:2px; }
body.layout-edit [data-panel-id]:hover { outline-color:var(--green); }
/* Flytte-visualisering (Forslag B — «Landingssone»): panelet som dras (kort,
   KPI-seksjon ELLER Kairk AI-panel) males om til en grønn, panel-stor slippsone PÅ
   målplassen (dragover flytter det dit i sanntid), mens nettleserens drag-bilde (et
   løftet panel) følger markøren. Innholdet skjules med visibility (beholder høyden)
   så sonen leses som et tydelig fargelagt «her havner panelet»-felt — det fargede
   signalet som forsvant i v149. Gjelder ALLE paneltyper (ikke bare .card). */
.panel-dragging { position:relative; color:transparent !important;
  background:var(--green-soft) !important; border:2px dashed var(--green) !important;
  outline:none !important; box-shadow:none !important; transform:none !important; }
.panel-dragging > * { visibility:hidden; }
.panel-dragging::before { display:none !important; }
.panel-dragging::after { content:"Slipp her"; visibility:visible;
  position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  color:var(--green); font-size:12px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; }
/* Under aktiv draging dempes de øvrige panelene LETT, så landingssonen er det
   tydeligste signalet — men ikke så mye at man mister oversikten over siden. */
body.layout-dragging [data-panel-id]:not(.panel-dragging),
body.layout-dragging [data-panel-id]:not(.panel-dragging):hover {
  outline-color:var(--border) !important; opacity:.9; }
.panel-ctl { position:absolute; top:6px; right:6px; z-index:5; display:flex; gap:6px; align-items:center;
  background:var(--bg-3); border:1px solid var(--border-2); border-radius:6px; padding:3px 6px; }
.panel-drag { cursor:grab; color:var(--text-2); font-size:13px; line-height:1; letter-spacing:-2px; user-select:none; }
.panel-drag:active { cursor:grabbing; }
.panel-hide-btn { cursor:pointer; font-size:11px; font-weight:600; border:1px solid var(--border-2);
  background:transparent; color:var(--text-1); border-radius:5px; padding:2px 7px; }
.panel-hide-btn.is-hidden { color:var(--red); border-color:var(--red); }
.layout-edit-tip { position:fixed; left:50%; bottom:18px; transform:translateX(-50%); z-index:60;
  display:flex; gap:10px; align-items:center; background:var(--bg-3); border:1px solid var(--border-2);
  border-radius:8px; padding:8px 14px; font-size:12px; color:var(--text-1); box-shadow:0 8px 24px color-mix(in srgb, var(--bg-0) 40%, transparent); }
.layout-tip-btn { cursor:pointer; font-size:12px; font-weight:600; border:1px solid var(--border-2);
  background:transparent; color:var(--text-1); border-radius:6px; padding:4px 12px; }
.layout-tip-btn.primary { color:var(--green); border-color:var(--green); background:var(--green-soft); }
.layout-tip-btn:hover { border-color:var(--text-2); }

/* ── Innsidehandel-kort (smart money, Fase 1D) ── */
.ins-top { display:flex; justify-content:space-between; align-items:flex-end; margin:2px 0 12px; gap:8px; }
.ins-net { font-size:22px; font-weight:600; }
.ins-net.pos { color:var(--green); } .ins-net.neg { color:var(--red); }
.ins-net-lbl { font-size:11px; font-weight:500; color:var(--text-3); margin-left:4px; }
.ins-sub { font-size:11px; color:var(--text-3); margin-top:3px; }
.ins-win { display:flex; gap:4px; flex-shrink:0; }
.ins-win-btn { font-size:11px; padding:2px 7px; border:1px solid var(--border-2); border-radius:5px;
  color:var(--text-3); text-decoration:none; line-height:1.5; }
.ins-win-btn:hover { color:var(--text-1); }
.ins-win-btn.on { color:var(--text-1); border-color:var(--text-2); background:var(--bg-3); }
.ins-chart-h { display:flex; justify-content:space-between; font-size:10px; color:var(--text-3);
  letter-spacing:.04em; margin-bottom:4px; }
.ins-dot.pos { color:var(--green); } .ins-dot.neg { color:var(--red); margin-left:8px; }
.ins-chart { margin-bottom:2px; }
.ins-q { display:flex; font-size:9px; color:var(--text-3); margin-bottom:4px; }
.ins-q span { flex:1; text-align:center; }
.ins-list { margin-top:4px; max-height:140px; overflow-y:auto; }
.ins-list::-webkit-scrollbar { width:6px; }
.ins-list::-webkit-scrollbar-thumb { background:var(--border-2); border-radius:3px; }
.ins-row { display:flex; align-items:flex-start; gap:8px; padding:7px 0; border-top:1px solid var(--border-0); }
.ins-arrow { font-size:11px; margin-top:1px; }
.ins-arrow.pos { color:var(--green); } .ins-arrow.neg { color:var(--red); }
.ins-mid { flex:1; min-width:0; }
.ins-name { font-size:12px; color:var(--text-1); }
.ins-role { color:var(--text-3); font-size:11px; }
.ins-meta { font-size:11px; color:var(--text-3); }
.ins-meta a { color:var(--text-2); }
.ins-val { font-size:12px; font-weight:600; white-space:nowrap; }
.ins-val.pos { color:var(--green); } .ins-val.neg { color:var(--red); }
.ins-ai { color:var(--text-3); font-style:italic; }
.ins-sec-h { display:flex; justify-content:space-between; font-size:10px; color:var(--text-3);
  letter-spacing:.06em; text-transform:uppercase; border-top:0.5px solid var(--border-2);
  padding-top:10px; margin-top:10px; margin-bottom:2px; }
.ins-sub-list { margin-top:2px; max-height:140px; overflow-y:auto; }
.ins-sub-list::-webkit-scrollbar { width:6px; }
.ins-sub-list::-webkit-scrollbar-thumb { background:var(--border-2); border-radius:3px; }
.ins-fin { font-size:10px; padding:1px 6px; border-radius:5px; background:var(--bg-3);
  color:var(--text-3); }

/* ── Papirbot-side (/bot/) ── */
.bot-eqwrap { width:100%; }
.bot-eqsvg { width:100%; height:150px; display:block; }
.bot-tbl { width:100%; border-collapse:collapse; font-size:13px; }
.bot-tbl th { text-align:left; color:var(--text-3); font-weight:500; font-size:11px;
  letter-spacing:.04em; padding:6px 8px; border-bottom:1px solid var(--border); }
.bot-tbl td { padding:7px 8px; border-bottom:1px solid var(--border); color:var(--text-1); }
.bot-tbl tr:last-child td { border-bottom:none; }
.bot-tbl th.num, .bot-tbl td.num { text-align:right; }

/* ── Trend-signal statuslinje (Detaljer) ── */
.trend-status-row { margin-top:6px; }
.trend-status { display:inline-block; font-size:11.5px; padding:3px 10px; border-radius:5px;
  font-family:'JetBrains Mono',monospace; border:1px solid var(--border-2); }
.trend-status[hidden] { display:none; }
.trend-status.trend-long { background:var(--green-soft); color:var(--green); border-color:color-mix(in srgb, var(--green) 40%, transparent); }
.trend-status.trend-wait { background:var(--orange-soft); color:var(--orange); border-color:color-mix(in srgb, var(--orange) 40%, transparent); }
.trend-status.trend-cash { background:var(--bg-3); color:var(--text-2); }

/* ═════════════ HER LAA CARBONS RADIUS-OVERSTYRINGER ═════════════
   Token-blokka (carbons 24 verdier) er flyttet OPP i :root. De to
   radius-reglene som sto igjen — `body .card/.hero/.kpi-section` 6px og
   `body .btn/.search` 5px — er SLETTET 30.07 med 1B: base-reglene setter nå
   `var(--r)` og `var(--r-k)` direkte, så overstyringene ble eksakte
   duplikater. Dermed er hele overstyrings-laget etter tema-fjerningen borte,
   og spesifisitets-fella («body ` foran» for å holde presedens mot `.st-card`)
   trengs ikke lenger — det finnes ikke to lag å holde fra hverandre.
   ═══════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   D1 — DESIGN-TOKENS & TILSTANDER (2026-07-06) · fasit: mockup 04
   Ren CSS/JS, hele plattformen. Deploy: restart, kun web/.
   Alt her er additivt/normaliserende — ingen motor-/schema-/app-endring.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 1 · Typeskala + label-utility ──────────────────────────────────────────
   Løser variant F riktig: --text-3 er nå #9aa4b2 (dempet MEN lesbar, 7,2:1) og
   label-familien løftes til 10,5px/600/uppercase/.09em i JetBrains Mono. Hierarki
   bæres nå av farge OG type. .lbl er delt utility for D1-komponenter; blokken under
   normaliserer de eksisterende primær-label-selektorene til samme spec. Mikro-labels
   < 10px i kompakte widgets (donut-bunn, mode-pct) røres IKKE (kun ny farge via token)
   for å unngå layout-hopp. */
.lbl { font-family:'JetBrains Mono',monospace; font-size:10.5px; font-weight:600;
  letter-spacing:.09em; text-transform:uppercase; color:var(--text-3); }
.cap { font-size:11.5px; color:var(--text-3); }
.macro-label, .kpi-label, .kpi-section-title, .card-title, .claude-stat-label,
.edge-badge .el, .news-source, .last-update, .corr-header, .modus-bar .mlbl,
.pos-table thead th, .ov-table thead th {
  font-family:'JetBrains Mono',monospace; font-size:10.5px; font-weight:600;
  letter-spacing:.09em; text-transform:uppercase; color:var(--text-3);
}
/* seksjonstitler er litt bredere av natur — behold 11px der, men samme font/spacing */
.kpi-section-title, .card-title { font-size:11px; }

/* ── 2 · Edge-fargeskala (5 bånd) ───────────────────────────────────────────
   UI-koding av EKSISTERENDE score (ingen motor-endring): <40 rød · 40–47 svak rød ·
   48–59 amber · 60–69 dempet grønn · ≥70 grønn. Båndklassene (eb-1..eb-5) settes
   klientside i oversikt.js fra det numeriske edge-tallet som allerede står i DOM
   (td.c-edge[data-val] + kø-kortets tall) — så ingen template/app-endring. Klassene
   ligger PÅ tall-elementet og på bar-fyllet, og vinner over de gamle 3-bøtte-klassene
   (pos/warn/neg / f-hi/f-mid/f-lo) via senere kilderekkefølge + spesifisitet. */
/* tall-farge (kø .ck-edge-num + tabell .edge-num): eb-num.eb-N (0,2,0) slår de
   gamle 1-klasse-fargene (e-… og edge-…).
   🔴 25.07: her sto en glob-skrivemåte med stjerne rett foran en skråstrek. Den
   sekvensen LUKKER kommentaren midt inne i den, så resten av linja ble tolket som
   CSS-søppel og parseren spiste regelen rett under: `.eb-num.eb-1` fantes ALDRI i
   document.styleSheets, og det laveste edge-båndet (under 40) rendret uten rød
   farge. Verifisert i Chromium: 1349 selektorblokker i kilden, 1348 parset, og den
   ene manglende var nettopp denne. Regel: aldri stjerne umiddelbart etterfulgt av
   skråstrek inne i en CSS-kommentar — skriv «e-… og edge-…» i stedet. */
.eb-num.eb-1 { color:var(--red); }
.eb-num.eb-2 { color:#e08a84; }
.eb-num.eb-3 { color:var(--amber); }
.eb-num.eb-4 { color:#7ccba5; }
.eb-num.eb-5 { color:var(--edge); }
/* Edge-RINGEN paa Detalj (cockpit/detaljer_hero.html) bruker fra 30.07 SAMME
   baand som .eb-num over — via klassene .eb-ring.eb-N, ikke via egne literaler.
   🔴 Foer dette hadde ringen sin EGEN firetrinns-skala med egne terskler
   (40/60/70) og en egen roedtone (#f0554d), mens tallet ved siden av fulgte
   baandets fem trinn (40/48/60/70). En score mellom 40 og 47 fikk derfor ÉN
   farge i ringen og en ANNEN paa tallet — samme score, to farger, paa samme
   skjerm. Naa staar baandfargene ETT sted, og de to kan ikke gli fra hverandre.
   Endres et baand her, foelger ringen automatisk med. */
.eb-ring.eb-1 { stroke:var(--red); }
.eb-ring.eb-2 { stroke:#e08a84; }
.eb-ring.eb-3 { stroke:var(--amber); }
.eb-ring.eb-4 { stroke:#7ccba5; }
.eb-ring.eb-5 { stroke:var(--edge); }
/* kø-bar-fyll: .ck-edge-fill.eb-N (0,2,0) slår gradient-klassene f-* (0,1,0). */
.ck-edge-fill.eb-1 { background:var(--red); background-image:none; }
.ck-edge-fill.eb-2 { background:#d98a84; background-image:none; }
.ck-edge-fill.eb-3 { background:var(--amber); background-image:none; }
.ck-edge-fill.eb-4 { background:#63c99b; background-image:none; }
.ck-edge-fill.eb-5 { background:var(--edge); background-image:none; }
/* tabell-mini-fyll: må slå den gamle 4-klasse-regelen
   `.c-edge .edge-mini.edge-warn .edge-mini-fill` (0,4,0) → bruk (0,4,1) via .ov-table td. */
.ov-table td.c-edge .edge-mini-fill.eb-1 { background:var(--red); }
.ov-table td.c-edge .edge-mini-fill.eb-2 { background:#d98a84; }
.ov-table td.c-edge .edge-mini-fill.eb-3 { background:var(--amber); }
.ov-table td.c-edge .edge-mini-fill.eb-4 { background:#63c99b; }
.ov-table td.c-edge .edge-mini-fill.eb-5 { background:var(--edge); }

/* ── 3 · Ferskhets-chips (felles språk) ─────────────────────────────────────
   ● LIVE · intradag HH:MM / SETTLET dd.mm / KILDE per dd.mm · neste dd.mm /
   GAMMEL > 40d. Samme plass i alle kort (øverst høyre). Rød = BH-rigcount-regelen
   (>40d gammel). Se mockup 04 §4. */
.frch { display:inline-flex; align-items:center; gap:5px; font-family:'JetBrains Mono',monospace;
  font-size:10.5px; font-weight:600; letter-spacing:.02em; border-radius:6px; padding:2px 8px;
  white-space:nowrap; }
.frch.live { background:var(--green-soft); color:var(--green); }
.frch.live .dot { font-size:8px; line-height:1; animation:frchPulse 1.8s infinite; }
.frch.settled { background:var(--blue-soft); color:var(--blue-tekst); }
.frch.source { background:var(--amber-soft); color:var(--amber); }
.frch.stale { background:var(--red-soft); color:var(--red); }
@keyframes frchPulse { 0%,100%{opacity:1} 50%{opacity:.35} }

/* ── 4 · Skeleton-loading (samme geometri, null layout-hopp) ─────────────────
   Brukes på kurs-polling-flatene ved sidelast / re-arm. Samme boks-geometri som
   det ferdige kortet → ingen hopp når data lander. */
.skel { border-radius:6px; background:linear-gradient(90deg,var(--bg-2) 25%,var(--bg-3) 50%,var(--bg-2) 75%);
  background-size:200% 100%; animation:skelSweep 1.4s linear infinite; }
@keyframes skelSweep { to { background-position:-200% 0; } }
@media (prefers-reduced-motion: reduce) { .skel { animation:none; } .frch.live .dot { animation:none; } }

/* ── 5 · Tomtilstander som veileder (ikon + hvorfor + primærhandling) ────────
   Mockup 04 §3. Erstatter «Ingen instrumenter matcher filtrene.» (universtabell)
   og gir Journal-panelene en vei videre (pek på sett stop). */
.empty-state { border:1px dashed var(--border-2); border-radius:var(--r); padding:22px;
  text-align:center; }
.empty-state .es-ic { font-size:22px; margin-bottom:8px; }
.empty-state h4 { color:var(--text-0); font-size:13.5px; font-weight:600; }
.empty-state p { color:var(--text-2); font-size:12.5px; margin:6px auto 12px; max-width:400px; line-height:1.5; }
.es-btn { display:inline-block; font-size:12.5px; font-weight:600; border-radius:var(--r-k);
  padding:7px 14px; text-decoration:none; border:1px solid var(--border-2); color:var(--text-1);
  background:transparent; cursor:pointer; font-family:inherit; margin:2px; }
.es-btn:hover { border-color:var(--text-3); }
.es-btn.pri { background:var(--edge); border-color:var(--edge); color:var(--on-accent); }
.es-btn.pri:hover { filter:brightness(1.06); }

/* ── 6 · Aktive-filter-chips (filter-hygiene, universtabell) ─────────────────
   Aktive søk/filtre vises som fjernbare chips over tabellen; ✕ nullstiller ett
   filter. Teller «X av N vist» beholdes i #filtCount. Se oversikt.js. */
.ov-active-filters { display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin:2px 0 4px; }
.ov-active-filters:empty { display:none; }
.ov-fchip { display:inline-flex; align-items:center; gap:6px; font-family:'JetBrains Mono',monospace;
  font-size:11px; font-weight:600; background:var(--bg-3); border:1px solid var(--border-2);
  color:var(--text-1); border-radius:6px; padding:2px 4px 2px 9px; }
.ov-fchip .x { border:none; background:transparent; color:var(--text-3); cursor:pointer;
  font-size:13px; line-height:1; padding:0 4px; border-radius:4px; font-family:inherit; }
.ov-fchip .x:hover { color:var(--red); background:var(--red-soft); }
.ov-fchip-clear { font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:600;
  color:var(--text-3); background:transparent; border:none; cursor:pointer; text-decoration:underline;
  padding:2px 4px; }
.ov-fchip-clear:hover { color:var(--text-1); }
/* D1 END ─────────────────────────────────────────────────────────────────── */

/* D7 — INNSTILLINGER: fire grupper + sticky lokal-nav (mockup 06) ──────────
   Alt er scopet til .st-wrap / .st-*-klasser. Ingen eksisterende regel er endret,
   så øvrige flater (som deler .card/.wl-admin/.set-*) er urørt. */
.set-wrap.st-wrap { max-width:1240px; gap:14px; }
.st-head { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; }
.st-h1 { font-size:21px; color:var(--text-0); font-weight:600; }
.st-hint { font-size:11.5px; color:var(--text-3); }

.st-layout { display:grid; grid-template-columns:210px 1fr; gap:22px; align-items:start; }
.st-main { min-width:0; }

.st-nav { position:sticky; top:68px; }
.st-navgrp { font-size:9.5px; letter-spacing:.13em; color:var(--text-3); font-weight:600;
  text-transform:uppercase; margin:14px 0 4px 10px; }
.st-nav a { display:flex; align-items:center; gap:8px; padding:6px 10px; border-radius:var(--r-k);
  color:var(--text-2); text-decoration:none; font-size:13px; margin:1px 0; }
.st-nav a:hover { background:var(--bg-2); color:var(--text-1); }
.st-nav a.on { background:var(--bg-3); color:var(--text-0); box-shadow:inset 2px 0 0 var(--edge); }
.st-nav-st { margin-left:auto; font-size:8.5px; }

.st-sec { margin:0 0 14px; display:flex; align-items:baseline; gap:10px; }
.st-sec + .st-card { margin-top:0; }
.st-sec:not(:first-child) { margin-top:26px; }
.st-kick { width:18px; height:3px; border-radius:2px; align-self:center; flex:none; }
.st-sec h2 { font-size:15px; font-weight:600; color:var(--text-0); }
.st-sec .st-meta { font-size:11.5px; color:var(--text-3); }

.st-card { background:var(--bg-2); border:1px solid var(--border); border-radius:var(--r);
  padding:16px 18px; margin-bottom:16px; scroll-margin-top:76px; }
.st-chead { display:flex; align-items:center; gap:10px; margin-bottom:4px; }
.st-chead h3 { font-size:13.5px; color:var(--text-0); font-weight:600; }
.st-chead .st-right { margin-left:auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.st-desc { font-size:12px; color:var(--text-3); margin-bottom:12px; line-height:1.55; }
.st-sub { font-family:'JetBrains Mono',monospace; font-size:10px; font-weight:600; letter-spacing:.08em;
  text-transform:uppercase; color:var(--text-2); margin:14px 0 8px; display:flex; gap:10px;
  align-items:baseline; flex-wrap:wrap; }
/* Hjelpetekst i en sub-header skal IKKE arve mono/caps/letter-spacing. */
.st-sub .st-u { text-transform:none; letter-spacing:normal;
  font-family:'IBM Plex Sans',system-ui,sans-serif; font-weight:400; }

.st-chip { font-family:'JetBrains Mono',monospace; font-size:10.5px; font-weight:600;
  border-radius:6px; padding:2px 8px; white-space:nowrap; display:inline-block; }
.st-chip.g { background:var(--green-soft); color:var(--green); }
.st-chip.r { background:var(--red-soft); color:var(--red); }
.st-chip.a { background:var(--amber-soft); color:var(--amber); }
.st-chip.b { background:var(--blue-soft); color:var(--blue-tekst); }
.st-chip.p { background:var(--purple-soft); color:var(--purple); }
.st-chip.n { background:var(--bg-3); color:var(--text-2); }

/* Mockup 06 bruker et FAST 4-kolonners felt-grid — feltene skal ikke strekke seg
   til full kortbredde når raden har færre enn fire felter (auto-fit gjorde nettopp
   det: ett felt = ett 1140 px bredt input). */
.st-frow { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px 14px; }
@media (max-width:1100px) { .st-frow { grid-template-columns:repeat(2,minmax(0,1fr)); } }
.st-field { display:flex; flex-direction:column; min-width:0; }
.st-field > label { display:block; font-family:'JetBrains Mono',monospace; font-size:10px;
  font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--text-2); margin-bottom:5px; }
.st-field > input, .st-field > select { width:100%; background:var(--bg-1); border:1px solid var(--border-2);
  border-radius:var(--r-k); color:var(--text-0); font-family:'JetBrains Mono',monospace; font-size:13px; padding:7px 10px; }
.st-field > input:focus, .st-field > select:focus { outline:none; border-color:var(--blue); }
.st-field .st-u { margin-top:4px; }
.st-u { font-size:10.5px; color:var(--text-3); line-height:1.5; }
.st-u strong { color:var(--text-0); font-family:'JetBrains Mono',monospace; }
.st-block { margin:8px 0 2px; }
.st-grow { grid-column:span 2; }

.st-btn { display:inline-block; font-size:12.5px; font-weight:600; border-radius:var(--r-k); padding:8px 14px;
  text-decoration:none; border:1px solid var(--border-2); color:var(--text-1); cursor:pointer; background:none; }
.st-btn.pri { background:var(--edge); border-color:var(--edge); color:var(--on-accent); }
.st-btn.pri:hover:not(:disabled) { filter:brightness(1.08); }
.st-btn:disabled { opacity:.45; cursor:not-allowed; }
.st-savebar { display:flex; align-items:center; gap:12px; margin-top:14px; padding-top:12px;
  border-top:1px solid var(--border); flex-wrap:wrap; }
.st-status { font-size:11.5px; color:var(--text-3); }
.st-status.st-good { color:var(--green); }
.st-status.st-bad { color:var(--red); font-weight:600; }
.st-cancel { margin-left:auto; font-size:12px; color:var(--text-3); text-decoration:none; }
.st-cancel:hover { color:var(--text-1); text-decoration:underline; }

/* Add-skjema: flex (ikke grid) så knappen beholder sin egen bredde og feltene deler
   resten — grid ga en «+ Legg til»-knapp på egen linje og en full-bredde «+ Opprett liste». */
.st-addform { display:flex; flex-wrap:wrap; gap:10px; align-items:flex-end;
  margin-bottom:14px; padding-bottom:14px; border-bottom:1px solid var(--border); }
.st-addform .st-field { flex:1 1 150px; }
.st-addform .st-field.st-grow { flex:2 1 220px; }
.st-addform .st-btn { flex:0 0 auto; height:34px; padding:0 16px; }

.st-table .st-grouprow td { background:var(--bg-3); font-family:'JetBrains Mono',monospace; font-size:10px;
  letter-spacing:.08em; color:var(--text-2); text-transform:uppercase; padding:5px 10px; }
.st-table tbody tr:hover td { background:var(--bg-3); }
.st-table tbody .st-grouprow:hover td { background:var(--bg-3); }

.st-ghost { font-size:11px; color:var(--text-3); border:1px solid var(--border); border-radius:6px;
  padding:2px 9px; background:none; cursor:pointer; font-family:inherit; }
.st-ghost:hover { color:var(--text-1); border-color:var(--border-2); }
.st-ghost-del:hover { color:var(--red); border-color:var(--red); }

/* Baker Hughes-kortet: flyttet UENDRET hit fra <style>-blokken i innstillinger.html
   (samme regler, minus #bh-kort .card-header som er erstattet av .st-chead). */
.bh-bellform { display:inline; }
.bh-bell { background:var(--bg-2); border:1px solid var(--border); border-radius:var(--r-k);
  cursor:pointer; font-size:12.5px; padding:5px 10px; color:var(--text-1); white-space:nowrap; }
.bh-bell.on { border-color:var(--blue); color:var(--text-0); }
.bh-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:14px; margin-top:6px; }
.bh-region { background:var(--bg-1); border:1px solid var(--border); border-radius:var(--r); padding:12px 14px; }
.bh-region-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; flex-wrap:wrap; }
.bh-region-name { font-weight:600; color:var(--text-0); font-size:13.5px; }
.bh-snap { font-size:12.5px; color:var(--text-1); }
.bh-stale { color:var(--red); font-weight:600; }
.bh-region-sub { font-size:11.5px; margin:3px 0 9px; }
.bh-form { display:flex; flex-direction:column; gap:8px; }
.bh-file { font-size:12px; color:var(--text-2); }
.bh-submit { align-self:flex-start; }

@media (max-width:1000px) {
  .st-layout { grid-template-columns:1fr; }
  .st-nav { position:static; display:flex; flex-wrap:wrap; gap:4px; }
  .st-navgrp { width:100%; margin:8px 0 2px; }
  .st-nav-st { margin-left:6px; }
}
/* D7 END ─────────────────────────────────────────────────────────────────── */

/* ═══════════════════════════════════════════════════════════════════════════
   D8 — FLATE-HARMONISERING (2026-07-12) · fasit: mockup 04/05
   ETT seksjonsheader-språk for hele verktøyet + felles kort-anatomi på de
   flatene som ennå ikke hadde den (Varsler, Nyheter, Posisjoner, Risiko,
   Journal, Papirbot, Kairk AI, Brukere) + kollaps-caret HELT TIL HØYRE.
   Rent additivt: ingen eksisterende regel er endret utenfor .collapse-chevron
   (som MÅTTE flytte for pkt 16). Ingen app.py-/motor-/schema-endring.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 1 · Seksjonsheader (ikke-kollapsbar gruppering av kort) ────────────────
   Samme anatomi som D7s .st-sec: kick-strek i seksjonens temafarge + tittel +
   meta til høyre. Brukes til å gruppere kort på en side (Varsler: Regler /
   Aktivitet / Levering · Journal: Statistikk / Logg …). */
.dv-sec { display:flex; align-items:center; gap:10px; margin:26px 0 12px; }
.dv-sec:first-child { margin-top:4px; }
.dv-sec .dv-kick { width:18px; height:3px; border-radius:2px; flex:none;
  background:var(--edge); }
.dv-sec h2 { font-size:15px; font-weight:600; color:var(--text-0); margin:0; }
.dv-sec .dv-meta { font-family:'JetBrains Mono',monospace; font-size:10.5px; font-weight:600;
  letter-spacing:.09em; text-transform:uppercase; color:var(--text-3); margin-left:auto; }

/* ── 2 · Kick-strek i KORT-headere (samme språk som seksjonsheaderne) ───────
   `.sec-kick` fantes fra før i cockpit.css, men KUN som `.card-title-row > .sec-kick`
   (Detalj). Her generaliseres den til alle kort-/kpi-/AI-headere. Elementet er et
   TOMT span → header.textContent (og dermed collapse.js' localStorage-nøkkel) er
   uendret. */
.card-header .sec-kick, .kpi-section-title .sec-kick, .claude-header .sec-kick {
  width:18px; height:3px; border-radius:2px; flex:none; align-self:center;
  background:var(--edge); display:inline-block; }
/* I .card-title-row (flex) gir `gap` avstanden. Ligger kick-streken INNE i en <h3>
   eller i en ren tekst-header (.kpi-section-title), er den et inline-element uten gap
   → egen margin, ellers klistrer den seg til teksten. */
h3 > .sec-kick, .kpi-section-title > .sec-kick { margin-right:8px; vertical-align:middle; }
.claude-header .sec-kick { margin-right:2px; }

/* ── 3 · Nøytrale chips (kontekst) vs. retnings-chips ───────────────────────
   Chips-grammatikk: grønn/rød er RESERVERT for retning og regelbrudd. Alt som
   bare er kontekst (kanal, gjentakelse, rolle, status) bruker .dv-chip (nøytral)
   eller .dv-chip.b (blå = informasjon). */
.dv-chip { display:inline-flex; align-items:center; gap:5px; font-family:'JetBrains Mono',monospace;
  font-size:10px; font-weight:600; letter-spacing:.05em; border-radius:6px; padding:2px 7px;
  white-space:nowrap; background:var(--bg-3); color:var(--text-2); border:1px solid var(--border-2); }
.dv-chip.b { background:var(--blue-soft); color:var(--blue-tekst); border-color:transparent; }
.dv-chip.a { background:var(--amber-soft); color:var(--amber); border-color:transparent; }
/* retning / regelbrudd — de ENESTE grønn/røde chipsene */
.dv-chip.g { background:var(--green-soft); color:var(--green); border-color:transparent; }
.dv-chip.r { background:var(--red-soft); color:var(--red); border-color:transparent; }
/* D8 END ─────────────────────────────────────────────────────────────────── */

/* ── 4 · Risiko: lesnings-linje + tick-merker på sliderne (D8 pkt 9) ────────
   Lesnings-linja er ÉN deterministisk setning bygget av de samme tallene som
   netto-tabellen under viser (risiko.js). Tick-merkene er rent visuelle. */
.rk-read { background:var(--bg-0); border:1px solid var(--border-2); border-left:3px solid var(--edge);
  border-radius:8px; padding:10px 13px; margin:0 0 12px; font-size:13px; color:var(--text-1);
  line-height:1.5; }
.rk-read b { font-family:'JetBrains Mono',monospace; font-weight:700; color:var(--text-0); }
.rk-read b.pos { color:var(--green); }
.rk-read b.neg { color:var(--red); }

.rk-slider { position:relative; }
.rk-ticks { position:relative; display:block; height:16px; margin:2px 2px 0; pointer-events:none; }
.rk-ticks i { position:absolute; transform:translateX(-50%); display:flex; flex-direction:column;
  align-items:center; font-style:normal; }
.rk-ticks i b { width:1px; height:4px; background:var(--border-2); display:block; }
.rk-ticks i em { font-family:'JetBrains Mono',monospace; font-size:9px; font-style:normal;
  color:var(--text-3); margin-top:1px; }

/* ── 5 · Papirbot: equity-kurve i lightweight-charts (D8 pkt 11) ────────────
   Samme geometri/mønster som Journal-grafen (.jr-chart). */
.bot-chart { width:100%; height:300px; }
.bot-cross { color:var(--orange); margin-left:auto; }

/* ── 6 · Kairk AI: sorterbar «Materiell 30d» (D8 pkt 12) ────────────────────*/
.ai-th { user-select:none; white-space:nowrap; }
.ai-th:hover { color:var(--text-1); }
.ai-arrow { font-size:8px; color:var(--edge); margin-left:2px; }

/* ── 7 · Brukere: mørk tabellstil som resten (D8 pkt 13) ────────────────────
   .bru-table arver nå .admin-table (mørk, ingen lys stripe). Regler under
   gjenoppretter kun det bru-spesifikke (kompakte handlingsknapper). */
.admin-table.bru-table td { padding:10px 12px; font-size:13px; }
.admin-table.bru-table .bru-actions { display:flex; gap:10px; flex-wrap:wrap; }
.admin-table.bru-table tr.bru-inactive { opacity:.5; }
/* D8 END (del 2) ─────────────────────────────────────────────────────────── */


/* ══════════════════════════════════════════════════════════════════════════
   KT — VISUELL STANDARD (2026-08-03)                       [terminal.css-del]
   Alle tall er MAALT paa kjoerende dashbord 03.08 med getComputedStyle paa
   hvert element, ogsaa display:none. Ingen nye tokens.

   Blokka gjoer to ting:
     1) retter kontrollgrunnlaget (skriftarv, tastaturfokus, .period-btn)
     2) retargeter EKSISTERENDE klasser til standarden, saa ingen markup
        maa roeres i denne leveransen.
   Fane-restrukturering av Makro/Varsler krever DOM-endring og ligger i
   neste leveranse.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── A · Skriftarv paa skjemakontroller ────────────────────────────────────
   MAALT: 159 av 458 knapper rendret i Arial. <button> arver IKKE font fra
   body; UA-regelen font:400 13.333px Arial vinner over alt som ikke setter
   font-family selv. Utslag: .st-btn 32,5px (Arial) mot .vk-btn 36,8px (Plex)
   — identiske deklarasjoner, 4,3px fra hverandre paa skjermen.
   Element-nivaa, saa enhver klasse som SETTER font-family fortsatt vinner. */
button, input, select, textarea, optgroup { font-family: inherit; }

/* ── B · Tastaturfokus — EN regel for hele plattformen ─────────────────────
   MAALT: 2 :focus-visible-regler i ~2000, mot 669 tabbare elementer paa
   Innstillinger alene. 23 outline:none dreper nettleserens egen ring, og de
   100+ hjelpeprikkene er tabindex=0 med outline:none.
   🔴 outline er !important med vilje: en regel som «maa huskes» ble brutt tre
   ganger i tema-laget. outline paavirker ikke layout, saa !important har
   ingen geometrisk bivirkning. */
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible,
textarea:focus-visible, summary:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--blue) !important; outline-offset: 2px; }

/* Nakne felt inne i en ramme-wrapper: ringen hoerer til wrapperen. */
.search input:focus-visible, .ms-input:focus-visible, .al-search input:focus-visible,
.ss-input:focus-visible, .nv-chipbox input:focus-visible, .nf-search input:focus-visible,
.ck-pal-in input:focus-visible { outline: none !important; }
.search:focus-within, .ms-control:focus-within, .al-search:focus-within,
.ss-control:focus-within, .nv-chipbox:focus-within, .nf-search:focus-within {
  border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-soft); }

/* Felt som allerede bytter rammefarge paa :focus faar gloeden i tillegg.
   Moensteret finnes fra foer paa .ord-search — bare aldri gjenbrukt. */
.set-field input:focus, .set-w:focus, .pos-select:focus, .pos-input:focus,
.pos-exit-input:focus, .al-select:focus, .al-grid .set-field input:focus,
.wl-name:focus, .ov-search:focus, .st-field > input:focus, .st-field > select:focus,
.login-input:focus, .bru-inp:focus, .pk-cash-input:focus {
  box-shadow: 0 0 0 3px var(--blue-soft); }

/* ── C · .period-btn (Sammenlign) ──────────────────────────────────────────
   MAALT: hadde INGEN CSS noe sted. JS setter .active og lagrer valget i
   kairk.cmp.<user>, men ingenting vises. Samme geometri som filterchipene. */
.period-bar { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 14px; }
.period-btn { font-family: var(--sans); font-size: 12px; font-weight: 600; line-height: 1;
  height: 28px; padding: 0 11px; display: inline-flex; align-items: center;
  background: var(--bg-2); border: 1px solid var(--border-2); color: var(--text-2);
  border-radius: var(--r-k); cursor: pointer; white-space: nowrap;
  transition: background .12s, color .12s, border-color .12s; }
.period-btn:hover { background: var(--bg-3); color: var(--text-1); }
.period-btn.active { background: var(--blue-soft); color: var(--blue-tekst); border-color: var(--blue); }

/* ── D · Typografi-skala ───────────────────────────────────────────────────
   MAALT: 27 fontstoerrelser over tre sider. Seksjonstittel og korttittel var
   BEGGE 15px paa Detalj og invertert paa Varsler (14,5 mot 15) — kortet ropte
   hoeyere enn seksjonen det ligger i. Skalaen snur det: seksjon 15, kort 13,5.
   Begge verdiene fantes allerede (.st-sec h2 / .st-chead h3). */
.card-title-row h3, .vk-nv-head h3, .card-header > h3:not([class]) { font-size: 13.5px; }
.empty-state h4 { font-size: 13.5px; }

/* Etiketter: MAALT 8 stoerrelser (9 / 9,5 / 10 / 10,5 / 11 / 11,5 / 12 / 13).
   D1-kanon er 10,5 mono/600/.09em — den var i mindretall med 43 av 281. */
.kpi-label, .rk-kpi-label, .pmetric .pm-l, .pk-label, .st-field > label,
.nv-colh, .set-col-h, .port-title, .lv-head, .ins-sec-h, .sm-k {
  font-family: 'JetBrains Mono', monospace; font-size: 10.5px; font-weight: 600;
  letter-spacing: .09em; text-transform: uppercase; color: var(--text-3); }

/* Tallverdier: MAALT 9 stoerrelser (15 / 15,5 / 19 / 20 / 21 / 24 / 25 / 30 / 34).
   Tre trinn: 19 KPI-rutenett · 24 fremhevet enkelttall · 34 hero. */
.kpi-value, .rk-kpi-value { font-size: 19px; }
.pmetric .pm-v, .nf-mc-v { font-size: 24px; }
.price { font-size: 34px; }

/* ── E · Flater: EN radius ─────────────────────────────────────────────────
   MAALT: 5 flate-radier (5 / 6 / 8 / 11 / 50). --r-o (8px) skal vaere
   forbeholdt OVERLAY — det som svever over siden. 29 vanlige kort brukte den
   ogsaa, og da baerer radiusen ikke informasjon lenger.
   Overlays som BEHOLDER 8px: .ck-palette, .help .tip, .ms-dropdown,
   .ss-dropdown, .wl-menu, .layout-edit-tip. */
.ref-view-note, .joblog, .set-banner, .al-scroll, .edge-badge, .ref-badge,
.pat-card, .pk, .port-donut, .q-row, .bru-notice, .bru-error, .login-error,
.nv-existing:not([hidden]), .nv-chipbox, .pos-edge, .osc-seg,
#detChartCard.chart-max, .cluster-note, .rk-warn, .jr-hint, .brief-ovn,
.claude-stat, .panel-ctl, .alert-item { border-radius: var(--r); }

/* ── F · Chips: EN radius ──────────────────────────────────────────────────
   MAALT: 8 chip-radier (0 / 4 / 5 / 6 / 7 / 9 / 12 / 14 / 20) paa 279 chips.
   200 av dem laa allerede paa 6. Pillene (20px) er et BEVISST unntak — full
   avrunding signaliserer en TILSTAND, ikke en etikett. */
.chip, .setup-chip, .ck-mode-chip, .mat-pill, .ref-chip, .r-chip, .dv-chip,
.corr-pill, .confl-pill, .wl-count, .nv-exist-chip, .nv-pill, .edge-chip,
.dom-pill, .makro-rel-chip { border-radius: var(--r); }

/* ── G · Destruktive handlinger: roed i HVILETILSTAND ──────────────────────
   MAALT: .al-btn og .al-btn.danger er pikselidentiske i hvile — begge
   color rgb(165,176,191) og border rgb(42,44,49). «Slett» ser ut som «Pause»
   til musepekeren treffer. KaiRKs valg 03.08: roed foer hover.
   38 % opasitet paa rammen, ikke fylt — raden skal fortsatt lese rolig. */
.al-btn.danger, .st-ghost-del, .bru-btn-danger, .wl-del, .bulk-del-btn,
.pos-kanseller {
  color: var(--red);
  border-color: color-mix(in srgb, var(--red) 38%, transparent);
  background: transparent; }
.al-btn.danger:hover, .st-ghost-del:hover, .bru-btn-danger:hover, .wl-del:hover,
.bulk-del-btn:hover, .pos-kanseller:hover {
  background: var(--red-soft); border-color: var(--red); color: var(--red); }

/* ── H · Oransje frigjoeres ────────────────────────────────────────────────
   MAALT paa Posisjoner: «Sett stop», «Lukk hele» og «Importer fra CMC» har
   ALLE rgba(255,194,74,.14) — tre betydninger i samme farge. Samtidig er
   «Slett valgte» roed. Destruktiv-signalet var altsaa roedt paa en side og
   oransje paa den neste. Oransje reserveres til varsling og favoritt. */
.pos-set-stop, .pos-endre { background: var(--bg-3); border-color: var(--border-2); color: var(--text-1); }
.pos-lukk-alle { background: transparent; color: var(--red);
  border-color: color-mix(in srgb, var(--red) 38%, transparent); }
.pos-lukk-alle:hover { background: var(--red-soft); border-color: var(--red); }

/* ── I · .st-kick faar default-farge ───────────────────────────────────────
   MAALT: markoerene paa Innstillinger og Makro har INGEN farge i CSS — den
   settes inline paa hvert bruksted. Glemmer noen inline-stilen paa en ny
   seksjon, blir markoeren usynlig og ingenting varsler om det. */
.st-kick { background: var(--edge); }

/* ── J · Filterchip-geometri ───────────────────────────────────────────────
   .filt laa paa 6px (flate-radius) i stedet for --r-k (kontroll-radius), og
   28px hoeyde gjoer at den flukter med knappene. */
.filt { border-radius: var(--r-k); height: 28px; padding: 0 11px;
  display: inline-flex; align-items: center; line-height: 1; }
.wl-tabs .filt { border-radius: var(--r-k) var(--r-k) 0 0; }


/* ── K · Etterslep funnet ved runtime-verifisering 03.08 ───────────────────
   Maalt etter foerste injeksjon paa /detaljer/BORR: disse laa fortsatt utenfor
   skalaen. .card-title/.kpi-section-title stod paa 11px fra D1 — 0,5px unna
   kanon, usynlig hver for seg, men det gjoer regelen usann.
   🔴 Bevisst IKKE roert: mikro-etiketter inne i graf og struct-grid
   (.dv-figraf 9px, .sr/.src 9,5px, .dv-ovg-l 9px). De er en tetthetsbeslutning
   i et datatett rutenett, ikke et etikett-nivaa. */
.card-title, .kpi-section-title { font-size: 10.5px; }
.struct-grid .k, .cat-imp { font-size: 10.5px; letter-spacing: .09em; }
.ov-chip { border-radius: var(--r); }

/* KT END ─────────────────────────────────────────────────────────────────── */

/* --- L * Tooltip-prosa arver ikke label-typografi ---
   Tooltip-markupen ligger inni labelen (.pm-l > .help > .tip > .tip-why),
   saa brodteksten arvet mono + versaler + sperring. Dette var en
   eksisterende feil paa live foer KT-blokken; maalt 03.08 paa Journal,
   Risiko, Posisjoner og Papirbot. Nullstiller prosaen tilbake til sans. */
.help, .help *, .tip, .tip * {
  font-family: var(--sans);
  letter-spacing: normal;
  text-transform: none;
}

/* --- M * KONTROLLHOYDER: TRE FASTE NIVAAER (Leveranse 2, 2026-08-03) -------
   Malt 03.08 paa deployet Leveranse 1: TOLV forskjellige knappehoyder over 135
   knapper. Verste tilfelle er .vk-btn 36,8 mot .st-btn 34,5 med IDENTISK
   deklarert padding og font-size — hele forskjellen kommer fra line-height
   (font:inherit gir 1.5, bar font-size gir normal ~1.32). Det var restpunktet
   som ble flagget i Leveranse 1.

   EN felles .kt-btn ville vaert feil: 34px paa .pos-act-btn inne i tette
   posisjonsrader eller paa chart-chipsene ville sprengt begge. Knappene faller
   i tre naturlige nivaaer, og de laases her:

     34px  primaer / skjema   (34 er ikke valgt fritt — .st-addform .st-btn
                               hadde allerede height:34px)
     28px  standard           (samme hoyde som .filt og .period-btn fikk i
                               Leveranse 1 — plattformens kontrollhoyde)
     24px  kompakt            (tabellrader, chart-kontroller)

   height + line-height:1 + align-items:center gjor hoyden DETERMINISTISK,
   uavhengig av fontmetrikk. Det er nettopp det som mangler i dag.
   .vk-btn og .gk-btn er deklarert inline i varsler.html/godkjenning.html og
   maa settes DER — inline style vinner over denne fila. */
.kt-btn-l, .st-btn, .es-btn, .bru-btn {
  height: 34px; padding: 0 14px;
  display: inline-flex; align-items: center; justify-content: center;
  line-height: 1; box-sizing: border-box; white-space: nowrap;
}
.kt-btn, .al-btn, .btn-link {
  height: 28px; padding: 0 12px;
  display: inline-flex; align-items: center; justify-content: center;
  line-height: 1; box-sizing: border-box; white-space: nowrap;
}
.kt-btn-s, .pos-act-btn, .suggest-btn, .chart-icon-btn, .rsi-per-btn {
  height: 24px; padding: 0 9px;
  display: inline-flex; align-items: center; justify-content: center;
  line-height: 1; box-sizing: border-box; white-space: nowrap;
}
/* Kontekst-overstyringer som fantes fra for og fortsatt skal gjelde. */
.st-addform .st-btn { height: 34px; padding: 0 16px; }
.wl-rowactions .btn-link { height: 24px; padding: 0 9px; font-size: 12px; }
