:root{
  --ink:#0b1220; --ink2:#1c2740; --paper:#f6f7f9; --card:#ffffff; --line:#dfe3ea; --muted:#5b6578; --text:#141a26;
  --accent:#0f62fe; --accent-ink:#ffffff;
  --crit:#a2191f; --crit-bg:#fde8e9; --high:#d1440c; --high-bg:#fdeee6; --med:#a66b00; --med-bg:#fdf4dd;
  --low:#2f5f9e; --low-bg:#e8f0fb; --info:#5b6578; --info-bg:#eef0f4; --pass:#1a7f45; --pass-bg:#e5f5ec;
  --mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --sans:'IBM Plex Sans',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  --r:10px;
}
@media (prefers-color-scheme:dark){:root{
  --paper:#0d1320; --card:#141c2c; --line:#26314a; --muted:#97a3b8; --text:#e6eaf2; --ink2:#0a0f1a;
  --crit-bg:#3a1418; --high-bg:#3a2012; --med-bg:#33280c; --low-bg:#14243c; --info-bg:#1b2335; --pass-bg:#10291c;
  --crit:#ff8389; --high:#ff9a5c; --med:#f1c21b; --low:#78a9ff; --info:#a8b3c7; --pass:#42be65; --accent:#4589ff;
}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--text);font:16px/1.55 var(--sans)}
a{color:var(--accent)}
code,pre{font-family:var(--mono);font-size:.86em}
code{background:var(--info-bg);padding:.1em .35em;border-radius:4px;word-break:break-all}
h1,h2,h3{line-height:1.2;letter-spacing:-.01em}
h1{font-size:clamp(1.8rem,4.5vw,2.8rem);margin:.2em 0 .4em}
h2{font-size:1.35rem;margin:0 0 .6em}
h3{font-size:1.05rem;margin:0 0 .4em}
.wrap{max-width:1120px;margin:0 auto;padding:0 20px}
.narrow{max-width:820px;padding-top:40px;padding-bottom:60px}
.muted{color:var(--muted)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.eyebrow{font:600 .78rem/1 var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--accent);margin:0}
.error{color:var(--crit)} .okmsg{color:var(--pass);font-weight:600}
.mt{margin-top:24px}

/* Header / footer */
.top{background:var(--ink);color:#fff;position:sticky;top:0;z-index:5}
.top-in{display:flex;align-items:center;justify-content:space-between;gap:16px;height:60px}
.logo{color:#fff;text-decoration:none;font-weight:700;white-space:nowrap}
.logo-mark{color:#4589ff}
.logo-sub{font:400 .78rem var(--mono);color:#8d9ab0;margin-left:6px}
.nav{display:flex;gap:18px;align-items:center}
.nav a{color:#c9d2e3;text-decoration:none;font-size:.95rem}
.nav a:hover{color:#fff}
.nav-cta{border:1px solid #3d4b66;padding:6px 12px;border-radius:6px}
.foot{border-top:1px solid var(--line);margin-top:60px;padding:28px 0;color:var(--muted);font-size:.9rem}
.foot-in{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
.foot a{color:var(--muted)}
@media (max-width:720px){.logo-sub,.nav a:not(.nav-cta){display:none}}

/* Hero */
.hero{background:linear-gradient(180deg,var(--ink) 0%,var(--ink2) 100%);color:#fff;padding:64px 0 72px}
.hero .eyebrow{color:#78a9ff}
.hero h1{max-width:20ch}
.lead{font-size:1.12rem;color:#c9d2e3;max-width:62ch}
.scan{display:flex;align-items:stretch;max-width:640px;margin-top:28px;background:#fff;border-radius:var(--r);overflow:hidden;box-shadow:0 10px 40px rgba(0,0,0,.35)}
.scan-prefix{display:flex;align-items:center;padding:0 0 0 16px;color:#8a94a6;font-family:var(--mono)}
.scan input{flex:1;min-width:0;border:0;padding:18px 10px;font:500 1.1rem var(--mono);color:#0b1220;outline:none;background:#fff}
.scan button{border:0;background:var(--accent);color:#fff;font:600 1rem var(--sans);padding:0 26px;cursor:pointer}
.scan button:disabled{opacity:.6}
.scan-note{color:#8d9ab0;font-size:.9rem;margin-top:14px}
.scan-note a{color:#a6c8ff}
.hero .error{color:#ffb3b8}
@media (max-width:520px){.scan{flex-wrap:wrap}.scan-prefix{display:none}.scan input{width:100%;padding:16px}.scan button{width:100%;padding:14px}}

/* Sektioner */
.checks{padding-top:56px}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:20px}
.card-k{font:600 .72rem var(--mono);color:var(--accent);letter-spacing:.1em;margin-bottom:10px}
.card p{margin:0;color:var(--muted)}
.band{background:var(--card);border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:56px 0;padding:40px 0}
.band p{color:var(--muted);margin:0}
.split{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:start}
@media (max-width:820px){.split{grid-template-columns:1fr}}
.ticks{padding:0;list-style:none}
.ticks li{padding-left:26px;position:relative;margin:.55em 0}
.ticks li::before{content:'✓';position:absolute;left:0;color:var(--pass);font-weight:700}
.cta-box{background:var(--ink);color:#e6eaf2;border-radius:var(--r);padding:24px}
.cta-box p{color:#b8c2d6}
.btn{display:inline-block;background:var(--accent);color:var(--accent-ink);border:1px solid var(--accent);border-radius:8px;padding:10px 16px;font:600 .95rem var(--sans);text-decoration:none;cursor:pointer}
.btn.ghost{background:transparent;color:var(--text);border-color:var(--line)}
.btn:disabled{opacity:.6}

/* Formularer */
.stack{display:grid;gap:12px;max-width:440px}
.stack label{display:grid;gap:4px;font-weight:500;font-size:.95rem}
.stack input,.stack select{font:inherit;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--text)}
.stack .check{display:flex;gap:8px;align-items:flex-start;font-weight:400;font-size:.88rem;color:var(--muted)}
.stack .check input{margin-top:4px}

/* Progress */
.progress-card{max-width:640px;margin:48px auto}
.prog{list-style:none;padding:0;margin:20px 0}
.prog li{display:grid;grid-template-columns:22px 1fr;column-gap:10px;padding:12px 0;border-bottom:1px solid var(--line);font-weight:600}
.prog small{grid-column:2;font-weight:400;color:var(--muted)}
.dot{width:12px;height:12px;border-radius:50%;margin-top:6px;background:var(--line)}
.prog li.run .dot{background:var(--accent);animation:pulse 1s infinite alternate}
.prog li.ok .dot{background:var(--pass)}
.prog li.err .dot{background:var(--crit)}
@keyframes pulse{from{opacity:.3}to{opacity:1}}

/* Rapport */
.report{padding-top:32px}
.summary{display:grid;grid-template-columns:1fr auto;gap:32px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:28px}
.domain{font-family:var(--mono);font-weight:600;word-break:break-all;font-size:clamp(1.5rem,4vw,2.3rem)}
@media (max-width:680px){.summary{grid-template-columns:1fr}.grade{order:-1;justify-self:start}}
.grade{width:150px;height:150px;border-radius:20px;display:grid;place-content:center;text-align:center;color:#fff}
.grade-letter{font:700 4.2rem/1 var(--sans)}
.grade-score{font:600 .95rem var(--mono);opacity:.9;margin-top:6px}
.g-ap,.g-a{background:#1a7f45}.g-b{background:#3f8f2e}.g-c{background:#b28600}.g-d{background:#d1440c}.g-f{background:#a2191f}.g-,.g-–{background:#8a94a6}
.counts{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0}
.count{min-width:78px;padding:8px 12px;border-radius:8px;background:var(--info-bg)}
.count strong{display:block;font:700 1.4rem var(--mono)}
.count span{font-size:.8rem;color:var(--muted)}
.c-critical{background:var(--crit-bg)}.c-critical strong{color:var(--crit)}
.c-high{background:var(--high-bg)}.c-high strong{color:var(--high)}
.c-medium{background:var(--med-bg)}.c-medium strong{color:var(--med)}
.c-low{background:var(--low-bg)}.c-low strong{color:var(--low)}
.c-pass{background:var(--pass-bg)}.c-pass strong{color:var(--pass)}
.actions{display:flex;flex-wrap:wrap;gap:8px}
.modgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin:18px 0}
.mod{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:12px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;text-decoration:none;color:var(--text)}
.mod:hover{border-color:var(--accent)}
.mod-g{grid-row:span 2;width:42px;height:42px;border-radius:9px;display:grid;place-content:center;color:#fff;font:700 1.1rem var(--sans)}
.mod-t{font-weight:600;font-size:.92rem;line-height:1.25;min-width:0;overflow-wrap:anywhere;hyphens:auto}
.mod-s{font:.8rem var(--mono);color:var(--muted)}
.block{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:24px;margin:18px 0}
.block.good{border-color:var(--pass)}
.mod-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.mod-head h2{margin:0}
.prio{margin:0;padding-left:22px}
.prio li{margin:.45em 0}
.prio a{color:var(--text);font-weight:500}

/* Fund */
.sev{display:inline-block;font:600 .7rem/1 var(--mono);text-transform:uppercase;letter-spacing:.04em;padding:5px 7px;border-radius:5px;margin-right:8px;vertical-align:1px;white-space:nowrap}
.sev-critical{background:var(--crit);color:#fff}.sev-high{background:var(--high);color:#fff}.sev-medium{background:var(--med-bg);color:var(--med)}
.sev-low{background:var(--low-bg);color:var(--low)}.sev-info{background:var(--info-bg);color:var(--info)}.sev-pass{background:var(--pass-bg);color:var(--pass)}
.findings{margin-top:14px}
.f{border:1px solid var(--line);border-left-width:4px;border-radius:8px;margin:8px 0;background:var(--card)}
.f-critical{border-left-color:var(--crit)}.f-high{border-left-color:var(--high)}.f-medium{border-left-color:var(--med)}
.f-low{border-left-color:var(--low)}.f-info{border-left-color:var(--line)}.f-pass{border-left-color:var(--pass)}
.f summary{cursor:pointer;padding:12px 14px;list-style:none;display:flex;align-items:baseline}
.f summary::-webkit-details-marker{display:none}
.f summary::after{content:'+';margin-left:auto;padding-left:10px;color:var(--muted);font-family:var(--mono)}
.f[open] summary::after{content:'–'}
.f-t{font-weight:600}
.f-body{padding:0 14px 14px}
.f-body p{margin:.4em 0}
.lbl{font:600 .72rem var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-top:10px}
.ev pre,.code pre,.block-pre{background:var(--info-bg);border-radius:6px;padding:12px;overflow:auto;white-space:pre-wrap;word-break:break-all;margin:6px 0;max-height:320px}
.code{position:relative}
.code pre{background:#0b1220;color:#d6e2ff;padding-right:80px}
.copy{position:absolute;top:8px;right:8px;font:600 .75rem var(--sans);background:#26314a;color:#fff;border:0;border-radius:5px;padding:5px 9px;cursor:pointer}
.fix p{margin:.3em 0}
.tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.tag{font:.72rem var(--mono);padding:4px 7px;border-radius:5px;background:var(--low-bg);color:var(--low)}
.tag-c{background:var(--info-bg);color:var(--info);font-family:var(--sans)}

/* Tabeller */
.scroll{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;font-size:.9rem;margin-top:10px}
.tbl th,.tbl td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top}
.tbl th{font:600 .75rem var(--mono);text-transform:uppercase;color:var(--muted)}
.tbl .num{text-align:right;font-family:var(--mono)}
.tbl .bad{color:var(--crit);font-weight:700}
.kv th{width:110px}
.kv code{white-space:pre-wrap}
.raw{margin-top:14px}
.raw>summary{cursor:pointer;font-weight:600;color:var(--accent)}
.pill{display:inline-block;font:.72rem var(--mono);padding:2px 6px;border-radius:4px;margin:1px 3px 1px 0}
.pill-ok{background:var(--pass-bg);color:var(--pass)}.pill-bad{background:var(--crit-bg);color:var(--crit)}.pill-off{background:var(--info-bg);color:var(--muted);text-decoration:line-through}
.disclaimer{font-size:.82rem;color:var(--muted);margin:24px 0}
.prose p,.prose li{max-width:70ch}
.steps li{margin:.8em 0}

/* Print / PDF */
@media print{
  :root{--paper:#fff;--card:#fff;--text:#000;--muted:#444;--line:#ccc}
  body{font-size:11pt;background:#fff}
  .top,.foot,.no-print,.copy{display:none!important}
  .report{padding:0}
  .block,.summary,.f{break-inside:avoid;box-shadow:none}
  .module{break-before:auto}
  .grade,.mod-g,.sev,.count,.pill,.code pre{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .ev pre,.code pre{max-height:none}
  a{color:#000;text-decoration:none}
  .f summary::after{content:''}
}
@media (max-width:560px){
  .modgrid{grid-template-columns:1fr}
  .grade{width:110px;height:110px}.grade-letter{font-size:3rem}
  .summary{padding:20px}
  .actions .btn{flex:1 1 calc(50% - 8px);text-align:center}
}
.hp{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.stack textarea{font:inherit;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--text);resize:vertical}
.contact-form{max-width:560px}
.small{font-size:.85rem}

/* CVSS-score */
.cvss{margin-left:auto;display:flex;flex-direction:column;align-items:center;min-width:52px;padding:4px 8px;border-radius:7px;line-height:1.1;flex:none}
.f summary:has(.cvss)::after{margin-left:10px}
.cvss-n{font:700 1.05rem var(--mono)}
.cvss-l{font:600 .6rem var(--mono);text-transform:uppercase;letter-spacing:.04em;opacity:.85}
.cvss-critical{background:var(--crit);color:#fff}.cvss-high{background:var(--high);color:#fff}
.cvss-medium{background:var(--med-bg);color:var(--med)}.cvss-low{background:var(--low-bg);color:var(--low)}
.cvss-none,.cvss-info{background:var(--info-bg);color:var(--info)}
.cve-links{font-size:.9rem;margin-top:10px}
.cve-tbl td{vertical-align:middle}
@media print{.cvss{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
.ev pre{word-break:normal;overflow-wrap:anywhere}
@media (max-width:560px){.cvss{display:none}.f summary{flex-wrap:wrap}}
