/* Qontera designsystem - samma identitet som qontera.se (web/public/styles.css).
   Palett: paper/ink/mint/grön. Rubriker i Fraunces, brödtext i systemets sans. */
:root{
  --bg:#f7f3ea;--bg-2:#efe8da;--fg:#0e1a16;--ink-2:#2a3a34;--muted:#5f6d67;
  --card:#ffffff;--line:#e3dccd;
  /* --line är en DEKORATIV linje (avdelare, tabellrader) och får vara ljus. Kanten på en
     kontroll är något annat: när inget annat markerar var fältet börjar kräver WCAG 1.4.11
     3:1 mot bakgrunden, och --line ger 1,37:1 mot vitt. Egen, mörkare variabel för kontroller -
     avdelarna påverkas inte. #8f8571 mot #fff = 3,64:1, mot --bg = 3,29:1. */
  --line-falt:#8f8571;
  /* Ljus palett med hårdkodade färger: utan color-scheme inverterar webbläsarens automatiska
     mörkläggning bakgrunderna men inte texten som redan är ljus. */
  color-scheme:light;
  --accent:#0f6b4f;--accent-2:#0b5640;--accent-fg:#ffffff;--accent-soft:#e2f2e9;
  --mint:#cfeedd;--mint-2:#9fdcbc;--lime:#dff5a6;
  --warn:#9c5f17;--warn-soft:#faf0e1;--ask:#1b4d6b;--ask-soft:#eaf0f4;
  --err:#8c2f2f;--err-soft:#f8ecec;
  --radius:16px;--radius-s:10px;--maxw:980px;
  --display:"Fraunces",Georgia,"Times New Roman",serif;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --shadow:0 18px 50px -24px rgba(14,26,22,.35);
  --shadow-s:0 8px 22px -18px rgba(14,26,22,.3);
  /* Topprutan är genomskinlig med suddig botten. Färgen kan därför inte vara en literal:
     i mörkt läge hade ljus text hamnat på ljus botten, och axe-core mätte precis det. */
  --topp:rgba(247,243,234,.9);--topp-kant:rgba(227,220,205,.75);
  --overlagg:rgba(20,22,26,.38);--falt-botten:#ffffff;
}

/* ---- mörkt läge (WP 8.6) ----------------------------------------------------------------
   Tre lägen, inte två. En användare som INTE valt något stämplar ingenting på <html>, och då
   är `prefers-color-scheme` det enda som skiljer ljust från mörkt. Därför:

   - bara `:root` bär den fullständiga ljusa paletten,
   - mediefrågan skriver om BARA färgtokens, spärrad med :not([data-theme="light"]) så att ett
     uttalat ljust val vinner över ett mörkt operativsystem,
   - [data-theme="dark"] skriver om samma tokens igen så att valet vinner åt andra hållet.

   Ingen färg får sin ENDA definition inne i ett av blocken nedan. Gör den det försvinner den
   i det oplockade läget, och sidan renderar ena lägets text på det andras botten. Det är den
   klassiska buggen, och `tests/test_morkt_lage.py` faller på den.

   Kontrasterna är räknade mot WCAG 1.4.3 (4,5:1 för text, 3:1 för kontrollkanter):
   #e8e5df mot #14181b = 13,9:1 · #a9b4ae mot #14181b = 7,4:1 · #6ec49b mot #1a1f22 = 7,0:1 ·
   #8f9a94 mot #1a1f22 = 5,4:1 (kontrollkant, kravet är 3:1). */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme:dark;
    --bg:#14181b;--bg-2:#1a1f22;--fg:#e8e5df;--ink-2:#c3ccc7;--muted:#a9b4ae;
    --card:#1a1f22;--line:#2d3438;--line-falt:#8f9a94;
    --accent:#6ec49b;--accent-2:#8ddab4;--accent-fg:#0e1a16;--accent-soft:#1f3730;
    --mint:#22453a;--mint-2:#2d5a49;--lime:#3a4a20;
    --warn:#e0a95e;--warn-soft:#33291a;--ask:#7fb6d6;--ask-soft:#1c2b34;
    --err:#e88b8b;--err-soft:#33201f;
    --shadow:0 18px 50px -24px rgba(0,0,0,.6);
    --shadow-s:0 8px 22px -18px rgba(0,0,0,.55);
    --topp:rgba(20,24,27,.92);--topp-kant:rgba(45,52,56,.8);
    --overlagg:rgba(0,0,0,.55);--falt-botten:#1f2528;
  }
}
:root[data-theme="dark"] {
  color-scheme:dark;
  --bg:#14181b;--bg-2:#1a1f22;--fg:#e8e5df;--ink-2:#c3ccc7;--muted:#a9b4ae;
  --card:#1a1f22;--line:#2d3438;--line-falt:#8f9a94;
  --accent:#6ec49b;--accent-2:#8ddab4;--accent-fg:#0e1a16;--accent-soft:#1f3730;
  --mint:#22453a;--mint-2:#2d5a49;--lime:#3a4a20;
  --warn:#e0a95e;--warn-soft:#33291a;--ask:#7fb6d6;--ask-soft:#1c2b34;
  --err:#e88b8b;--err-soft:#33201f;
  --shadow:0 18px 50px -24px rgba(0,0,0,.6);
  --shadow-s:0 8px 22px -18px rgba(0,0,0,.55);
    --topp:rgba(20,24,27,.92);--topp-kant:rgba(45,52,56,.8);
    --overlagg:rgba(0,0,0,.55);--falt-botten:#1f2528;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--fg);font:400 17px/1.55 var(--sans)}
a{color:inherit}
a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:6px}
.skip{position:absolute;left:-9999px;top:8px;background:var(--fg);color:var(--bg);padding:.5rem 1rem;border-radius:8px;z-index:30;text-decoration:none}
.skip:focus{left:8px}

/* ---- topp och navigation ---- */
.top{position:sticky;top:0;z-index:10;background:var(--topp);backdrop-filter:saturate(140%) blur(10px);-webkit-backdrop-filter:saturate(140%) blur(10px);border-bottom:1px solid var(--topp-kant)}
.top-in{max-width:var(--maxw);margin:0 auto;padding:0 1.25rem;display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:64px}
.logo{font-family:var(--display);font-weight:600;font-size:1.4rem;letter-spacing:-.01em;text-decoration:none;display:inline-flex;align-items:center}
.logo-q{display:inline-grid;place-items:center;width:1.5em;height:1.5em;margin-right:.3rem;border-radius:50%;background:var(--accent);color:var(--accent-fg);font-size:.8em;line-height:1;font-weight:700;font-family:var(--sans)}
.nav-main{display:flex;gap:1.25rem;align-items:center;flex-wrap:wrap}
.nav-main>a,.nav-main summary,.nav-main button{color:var(--ink-2);text-decoration:none;font-weight:500;font-size:.97rem;background:none;border:0;font-family:var(--sans);cursor:pointer;padding:0;line-height:1.3}
.nav-main>a:hover,.nav-main summary:hover,.nav-main>form button:hover{color:var(--fg)}
.menu{position:relative}
.menu>summary{list-style:none;display:inline-flex;align-items:center;gap:.4rem;padding:.3rem 0}
.menu>summary::-webkit-details-marker{display:none}
.menu>summary::after{content:"";width:.42em;height:.42em;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;transform:rotate(45deg);margin-top:-.3em;transition:transform .15s}
.menu[open]>summary::after{transform:rotate(225deg);margin-top:.15em}
.panel{position:absolute;top:calc(100% + .55rem);left:50%;transform:translateX(-50%);background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:.45rem;display:grid;gap:.1rem;min-width:12.5rem;z-index:20}
.nav-main details:last-of-type .panel{left:auto;right:-.5rem;transform:none}
.panel a{display:block;padding:.55rem .8rem;border-radius:8px;text-decoration:none;font-weight:500;color:var(--fg);white-space:nowrap}
.panel a:hover{background:var(--accent-soft)}
.panel-label{display:block;padding:.7rem .8rem .15rem;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.panel form{margin:0}
.panel button{display:block;width:100%;text-align:left;padding:.55rem .8rem;border-radius:8px;background:none;border:0;font:inherit;font-weight:500;color:var(--fg);cursor:pointer}
.panel button:hover{background:var(--accent-soft)}
.panel hr{border:0;border-top:1px solid var(--line);margin:.35rem .5rem}
.nav-mobile{display:none;position:relative}
.nav-mobile>summary{list-style:none;display:inline-flex;align-items:center;gap:.45rem;min-height:44px;padding:.45rem 1rem;border:1.5px solid var(--line-falt);border-radius:999px;background:var(--card);font-weight:600;font-size:.95rem;cursor:pointer}
.nav-mobile>summary::-webkit-details-marker{display:none}
.nav-mobile>summary svg{width:1rem;height:1rem}
.nav-mobile .panel{left:auto;right:0;transform:none;width:min(19rem,88vw);max-height:min(70vh,30rem);overflow:auto}
@media (max-width:840px){.nav-main{display:none}.nav-mobile{display:block}}
/* ---- kommandopaletten (WP 8.5) ---- */
.palett-knapp{display:inline-flex;align-items:center;gap:.4rem;min-height:32px}
.palett-tips{font-size:.72rem;letter-spacing:.04em;border:1px solid var(--line-falt);border-radius:6px;padding:.1rem .35rem;color:var(--ink-2)}
.palett[hidden]{display:none}
.palett{position:fixed;inset:0;background:var(--overlagg);z-index:60;display:flex;justify-content:center;align-items:flex-start;padding:8vh 1rem 1rem}
.palett-in{width:min(38rem,100%);background:var(--card);border:1.5px solid var(--line);border-radius:14px;box-shadow:0 18px 48px rgba(20,22,26,.22);overflow:hidden}
.palett-falt{width:100%;border:0;border-bottom:1.5px solid var(--line);padding:1rem 1.1rem;font:inherit;font-size:1.05rem;background:transparent;color:var(--fg)}
.palett-falt:focus{outline:2px solid var(--accent);outline-offset:-2px}
.palett-lista{max-height:min(56vh,26rem);overflow:auto}
.palett-rad{display:flex;justify-content:space-between;gap:1rem;align-items:baseline;padding:.6rem 1.1rem;text-decoration:none;color:var(--fg);border-bottom:1px solid var(--line)}
.palett-rad.vald,.palett-rad:hover{background:var(--accent-soft)}
.palett-titel{font-weight:500}
.palett-sub{font-size:.82rem;color:var(--ink-2);white-space:nowrap}
.palett-tomt,.palett-fot{margin:0;padding:.8rem 1.1rem;font-size:.85rem;color:var(--ink-2)}
.palett-fot{border-top:1px solid var(--line)}
.menygrupp{margin:.7rem 0 .15rem;font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}
.temaval button{min-height:32px}
/* ---- tillstånd som klass, inte som inline-färg (WP 8.6) ----
   De här satt tidigare som en kantfärg skriven rakt in i mallen, villkorad på data:
   gult när något närmar sig, rött när det gått för långt. En hårdkodad färg följer ingen
   palett: ljusgrönt på svart är oläsligt, och ingen palett i världen räddar den.
   Nu är de tokens, och tokens byts med läget. */
.kant-ok{border-color:var(--accent)}
.kant-varning{border-color:var(--warn)}
.kant-fel{border-color:var(--err)}
.platta{padding:.5rem .7rem;border-radius:8px}
.platta-fel{background:var(--err-soft);color:var(--err)}
.platta-fraga{background:var(--ask-soft);color:var(--ask)}
.platta-ok{background:var(--mint);color:var(--accent-2)}
.chatrad{margin:.6rem 0}
.chatbubbla{display:inline-block;max-width:85%;padding:.6rem .9rem;border-radius:12px;background:var(--bg-2);white-space:pre-wrap;text-align:left}
.chatbubbla-jag{background:var(--mint)}
.insiktsrad{margin:0;display:flex;gap:.9rem;align-items:flex-start}
.insiktsrad.last{opacity:.75}
.regelrad{display:flex;gap:.8rem;align-items:center;flex-wrap:wrap;border:1px solid var(--line);border-radius:10px;padding:.55rem .8rem}
.regelrad.avstangd{opacity:.55}
.s-mb1{margin-bottom:1rem}

/* ---- sidans stomme ---- */
.demo-strip{max-width:var(--maxw);margin:1rem auto 0;padding:0 1.25rem}
.demo-strip .flash{margin-bottom:0}
main{max-width:var(--maxw);margin:0 auto;padding:.5rem 1.25rem 4rem}
h1{font-family:var(--display);font-weight:500;font-size:clamp(1.9rem,4vw,2.6rem);line-height:1.08;letter-spacing:-.02em;margin:1.8rem 0 .9rem;font-variation-settings:"opsz" 144}
h2{font-family:var(--display);font-weight:500;font-size:1.45rem;letter-spacing:-.01em;line-height:1.15;margin:2.2rem 0 .8rem}
h3{font-size:1.02rem;font-weight:700;margin:0 0 .35rem}
.page-head h1{margin-bottom:.35rem}
.page-sub{max-width:44rem;margin:0 0 1.6rem}

/* ---- knappar ---- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.7rem 1.25rem;border-radius:999px;font-weight:600;text-decoration:none;border:1.5px solid transparent;cursor:pointer;font-family:var(--sans);font-size:1rem;min-height:44px;line-height:1.2;background:var(--mint);color:var(--fg);transition:background .2s,border-color .2s,transform .2s,box-shadow .2s}
.btn:hover{background:var(--mint-2)}
.btn-primary{background:var(--accent);color:var(--accent-fg);box-shadow:0 10px 24px -12px rgba(15,107,79,.7)}
.btn-primary:hover{background:var(--accent-2);transform:translateY(-1px)}
.btn-ghost{border-color:var(--line-falt);background:var(--card);color:var(--fg)}
.btn-ghost:hover{border-color:var(--fg);background:var(--card)}

/* ---- kort och besked ---- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.4rem 1.5rem;margin-bottom:1.1rem;box-shadow:var(--shadow-s)}
/* Kort som bär ett problem: bankens avvisade betalningar, spärrade körningar. Kanten gör
   att det syns utan att läsa - och den hör hemma här, inte i ett style-attribut (WP 8.6). */
.kort-varning{border-left:4px solid var(--err)}
.avdelare{border:none;border-top:1px solid var(--line);margin:1.1rem 0}
.radform{display:flex;gap:.8rem;align-items:end;flex-wrap:wrap}
.radform .row{margin:0}
/* En bred tabell rullar i sidled för sig - aldrig hela sidan (WP 8.6). */
.tabellruta{overflow-x:auto}
.oppnare{cursor:pointer;font-weight:600}
.ask{border-color:var(--ask);background:var(--ask-soft)}
.ask .q{font-size:1.1rem;font-weight:600;margin:0 0 .9rem}
.ask form{display:flex;gap:.6rem;flex-wrap:wrap}
.err{background:var(--err-soft);border:1px solid var(--err);color:var(--err);border-radius:var(--radius-s);padding:.75rem 1rem;margin-bottom:1rem}
.flash{background:var(--accent-soft);border:1px solid var(--accent);border-radius:var(--radius-s);padding:.75rem 1rem;margin-bottom:1rem}
.empty-state{padding:2.2rem 1.75rem;display:grid;gap:.4rem;justify-items:start}
.empty-state h2{margin:0;font-size:1.35rem}
.empty-state p{margin:0 0 .6rem;max-width:36rem;color:var(--ink-2)}

/* ---- flödet ---- */
.feed{list-style:none;margin:0;padding:0}
/* vanlig punktlista inuti ett kort - finns som klass för att mallarna inte ska
   behöva inline-stilar (innehållssäkerhetspolicyn, WP 0.3/8.6) */
.punktlista{margin:.2rem 0 0 1rem;padding:0}
/* små återkommande former som annars blir inline-stilar i varje mall
   (innehållssäkerhetspolicyn, WP 0.3/8.6) */
.inline-form{display:inline}
.toppmarginal{margin-top:.8rem}
.utan-toppmarginal{margin-top:0}
/* besked i ett kort: rött för fel, grönt för bekräftelse. Som klasser, inte
   inline-stilar - se WP 0.3 och 8.6. */
.kort-fel{border-color:var(--err)}
.kort-ok{border-color:var(--accent)}
.utan-marginal{margin:0}
.feed li{display:grid;grid-template-columns:auto 1fr;gap:1rem;padding:1.05rem 0;border-bottom:1px solid var(--line)}
.feed li:last-child{border-bottom:0}
.dot{width:.8rem;height:.8rem;border-radius:50%;margin-top:.5rem}
.dot.ok{background:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.dot.info{background:var(--warn);box-shadow:0 0 0 4px var(--warn-soft)}
.dot.ask{background:var(--ask);box-shadow:0 0 0 4px var(--ask-soft)}
.dot.muted{background:var(--muted);box-shadow:0 0 0 4px var(--bg-2)}
.label{font-size:.78rem;color:var(--muted);font-weight:700;letter-spacing:.05em;text-transform:uppercase}
.when{font-size:.85rem;color:var(--muted)}
.muted{color:var(--muted)}
.fine{font-size:.9rem;color:var(--muted)}

/* ---- nyckeltal ---- */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(9.5rem,1fr));gap:.8rem;margin:1.4rem 0 2rem}
.stats>div{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1rem 1.1rem;display:grid;gap:.2rem;align-content:start;box-shadow:var(--shadow-s)}
.stats b{white-space:nowrap;font-family:var(--display);font-weight:600;font-size:1.55rem;line-height:1.15;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.stats .fine{margin:0}

/* ---- formulär ---- */
.row{display:grid;gap:.35rem;margin-bottom:1rem}
label{font-weight:600;font-size:.95rem}
legend{font-weight:600;font-size:.95rem}
input[type=text],input[type=email],input[type=password],textarea{font:inherit;padding:.7rem .8rem;border:1.5px solid var(--line-falt);border-radius:var(--radius-s);background:var(--falt-botten);color:var(--fg);min-height:44px;width:100%}
input[type=date],input[type=number],select{font:inherit;padding:.6rem .7rem;border:1.5px solid var(--line-falt);border-radius:var(--radius-s);background:var(--falt-botten);color:var(--fg);min-height:44px}
input[type=file]{font:inherit}
/* Fält som står på rad i ett litet formulär (delbetalning, markera betald) i stället för
   i ett kolumnrutnät: de ska inte ta hela bredden. Klassen ersätter sex identiska
   style-attribut - inline-stilarna ska bli färre, inte fler (WP 8.6). */
.falt{font:inherit;padding:.5rem;border:1.5px solid var(--line-falt);border-radius:8px;background:var(--falt-botten);color:var(--fg);min-height:44px;width:auto}
.falt-smal{max-width:12rem}

/* ---- tabeller ---- */
table{border-collapse:collapse;width:100%}
th,td{text-align:left;padding:.6rem .5rem;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;vertical-align:top}
thead th{font-size:.78rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;border-bottom:1.5px solid var(--line)}
td.num,th.num{text-align:right}
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.table-scroll>table{min-width:36rem}
/* Sveparean måste gå att nå med tangentbord (WCAG 2.1.1) - annars kommer den som inte kan dra
   med musen aldrig åt kolumnerna till höger. tabindex sätts i JS på just de areor som FAKTISKT
   svämmar över, så att en tabell som får plats inte blir ett tomt tabbstopp. */
.table-scroll:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

code{font-size:1rem;background:var(--card);border:1px solid var(--line);padding:.2rem .5rem;border-radius:6px}
footer{max-width:var(--maxw);margin:0 auto;padding:2rem 1.25rem 2.6rem;color:var(--muted);font-size:.8rem;border-top:1px solid var(--line)}

/* ---- mobil ---- */
@media (max-width:700px){
  /* ALDRIG display:block på <table> - det tar bort table-rollen i Chrome och Firefox och
     kopplar loss varje <td> från sin <th>, alltså tappar skärmläsaren rad- och kolumnkoppling
     på VARJE tabell i appen på mobil. Tabellen förblir en tabell; det är omslaget som svepar
     (se .table-scroll och skriptet längst ned, som ger tabeller utan omslag ett). */
  main table{max-width:100%}
  div[style*="grid-template-columns"]{display:block!important}
  .card{padding:1.15rem 1.15rem}
  .stats{grid-template-columns:repeat(auto-fit,minmax(8.2rem,1fr))}
}
/* mycket smala skärmar: låt långa belopp i statistikkorten krympa i stället för att spilla ut */
@media (max-width:400px){
  .stats b{font-size:1.3rem}
}

/* ---- utskrift ---- */
.ask-fab{position:fixed;right:1.2rem;bottom:1.2rem;z-index:40;display:inline-flex;align-items:center;gap:.5rem;background:var(--accent);color:var(--accent-fg);padding:.7rem 1.05rem;border-radius:999px;box-shadow:0 6px 20px rgba(15,107,79,.35);font-weight:600;font-size:.95rem;text-decoration:none;transition:transform .12s,box-shadow .12s}
.ask-fab:hover{transform:translateY(-1px);box-shadow:0 8px 26px rgba(15,107,79,.45);color:var(--accent-fg)}
@media (max-width:560px){.ask-fab span{display:none}.ask-fab{padding:.85rem;border-radius:50%}}
@media print{
  .top,footer,.noprint,.demo-strip,.skip{display:none!important}
  body{background:var(--card)}
  main{max-width:none;padding:0}
  .card,.stats>div{box-shadow:none}
}
