:root{
  --bg:#F4F5F7; --panel:#fff; --ink:#1C2230; --sub:#5D6677; --line:#DDE1E8;
  --accent:#2F55D4; --accent-ink:#fff; --danger:#C0392B; --ok:#1E8E5A; --warn:#B7791F;
  --mono:ui-monospace,"SFMono-Regular","JetBrains Mono",Menlo,Consolas,monospace;
  --sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
}
@media (prefers-color-scheme:dark){:root{
  --bg:#12151B; --panel:#1A1F27; --ink:#E4E8EF; --sub:#98A2B3; --line:#2C3340; --accent:#6E8BFF; --accent-ink:#0b1020;
}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 var(--sans)}
a{color:var(--accent)}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
h1{font-size:22px;margin:0 0 16px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
h1 small,h2 small{font-weight:400;color:var(--sub);font-size:13px}
h2{font-size:15px;margin:0 0 10px;display:flex;align-items:baseline;gap:10px}
h3{font-size:14px;margin:0 0 6px}
code,.mono{font-family:var(--mono);font-size:12.5px}
.small{font-size:12px}
.muted{color:var(--sub)}
.mt{margin-top:22px}
.nowrap{white-space:nowrap}
.wrap{word-break:break-all;white-space:pre-wrap}
.anywhere{overflow-wrap:anywhere}
.trunc{max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.bar{display:flex;align-items:center;gap:24px;padding:0 20px;height:52px;background:var(--ink);color:#fff}
@media (prefers-color-scheme:dark){.bar{background:#0B0E13;border-bottom:1px solid var(--line)}}
.bar-brand{color:#fff;text-decoration:none;font-weight:700;display:flex;align-items:center;gap:10px;font-size:15px;letter-spacing:.02em}
.bar-brand img{display:block}
.bar-nav{display:flex;gap:4px}
.bar-nav a{color:#C9D0DC;text-decoration:none;padding:6px 10px;border-radius:6px;white-space:nowrap}
.bar-nav a:hover{color:#fff}
.bar-nav a[aria-current]{background:rgba(255,255,255,.12);color:#fff}
.bar-user{margin-left:auto;display:flex;gap:12px;align-items:center;color:#C9D0DC;white-space:nowrap}
.bar-user a{color:#fff}
.linkish{background:none;border:0;color:#fff;cursor:pointer;font:inherit;text-decoration:underline;padding:0}

.page{max-width:1280px;margin:0 auto;padding:24px 20px 60px}
.crumbs{margin:0 0 6px;color:var(--sub)}
.lead{color:var(--sub);margin:-8px 0 18px}
.callout{background:#FFF8E1;border:1px solid #F1D48A;color:#5c4400;padding:10px 14px;border-radius:8px}
@media (prefers-color-scheme:dark){.callout{background:#2d2614;border-color:#5c4a1c;color:#f1d48a}}
.flash{list-style:none;padding:0;margin:0 0 16px}
.flash li{padding:9px 14px;border-radius:8px;margin-bottom:6px;border:1px solid var(--line);background:var(--panel)}
.flash-success{border-color:#9ED9BB!important}
.flash-warning{border-color:#F1D48A!important}
.flash-error{border-color:var(--danger)!important;color:var(--danger)}

.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px 18px;margin-bottom:16px;min-width:0}
.more{font-size:13px;font-weight:400;margin-left:auto}
.cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px;text-decoration:none;color:var(--ink)}
.stat b{display:block;font-size:28px;line-height:1.1;font-variant-numeric:tabular-nums}
.stat span{color:var(--sub);font-size:13px}
.stat-alert b{color:var(--danger)}
.hist{width:100%;height:120px;display:block}
.hist .base{stroke:var(--line)}
.hist .line{fill:none;stroke:var(--accent);stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.hist .area{fill:var(--accent);opacity:.12}
.hist .pt rect{fill:transparent}
.hist .pt line{stroke:var(--sub);stroke-width:1;vector-effect:non-scaling-stroke;opacity:0}
.hist .pt:hover line{opacity:.6}
.hist-axis{display:flex;justify-content:space-between;margin:4px 0 0;color:var(--sub);font-size:12px}

.scroll{overflow-x:auto}
.t{width:100%;border-collapse:collapse}
.t th,.t td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top}
.t thead th{font-size:12px;color:var(--sub);font-weight:600}
.t tbody th{font-weight:600}
.t .num{text-align:right;font-variant-numeric:tabular-nums}
.t tr.off td{opacity:.55}
.t td.mono{word-break:break-all}
.t td.trunc{max-width:0;width:100%}
.t tr:hover td{background:rgba(127,140,160,.07)}
.events .req a{color:var(--ink);text-decoration:none}
.events .req a:hover{text-decoration:underline}
.tag{display:inline-block;font-size:11.5px;line-height:1;padding:4px 7px;border-radius:20px;background:rgba(127,140,160,.16);color:var(--ink);text-decoration:none;margin:0 4px 4px 0;white-space:nowrap}
.tag-creds,.tag-rce,.tag-sqli,.tag-log4s,.tag-shell,.tag-uploa{background:#FBE3E0;color:#9B2C1F}
.tag-xss,.tag-trave,.tag-lfi,.tag-ssti,.tag-ssrf,.tag-xxe{background:#FCEFD6;color:#7A4B00}
.tag-scann{background:#E3E9FB;color:#2541A3}
@media (prefers-color-scheme:dark){
  .tag-creds,.tag-rce,.tag-sqli,.tag-log4s,.tag-shell,.tag-uploa{background:#4a1f1a;color:#ffb4a8}
  .tag-xss,.tag-trave,.tag-lfi,.tag-ssti,.tag-ssrf,.tag-xxe{background:#45330f;color:#ffd68a}
  .tag-scann{background:#1f2a4d;color:#b3c3ff}
}
.taglist{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:4px 10px}
.taglist .num{color:var(--sub);font-size:12px}

.kv{display:grid;grid-template-columns:120px 1fr;gap:6px 12px;margin:0}
.kv dt{color:var(--sub)}
.kv dd{margin:0;min-width:0}
.reqline{font-size:16px;word-break:break-all;display:block}
.creds{background:#FBE3E0;color:#9B2C1F;padding:8px 10px;border-radius:6px;display:inline-block}
pre.body{background:#0F1320;color:#D8DEE9;padding:14px;border-radius:8px;overflow:auto;max-height:560px;font:12.5px/1.5 var(--mono);white-space:pre-wrap;word-break:break-all}
details summary{cursor:pointer;color:var(--sub);margin:8px 0}

.filters{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:flex-end;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:10px}
.filters label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--sub)}
.filters label.grow{flex:1;min-width:200px}
.filters label.check{flex-direction:row;align-items:center;gap:6px;padding-bottom:8px}
.filters input:not([type=checkbox]),.filters select{width:130px}
.filters .grow input{width:100%}
.exports{font-size:13px;color:var(--sub);margin:0 0 10px}
.pager{display:flex;gap:16px;align-items:center;justify-content:center;margin-top:14px}

input,select,textarea{font:14px var(--sans);color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:7px 9px}
textarea{width:100%;font-family:var(--mono);font-size:12.5px}
.form-grid{display:grid;gap:16px;max-width:980px}
fieldset{border:1px solid var(--line);border-radius:10px;background:var(--panel);padding:12px 18px 6px;margin:0}
legend{font-weight:700;padding:0 6px}
.field{margin-bottom:12px}
.field>label{display:block;font-weight:600;margin-bottom:4px}
.field input:not([type=checkbox]),.field select{width:100%;max-width:520px}
.field-check label{font-weight:500}
.field input[type=radio]{width:auto;margin:0 6px 0 0}
.field>div>div{margin:4px 0}
.field>div label{font-weight:500}
.help{color:var(--sub);font-size:12.5px;margin:4px 0 0}
.err{color:var(--danger);margin:4px 0 0}
.has-err input,.has-err textarea,.has-err select{border-color:var(--danger)}
.actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:6px 0}
.actions form{margin:0}

.btn{display:inline-block;font:600 13.5px var(--sans);padding:7px 14px;border-radius:7px;border:1px solid var(--line);background:var(--panel);color:var(--ink);cursor:pointer;text-decoration:none}
.btn:hover{border-color:var(--sub)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn-primary:hover{filter:brightness(1.08)}
.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}
.btn-danger-quiet{color:var(--danger)}
.btn-quiet{border-color:transparent;background:transparent}
.danger{color:var(--danger)}
.pill{border:0;border-radius:20px;padding:3px 10px;font:600 12px var(--sans);cursor:pointer}
.pill-on{background:#D7F2E3;color:#145C3B}
.pill-off{background:#E7E9EE;color:#5D6677}

.presets{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.preset{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column}
.preset p{color:var(--sub);margin:0 0 10px}
.preset .mono{flex:1}
.preset .btn{margin-top:6px;align-self:flex-start}
.steps{padding-left:20px;color:var(--sub)}
.steps li{margin-bottom:4px}

.login{max-width:340px;margin:8vh auto 0;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:26px}
.login h1{font-size:19px;justify-content:center}
/* The logo's dark lettering on a transparent ground needs a light one, in dark mode too:
   its own cyan and violet, faded almost to white. */
.login-brand{background:linear-gradient(120deg,#E3F6FD 0%,#EDF1FE 55%,#F1EAFE 100%);margin:-26px -26px 18px;padding:22px 18px;border-radius:12px 12px 0 0;border-bottom:1px solid var(--line)}
.login-brand img{display:block;margin:0 auto;max-width:100%;height:auto}
.stack{display:grid;gap:12px}
.stack label{display:grid;gap:4px;font-weight:600}
.stack input{width:100%}

@media (max-width:900px){
  .cols,.cols-2{grid-template-columns:1fr}
  .stats{grid-template-columns:repeat(2,1fr)}
  .bar{height:auto;flex-wrap:wrap;padding:10px 16px;gap:8px 16px}
  .page{padding:16px}
  .kv{grid-template-columns:1fr}
}

.pagehead{display:flex;align-items:center;gap:12px 20px;flex-wrap:wrap;margin-bottom:16px}
.pagehead h1{margin:0}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--panel)}
.seg a{padding:6px 12px;color:var(--sub);text-decoration:none;font-weight:600;font-size:13px;border-left:1px solid var(--line)}
.seg a:first-child{border-left:0}
.seg a:hover{color:var(--ink)}
.seg a[aria-current]{background:var(--accent);color:var(--accent-ink)}
.stat .delta{display:block;font-size:12px}
.cmd{display:block;background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:8px 10px;white-space:pre-wrap;word-break:break-all}

/* date picker (console.js) */
.dp{position:absolute;z-index:50;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgba(0,0,0,.18);padding:10px;width:252px;font-size:13px}
.dp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;font-weight:600}
.dp-nav{border:0;background:transparent;color:var(--ink);font-size:18px;line-height:1;width:30px;height:30px;border-radius:6px;cursor:pointer}
.dp-nav:hover{background:var(--bg)}
.dp-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center}
.dp-dow{font-size:11px;color:var(--sub);padding:4px 0}
.dp-day{border:0;background:transparent;color:var(--ink);height:30px;border-radius:6px;cursor:pointer;font:inherit}
.dp-day:hover{background:var(--bg)}
.dp-today{box-shadow:inset 0 0 0 1px var(--accent)}
.dp-sel{background:var(--accent);color:var(--accent-ink)}
.dp-sel:hover{background:var(--accent)}
.dp-foot{display:flex;justify-content:space-between;margin-top:6px;border-top:1px solid var(--line);padding-top:6px}
.filters input[data-datepicker]{width:110px}

/* tags */
.tagdefs .conds{font-size:13px;min-width:320px}
.tagdefs .conds code{word-break:break-all}
.cond-group{display:block}
.or{display:block;color:var(--sub);font-size:11.5px;font-weight:600;margin:2px 0}
.and{color:var(--sub);font-size:11.5px;font-weight:600}
.conditions td{vertical-align:middle}
.conditions td.grow{width:100%;min-width:260px}
.conditions td.grow input{width:100%}
.conditions .group-no{width:64px}
.conditions select{max-width:200px}
.conditions tr.has-err td{background:rgba(192,57,43,.06)}
.pagehead-links{margin:0;font-size:13px}
/* GeoIP and reverse DNS under an IP address */
.ipmeta{display:block;font:12px/1.4 var(--sans);color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:22em}
.cc{display:inline-block;min-width:1.9em;padding:0 4px;border:1px solid var(--line);border-radius:4px;font:600 11px/1.5 var(--mono);text-align:center;color:var(--ink);text-decoration:none;vertical-align:1px}
a.cc:hover{border-color:var(--accent)}
.foot{margin:28px 0 8px;font-size:12px;color:var(--sub)}
.foot a{color:var(--sub)}

/* threat-intel badges: on a blocklist, Tor/VPN, known scanner, hosting */
.ib{display:inline-block;font:600 10.5px/1 var(--sans);padding:3px 6px;border-radius:4px;margin:0 3px 2px 0;vertical-align:1px;white-space:nowrap;background:rgba(127,140,160,.16);color:var(--sub)}
.ib-bad{background:#FBE3E0;color:#9B2C1F}
.ib-anon{background:#EFE3FB;color:#5B2A8C}
.ib-scan{background:#E3E9FB;color:#2541A3}
@media (prefers-color-scheme:dark){
  .ib-bad{background:#4a1f1a;color:#ffb4a8}
  .ib-anon{background:#35204d;color:#d9b8ff}
  .ib-scan{background:#1f2a4d;color:#b3c3ff}
}
.btn-small{padding:3px 9px;font-size:12px}
ul.plain{list-style:none;padding:0;margin:10px 0 0}
ul.plain li{margin:3px 0}
.mix{display:block;width:100%;height:10px;border-radius:5px;overflow:hidden;background:var(--line);margin:4px 0 12px}
.mx-bad{background:#D9573F;fill:#D9573F}.mx-anon{background:#8A5CC7;fill:#8A5CC7}.mx-scan{background:#4C6FE0;fill:#4C6FE0}
.mx-host{background:#9AA5B5;fill:#9AA5B5}.mx-new{background:#E0A526;fill:#E0A526}.mx-none{background:var(--line);fill:var(--line)}
.swatch{display:inline-block;width:9px;height:9px;border-radius:2px;vertical-align:0}
.tabs{margin:0 0 14px}
.tabs a{display:inline-block;padding:4px 11px;margin-right:6px;border:1px solid var(--line);border-radius:6px;color:var(--sub);text-decoration:none}
.tabs a.on{background:var(--accent,#2541A3);border-color:var(--accent,#2541A3);color:#fff}

/* Live map */
.lm-status{font:600 12px var(--sans);padding:4px 9px;border-radius:20px;background:rgba(127,140,160,.16);color:var(--sub)}
.lm-status::before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:currentColor;margin-right:6px;vertical-align:1px}
.lm-status.lm-ok{color:var(--ok)}
.lm-status.lm-bad{color:var(--danger)}
.lm-panel{padding:0;overflow:hidden}
.lm-map{position:relative;background:#0A101C;min-height:200px}
.lm-map canvas{position:absolute;left:0;top:0;display:block}
.lm-tip{position:absolute;pointer-events:none;background:rgba(14,20,32,.94);color:#E4E8EF;border:1px solid #33405A;border-radius:8px;padding:8px 10px;font-size:12.5px;min-width:130px;max-width:260px;box-shadow:0 4px 18px rgba(0,0,0,.35)}
.lm-tip .muted{color:#98A2B3}
.lm-tip-n{margin:2px 0 4px;font-variant-numeric:tabular-nums}
.lm-tip-row{display:flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums}
.lm-tip-row i,.lm-svc i{display:inline-block;width:9px;height:9px;border-radius:50%;flex:none}
.lm-legend{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:10px 14px;border-top:1px solid var(--line)}
.lm-svc{display:inline-flex;align-items:center;gap:6px;font:600 12.5px var(--sans);padding:4px 10px;border-radius:20px;border:1px solid var(--line);background:var(--panel);color:var(--ink);cursor:pointer}
.lm-svc[aria-pressed="false"]{opacity:.45;text-decoration:line-through}
.lm-svc-web i{background:#5B8CFF}.lm-svc-ssh i{background:#3DDC97}.lm-svc-telnet i{background:#FFB547}
.lm-svc-mail i{background:#FF6B9E}.lm-svc-ftp i{background:#C08CFF}
.lm-svc .muted{font-weight:400;font-variant-numeric:tabular-nums}
.lm-scale{margin-left:auto;display:inline-flex;align-items:center;gap:6px}
.lm-ramp{display:inline-block;width:90px;height:8px;border-radius:4px;background:linear-gradient(90deg,#473B3C,#FF7A45)}
.lm-table td{padding:6px 8px}
.lm-table td:first-child{width:100%}
.lm-cc{display:inline-block;min-width:22px;font-size:11.5px;color:var(--sub)}
.lm-bar{display:flex;height:4px;margin-top:5px;border-radius:2px;overflow:hidden;background:rgba(127,140,160,.12)}
.lm-bar i{display:block;height:100%}
.lm-feed{list-style:none;margin:0;padding:0;font-size:12.5px}
.lm-feed li{padding:6px 0;border-bottom:1px solid var(--line);min-width:0}
.lm-feed li:last-child{border-bottom:0}
.lm-feed-head{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline}
.lm-chip{font:600 10.5px/1 var(--sans);padding:2px 6px;border:1px solid;border-radius:4px}
.lm-what{display:block;color:var(--sub);font-family:var(--mono);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none}
a.lm-what:hover{text-decoration:underline}
@media (max-width:900px){.lm-scale{margin-left:0}}
.lm-table th{white-space:nowrap}

/* Two-factor login */
.tf-setup{display:flex;gap:24px;align-items:flex-start;flex-wrap:wrap}
.tf-qr svg{display:block;border-radius:8px}
.tf-steps{margin:0 0 14px;padding-left:20px;max-width:560px}
.tf-steps li{margin-bottom:8px}
.tf-secret{display:inline-block;margin-top:4px;font-size:15px;letter-spacing:.04em;word-break:break-all}
.tf-form{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.tf-form label{display:flex;flex-direction:column;gap:4px;font-weight:600}
.tf-form input{width:12em;font:16px var(--mono);letter-spacing:.1em}
.tf-codes{columns:2;max-width:380px;font-size:15px;line-height:1.9;padding-left:20px}

/* Executive Overview */
.ex-web{fill:#5B8CFF;background:#5B8CFF}.ex-ssh{fill:#2FBF84;background:#2FBF84}.ex-telnet{fill:#F0A532;background:#F0A532}
.ex-mail{fill:#E8558A;background:#E8558A}.ex-ftp{fill:#A77BF0;background:#A77BF0}.ex-country{fill:var(--accent)}
.ex-hit{fill:transparent}
.ex-chart g:hover rect:not(.ex-hit){opacity:.8}
.ex-legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:8px 0 0;font-size:12.5px;color:var(--sub)}
.ex-legend span{display:inline-flex;align-items:center;gap:6px}
.swatch.ex-web,.swatch.ex-ssh,.swatch.ex-telnet,.swatch.ex-mail,.swatch.ex-ftp{display:inline-block;width:10px;height:10px;border-radius:2px;vertical-align:-1px}
.ex-bar{display:block;width:100%;height:5px;margin-top:5px;background:rgba(127,140,160,.14);border-radius:2px}
/* Read-only forms (analysts): visibly not editable */
input:disabled,select:disabled,textarea:disabled{background:var(--bg);color:var(--sub);cursor:default}
