/* ===================== Theme tokens ===================== */
/* Every colour below comes from these, so the light theme only swaps tokens.
   Accents are darker in light mode to keep text on them at >= 4.5:1. */
:root, [data-bs-theme="dark"] {
  --bg: #0d0d0d; --card: #151719; --surface: #1b1e22; --border: #2a2d31;
  --line: rgba(255,255,255,.07); --hover: rgba(255,255,255,.03);
  --fg: #d6dae0; --fg-strong: #f0f2f5; --muted: #9aa3ad; --ink: #fff; --on-accent: #0d0d0d;
  --c-red: #ff5c6c; --c-orange: #ff8a3d; --c-amber: #ffc531; --c-green: #3ddc84;
  --c-teal: #2dd4bf; --c-cyan: #38bdf8; --c-blue: #7cb1ff; --c-indigo: #8f99fb;
  --c-purple: #c084fc; --c-pink: #f472b6; --c-muted: #9aa3ad;
  --glow: .45; --footer-bg: #05080f; --footer-fg: rgba(226,232,240,.66);
}
[data-bs-theme="light"] {
  --bg: #f3f4f7; --card: #ffffff; --surface: #f6f7f9; --border: #d6dbe1;
  --line: rgba(0,0,0,.08); --hover: rgba(0,0,0,.03);
  --fg: #24292f; --fg-strong: #0d1117; --muted: #57606a; --ink: #000; --on-accent: #fff;
  --c-red: #c4142c; --c-orange: #b9470c; --c-amber: #8a5a00; --c-green: #137a3a;
  --c-teal: #0d7068; --c-cyan: #0a66a3; --c-blue: #1d4ed8; --c-indigo: #4338ca;
  --c-purple: #7e22ce; --c-pink: #b3125f; --c-muted: #57606a;
  --glow: .18; --footer-bg: #e9ecf1; --footer-fg: #4b5563;
}

body {
  color: var(--fg);
  background:
    radial-gradient(1200px 500px at 85% -10%, color-mix(in srgb, var(--c-indigo) 10%, transparent), transparent 60%),
    radial-gradient(900px 400px at -10% 10%, color-mix(in srgb, var(--c-red) 7%, transparent), transparent 60%),
    var(--bg);
  background-attachment: fixed;
}
.card { background: var(--card); border-color: var(--border); color: var(--fg); }
.text-secondary { color: var(--muted) !important; }
a { color: var(--c-blue); }
:focus-visible { outline: 2px solid var(--c-cyan); outline-offset: 2px; }
.min-w-0 { min-width: 0; }
.skip-link { position: absolute; left: 1rem; top: .5rem; z-index: 1000; padding: .4rem .8rem; border-radius: .4rem;
  background: var(--card); color: var(--fg-strong); border: 1px solid var(--border); }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; animation: none !important; } }

/* Nav */
.site-nav { border-bottom: 1px solid var(--border); background: color-mix(in srgb, var(--card) 70%, transparent); }
.site-nav .navbar-brand { color: var(--fg-strong); }
.brand-icon { color: var(--c-red); }
.brand-sub { color: var(--muted); }
.btn-nav { color: var(--fg-strong); border: 1px solid var(--border); background: var(--card); }
.btn-nav:hover, .btn-nav:focus-visible { color: var(--fg-strong); border-color: var(--c-cyan); background: var(--surface); }

/* ===================== Upload page ===================== */
.step {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.6rem; height: 1.6rem; border-radius: 50%;
  background: var(--c-red); color: var(--on-accent); font-size: .9rem; margin-right: .4rem;
}
.step-done .step { background: var(--c-green); }
.disabled-step { opacity: .45; pointer-events: none; }

/* Captcha stage: 320x160 image space (www/captcha), scaled down on narrow screens */
.captcha-stage {
  position: relative; width: 100%; max-width: 320px; aspect-ratio: 2 / 1;
  border-radius: 8px; overflow: hidden; touch-action: none; user-select: none;
  border: 1px solid var(--border);
}
.captcha-bg { display: block; width: 100%; height: 100%; }
.captcha-piece { position: absolute; cursor: grab; touch-action: none; filter: drop-shadow(0 2px 4px rgba(0,0,0,.6)); }
.captcha-piece:active { cursor: grabbing; }
.captcha-hp-wrap { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }

.dropzone {
  display: block; text-align: center; padding: 2.5rem 1rem; cursor: pointer; color: var(--fg);
  border: 2px dashed var(--border); border-radius: 10px; transition: border-color .15s, background .15s;
}
.dropzone:hover, .dropzone.drag, .dropzone:focus-within { border-color: var(--c-red); background: color-mix(in srgb, var(--c-red) 6%, transparent); }
.upload-stage { font-size: .85rem; color: var(--muted); }

/* ===================== Report: verdict ===================== */
.verdict {
  --v: var(--c-muted);
  position: relative; overflow: hidden; border: 1px solid color-mix(in srgb, var(--v) 45%, transparent);
  background:
    linear-gradient(135deg, color-mix(in srgb, var(--v) 16%, transparent), transparent 55%),
    linear-gradient(315deg, color-mix(in srgb, var(--c-indigo) 7%, transparent), transparent 45%),
    var(--card);
  box-shadow: 0 10px 40px -12px color-mix(in srgb, var(--v) calc(var(--glow) * 100%), transparent);
}
.verdict::before {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 4px;
  background: linear-gradient(90deg, var(--v), color-mix(in srgb, var(--v) 40%, var(--c-purple)), var(--c-cyan));
}
.verdict-malicious { --v: var(--c-red); }
.verdict-suspicious { --v: var(--c-amber); }
.verdict-unknown { --v: var(--c-indigo); }
.verdict-pending { --v: var(--c-cyan); }
.verdict-badge {
  flex: none; display: inline-flex; align-items: center; justify-content: center;
  width: 4rem; height: 4rem; border-radius: 1rem; color: var(--v);
  background: color-mix(in srgb, var(--v) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--v) 50%, transparent);
}
.verdict-pending .verdict-icon { animation: spin-slow 2.4s linear infinite; display: inline-block; }
@keyframes spin-slow { to { transform: rotate(360deg); } }
.verdict-icon { font-size: 2.1rem; line-height: 1; }
.verdict-kicker { font-size: .7rem; text-transform: uppercase; letter-spacing: .12em; color: var(--v); font-weight: 700; }
.verdict-title { color: var(--v); font-weight: 700; }
.verdict-unknown .verdict-title { color: var(--fg-strong); }
.summary-line { color: var(--fg-strong); font-weight: 600; font-size: .95rem; }
.verdict-reasons { color: var(--muted); font-size: .9rem; }
.verdict-reasons li { display: flex; gap: .1rem; }
.verdict-reasons i { color: var(--v); }

/* Live analysis progress */
.progress-steps { padding: .75rem 1rem; border-radius: .7rem; background: var(--surface); border: 1px solid var(--line); }
.progress-steps ol { display: flex; flex-wrap: wrap; gap: .4rem 1.1rem; }
.progress-steps li { display: inline-flex; align-items: center; gap: .4rem; font-size: .85rem; color: var(--muted); }
.step-dot { display: inline-flex; align-items: center; justify-content: center; width: 1.35rem; height: 1.35rem; border-radius: 50%;
  border: 1px solid var(--border); font-size: .75rem; }
.step-done { color: var(--fg) !important; }
.step-done .step-dot { background: var(--c-green); border-color: var(--c-green); color: var(--on-accent); }
.step-current { color: var(--fg-strong) !important; font-weight: 600; }
.step-current .step-dot { border-color: var(--c-cyan); color: var(--c-cyan); }
.step-current .step-dot i { animation: spin-slow 1.2s linear infinite; display: inline-block; }

/* File identity table */
.meta-table { --bs-table-bg: transparent; --bs-table-color: var(--fg); margin: 0; }
.meta-table tbody { display: grid; grid-template-columns: 1fr 1fr; column-gap: 1.5rem; }
.meta-table tr { display: flex; align-items: center; border-bottom: 1px solid var(--line); }
.meta-table tr.meta-wide { grid-column: 1 / -1; }
.meta-table tr.d-none { display: none !important; }
.meta-table th, .meta-table td { border: 0; vertical-align: middle; }
.meta-table th { width: 9.5rem; white-space: nowrap; }
.meta-table td { flex: 1; min-width: 0; font-size: .9rem; color: var(--fg); }
.meta-table tr:hover > * { background: var(--hover); }
@media (max-width: 767.98px) { .meta-table tbody { grid-template-columns: 1fr; } }
.meta-label {
  --chip: var(--c-muted);
  display: inline-flex; align-items: center; gap: .45rem; min-width: 8rem; padding: .2rem .6rem; border-radius: .4rem;
  font-size: .75rem; font-weight: 700; letter-spacing: .03em;
  color: var(--chip); background: color-mix(in srgb, var(--chip) 13%, transparent);
  border: 1px solid color-mix(in srgb, var(--chip) 35%, transparent);
}
.meta-label.chip-name { --chip: var(--c-pink); }
.meta-label.chip-size { --chip: var(--c-blue); }
.meta-label.chip-type { --chip: var(--c-purple); }
.meta-label.chip-seen { --chip: var(--c-orange); }
.meta-label.chip-first { --chip: var(--c-teal); }
.meta-label.chip-last { --chip: var(--c-cyan); }
.meta-label.chip-analysed { --chip: var(--c-indigo); }
.meta-label.ent-cool { --chip: var(--c-green); }
.meta-label.ent-warm { --chip: var(--c-amber); }
.meta-label.ent-hot { --chip: var(--c-red); }
.meta-name strong { font-family: var(--bs-font-monospace); font-weight: 600; word-break: break-all; color: var(--fg-strong); }
.meta-type { overflow-wrap: anywhere; }
.ent-value { font-family: var(--bs-font-monospace); font-weight: 700; }
.ent-value.ent-cool { color: var(--c-green); }
.ent-value.ent-warm { color: var(--c-amber); }
.ent-value.ent-hot { color: var(--c-red); }

/* Report link */
.report-link .input-group-text { background: color-mix(in srgb, var(--c-cyan) 12%, transparent); color: var(--c-cyan);
  border-color: color-mix(in srgb, var(--c-cyan) 35%, transparent); }
.report-link .form-control { background: var(--surface); border-color: color-mix(in srgb, var(--c-cyan) 25%, transparent); color: var(--fg-strong); }
.report-link .btn { border: 1px solid color-mix(in srgb, var(--c-cyan) 35%, transparent); color: var(--c-cyan); }
.report-link .btn:hover, .report-link .btn:focus-visible { background: var(--c-cyan); color: var(--on-accent); }

/* Hashes */
.hash-table { --bs-table-bg: transparent; --bs-table-color: var(--fg); }
.hash-table td, .hash-table th { vertical-align: middle; border-color: var(--line); }
.hash-table tr:hover > * { background: var(--hover); }
.hash-label {
  --h: var(--c-muted);
  display: inline-block; min-width: 5rem; text-align: center; padding: .15rem .5rem; border-radius: .4rem;
  font-size: .72rem; font-weight: 700; letter-spacing: .04em;
  color: var(--h); background: color-mix(in srgb, var(--h) 13%, transparent);
  border: 1px solid color-mix(in srgb, var(--h) 35%, transparent);
}
.hl-md5 { --h: var(--c-teal); }
.hl-sha1 { --h: var(--c-cyan); }
.hl-sha256 { --h: var(--c-indigo); }
.hl-sha512 { --h: var(--c-purple); }
.hl-imphash { --h: var(--c-pink); }
.hl-richhash { --h: var(--c-orange); }
.hash-value { font-family: var(--bs-font-monospace); font-size: .85rem; word-break: break-all; color: var(--fg); }
.hash-hit { color: var(--c-red) !important; font-weight: 600; }
.copy { color: var(--muted); }
.copy:hover, .copy:focus-visible { color: var(--c-cyan); }

/* Lookups elsewhere */
.lookups { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .9rem; font-size: .82rem; }
.lookups-label { font-size: .7rem; text-transform: uppercase; letter-spacing: .08em; font-weight: 700; color: var(--muted); }
.lookups a { color: var(--c-cyan); text-decoration: none; font-weight: 600; }
.lookups a:hover { text-decoration: underline; }
.lookups i { font-size: .7em; }

/* Section nav */
.toc { position: sticky; top: 0; z-index: 10; display: flex; flex-wrap: wrap; gap: .4rem; padding: .55rem .6rem;
  border-radius: .7rem; background: color-mix(in srgb, var(--card) 88%, transparent); border: 1px solid var(--border);
  backdrop-filter: blur(6px); }
.toc a { --t: var(--c-blue); display: inline-flex; align-items: center; gap: .35rem; padding: .2rem .6rem; border-radius: 999px;
  font-size: .78rem; font-weight: 600; text-decoration: none; color: var(--t);
  background: color-mix(in srgb, var(--t) 11%, transparent); border: 1px solid color-mix(in srgb, var(--t) 30%, transparent); }
.toc a:hover, .toc a:focus-visible { background: var(--t); color: var(--on-accent); }
.toc-count { font-size: .7rem; padding: 0 .35rem; border-radius: 999px; background: var(--t); color: var(--on-accent); }
.toc a:hover .toc-count { background: var(--on-accent); color: var(--t); }
.toc-ioc { --t: var(--c-red) !important; } .toc-yara { --t: var(--c-orange) !important; }
.toc-behaviour { --t: var(--c-amber) !important; } .toc-attck { --t: var(--c-pink) !important; }
.toc-pe { --t: var(--c-blue) !important; } .toc-dotnet { --t: var(--c-indigo) !important; }
.toc-elf, .toc-archive { --t: var(--c-green) !important; } .toc-lnk, .toc-script { --t: var(--c-teal) !important; }
.toc-office { --t: var(--c-cyan) !important; } .toc-strings { --t: var(--c-purple) !important; }
[id^="sec-"] { scroll-margin-top: 4.5rem; }

/* ===================== Report: sections ===================== */
.sec {
  --s: var(--c-blue);
  position: relative; overflow: hidden; border-left: 3px solid var(--s);
  background: linear-gradient(120deg, color-mix(in srgb, var(--s) 6%, transparent), transparent 40%), var(--card);
}
.sec-ioc { --s: var(--c-red); }
.sec-yara { --s: var(--c-orange); }
.sec-behaviour { --s: var(--c-amber); }
.sec-attck { --s: var(--c-pink); }
.sec-pe { --s: var(--c-blue); }
.sec-dotnet { --s: var(--c-indigo); }
.sec-elf, .sec-archive { --s: var(--c-green); }
.sec-lnk, .sec-script { --s: var(--c-teal); }
.sec-office { --s: var(--c-cyan); }
.sec-strings { --s: var(--c-purple); }
.sec-nomatch { --s: var(--c-indigo); }
.sec-title { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; font-size: 1.05rem; font-weight: 600;
  margin-bottom: 1rem; color: var(--fg-strong); }
summary.sec-title { display: flex; list-style: none; }
summary.sec-title::-webkit-details-marker { display: none; }
summary.sec-title::after { content: "\F282"; font-family: bootstrap-icons; margin-left: auto; color: var(--s); transition: transform .2s; }
details[open] > summary.sec-title::after { transform: rotate(180deg); }
.sec-icon {
  display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; border-radius: .6rem;
  color: var(--s); background: color-mix(in srgb, var(--s) 15%, transparent);
  border: 1px solid color-mix(in srgb, var(--s) 40%, transparent);
}
.sec-count { font-size: .75rem; font-weight: 700; padding: .1rem .5rem; border-radius: 999px; background: var(--s); color: var(--on-accent); }
.sec-sub { font-size: .8rem; font-weight: 400; color: var(--muted); }
.text-none { text-transform: none; letter-spacing: 0; }
.sub-title { font-size: .8rem; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--s); margin: 1.25rem 0 .6rem; }
.sub-summary { font-size: .9rem; font-weight: 600; color: var(--fg-strong); }
.sub-summary:hover { color: var(--s); }
.sub-summary code { color: var(--s); }

.sec .table { --bs-table-bg: transparent; --bs-table-color: var(--fg); }
.sec .table > :not(caption) > * > * { border-color: var(--line); }
.sec .table thead th {
  font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; font-weight: 700;
  color: var(--s); border-bottom: 1px solid color-mix(in srgb, var(--s) 40%, transparent);
}
.sec .table tbody tr:hover > * { background: color-mix(in srgb, var(--s) 5%, transparent); }
.sec a:not(.group-tag):not(.attck):not(.attck-card) { color: var(--s); text-decoration: none; font-weight: 600; }
.sec a:not(.group-tag):not(.attck):not(.attck-card):hover { text-decoration: underline; }

.found { display: inline-flex; align-items: center; gap: .3rem; font-size: .75rem; padding: .15rem .5rem; border-radius: .4rem; font-weight: 600; }
.found-hash { color: var(--c-red); background: color-mix(in srgb, var(--c-red) 12%, transparent); border: 1px solid color-mix(in srgb, var(--c-red) 35%, transparent); }
.found-strings { color: var(--c-pink); background: color-mix(in srgb, var(--c-pink) 12%, transparent); border: 1px solid color-mix(in srgb, var(--c-pink) 35%, transparent); }
.rule { font-family: var(--bs-font-monospace); font-size: .8rem; color: var(--c-orange); background: color-mix(in srgb, var(--c-orange) 11%, transparent);
  padding: .1rem .45rem; border-radius: .35rem; }
.tlp { font-size: .7rem; letter-spacing: .03em; }
.tlp-CLEAR { background: #f8f9fa; color: #000; border: 1px solid #ced4da; }
.tlp-GREEN { background: #33a532; color: #000; }

/* "No match" explanation */
.checked-list { list-style: none; padding: 0; display: grid; gap: .3rem; }
.checked-list i { color: var(--c-green); margin-right: .35rem; }

/* Behaviour categories */
.cat { --k: var(--c-muted); font-size: .72rem; font-weight: 700; padding: .15rem .55rem; border-radius: 999px;
  color: var(--k); background: color-mix(in srgb, var(--k) 13%, transparent); border: 1px solid color-mix(in srgb, var(--k) 35%, transparent); }
.cat-recovery-inhibition { --k: var(--c-red); }
.cat-defense-evasion { --k: var(--c-purple); }
.cat-impact { --k: var(--c-orange); }
.cat-ransom-note { --k: var(--c-pink); }
.cat-cryptography { --k: var(--c-teal); }
.cat-discovery { --k: var(--c-cyan); }
.cat-execution { --k: var(--c-amber); }
.cat-persistence { --k: var(--c-indigo); }
.cat-command-and-control { --k: var(--c-blue); }

/* ATT&CK */
.attck { display: inline-block; margin: .1rem .25rem .1rem 0; padding: .08rem .45rem; border-radius: .35rem;
  font-family: var(--bs-font-monospace); font-size: .72rem; font-weight: 700; text-decoration: none;
  color: var(--c-pink); background: color-mix(in srgb, var(--c-pink) 11%, transparent); border: 1px solid color-mix(in srgb, var(--c-pink) 32%, transparent); }
.attck:hover, .attck:focus-visible { background: var(--c-pink); color: var(--on-accent); }
.attck-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: .6rem; }
.attck-card { display: flex; flex-direction: column; gap: .15rem; padding: .6rem .75rem; border-radius: .6rem; text-decoration: none;
  background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--c-pink); color: var(--fg); }
.attck-card:hover, .attck-card:focus-visible { border-color: var(--c-pink); background: color-mix(in srgb, var(--c-pink) 7%, var(--surface)); }
.attck-id { font-family: var(--bs-font-monospace); font-weight: 700; font-size: .8rem; color: var(--c-pink); }
.attck-name { font-weight: 600; font-size: .88rem; color: var(--fg-strong); }
.attck-why { font-size: .75rem; color: var(--muted); }

/* Tiles, tags, APIs */
.kv-tile { height: 100%; padding: .6rem .8rem; border-radius: .6rem; background: var(--surface);
  border: 1px solid var(--line); border-top: 2px solid color-mix(in srgb, var(--s, var(--c-blue)) 60%, transparent); }
.kv-label { font-size: .7rem; color: var(--s, var(--c-blue)); text-transform: uppercase; letter-spacing: .06em; font-weight: 700; }
.kv-value { font-family: var(--bs-font-monospace); font-size: .875rem; word-break: break-all; color: var(--fg-strong); }
.tag { font-size: .7rem; font-weight: 700; padding: .12rem .5rem; border-radius: .4rem; letter-spacing: .03em; }
.tag-dotnet { color: var(--c-purple); background: color-mix(in srgb, var(--c-purple) 13%, transparent); border: 1px solid color-mix(in srgb, var(--c-purple) 40%, transparent); }
.tag-packed { color: var(--c-amber); background: color-mix(in srgb, var(--c-amber) 12%, transparent); border: 1px solid color-mix(in srgb, var(--c-amber) 40%, transparent); }
.tag-signed { color: var(--c-green); background: color-mix(in srgb, var(--c-green) 12%, transparent); border: 1px solid color-mix(in srgb, var(--c-green) 40%, transparent); }
.tag-danger { color: var(--c-red); background: color-mix(in srgb, var(--c-red) 12%, transparent); border: 1px solid color-mix(in srgb, var(--c-red) 40%, transparent); }
.cap-name { font-weight: 600; color: var(--fg-strong); width: 18rem; }
.cap-name i { color: var(--s); }
.api { display: inline-block; font-family: var(--bs-font-monospace); font-size: .75rem; margin: .1rem .25rem .1rem 0; padding: .05rem .4rem;
  border-radius: .3rem; color: var(--c-blue); background: color-mix(in srgb, var(--c-blue) 9%, transparent); border: 1px solid color-mix(in srgb, var(--c-blue) 25%, transparent); }
.note { display: inline-block; font-size: .7rem; font-weight: 600; padding: .08rem .45rem; border-radius: .35rem; margin-right: .25rem;
  color: var(--muted); background: var(--surface); border: 1px solid var(--line); }
.note-warn { color: var(--c-amber); background: color-mix(in srgb, var(--c-amber) 12%, transparent); border-color: color-mix(in srgb, var(--c-amber) 35%, transparent); }
.cert-role { font-size: .7rem; font-weight: 700; padding: .1rem .45rem; border-radius: .35rem; background: var(--surface); border: 1px solid var(--line); color: var(--muted); }
.cert-signer { color: var(--c-green); border-color: color-mix(in srgb, var(--c-green) 40%, transparent); }
.cert-timestamp { color: var(--c-cyan); border-color: color-mix(in srgb, var(--c-cyan) 40%, transparent); }
.sec-name { color: var(--c-cyan); font-weight: 600; }
.dll { font-family: var(--bs-font-monospace); font-weight: 600; color: var(--s, var(--c-blue)); }
.code-block { max-height: 28rem; overflow: auto; padding: .75rem .9rem; border-radius: .6rem; font-size: .8rem; white-space: pre-wrap; word-break: break-all;
  background: var(--surface); border: 1px solid var(--line); color: var(--fg-strong); }
.entropy-bar { flex: 1; height: 7px; background: var(--line); border-radius: 4px; overflow: hidden; }
.entropy-bar > div { height: 100%; border-radius: 4px; background: linear-gradient(90deg, var(--c-teal), var(--c-green)); }
.entropy-bar > div.warm { background: linear-gradient(90deg, var(--c-green), var(--c-amber)); }
.entropy-bar > div.hot { background: linear-gradient(90deg, var(--c-amber), var(--c-red)); }
details > summary { cursor: pointer; }

/* Ransomware group: always a green tag, linking to ransomware.live/group/<group> when it has a page */
.group-tag {
  display: inline-flex; align-items: center; gap: .35rem; margin: .1rem .3rem .1rem 0;
  padding: .2rem .6rem; border-radius: .45rem; font-size: .8rem; font-weight: 700; text-decoration: none;
  color: var(--c-green); background: color-mix(in srgb, var(--c-green) 13%, transparent);
  border: 1px solid color-mix(in srgb, var(--c-green) 45%, transparent);
  transition: background .15s, color .15s;
}
.group-tag i { font-size: .85em; }
a.group-tag:hover, a.group-tag:focus-visible { color: var(--on-accent); background: var(--c-green); text-decoration: none; }
span.group-tag { cursor: default; }
.verdict-groups .group-tag { font-size: .9rem; padding: .3rem .75rem; }

/* ===================== Footer (as on www.ransomware.live) ===================== */
.rl-footer { position: relative; background: var(--footer-bg); color: var(--footer-fg); border-top: 1px solid var(--border); font-size: .85rem; }
.rl-footer::before { content: ""; position: absolute; top: -1px; left: 0; right: 0; height: 1px;
  background: linear-gradient(90deg, var(--c-green), var(--c-cyan), var(--c-green)); }
.rl-footer a { color: var(--footer-fg); text-decoration: none; }
.rl-footer a:hover, .rl-footer a:focus-visible { color: var(--c-cyan); }
.footer-logo-text { font-weight: 700; font-size: 1.05rem; color: var(--c-green); letter-spacing: -.02em; }
.footer-logo-tld { color: var(--c-green); opacity: .75; }
.footer-motto { font-size: .78rem; opacity: .75; }
.footer-heading { font-family: var(--bs-font-monospace); font-size: .65rem; text-transform: uppercase; letter-spacing: .16em;
  opacity: .8; margin-bottom: .6rem; font-weight: 700; }
.footer-links li { margin-bottom: .3rem; }
.footer-links i { font-size: .7rem; margin-right: .35rem; }
.footer-heart { color: var(--c-red); }
.footer-social a { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 99px;
  background: color-mix(in srgb, var(--footer-fg) 8%, transparent); border: 1px solid color-mix(in srgb, var(--footer-fg) 18%, transparent); }
.footer-social a:hover, .footer-social a:focus-visible { border-color: var(--c-cyan); color: var(--c-cyan); }
.footer-divider { border-color: var(--line); opacity: 1; margin: 1rem 0; }
.page-note { color: var(--muted); }

/* ===================== Print: white page, no chrome ===================== */
@media print {
  :root, [data-bs-theme] { --bg: #fff; --card: #fff; --surface: #fff; --fg: #000; --fg-strong: #000; --muted: #444; }
  .site-nav, .rl-footer, .toc, .copy, .report-link, .skip-link { display: none !important; }
  .card { break-inside: avoid; box-shadow: none !important; }
}

@media (max-width: 575.98px) {
  .verdict-badge { width: 2.75rem; height: 2.75rem; border-radius: .75rem; }
  .verdict-icon { font-size: 1.4rem; }
  .meta-table th { width: 7.5rem; }
  .meta-label { min-width: 6.5rem; }
}
.footer-links-2col { display: grid; grid-template-columns: repeat(2, max-content); column-gap: 2.5rem; }
@media (max-width: 400px) { .footer-links-2col { grid-template-columns: 1fr; } }
