/* ============================================================
   vh-asm.css — loaded ONLY by attack-surface.html.
   Product-window dashboard mockups in the real ASM app's dark
   theme. Every selector is asm- prefixed; no shared class is
   restyled, so no other page can be affected by this file.
   ============================================================ */

/* ---------- scoped product palette (deep carbon) ---------- */
.asm-win{--asm-bg:#070709;--asm-panel:#101014;--asm-panel2:#17171C;--asm-line:rgba(255,255,255,0.1);--asm-line2:rgba(255,255,255,0.2);--asm-blue:#3B82F6;--asm-mint:#22C55E;--asm-mintink:#4ADE80;--asm-purple:#8B5CF6;--asm-crit:#EF4444;--asm-high:#F97316;--asm-med:#EAB308;--asm-low:#22C55E;--asm-gray:#6B7280;--asm-head:#F5F5F8;--asm-txt:#C7C7CE;--asm-mut:#8E8E97}

/* ---------- window frame ---------- */
.asm-win{margin-top:var(--s-6);border:1px solid var(--line-2);border-radius:18px;background:var(--asm-bg);overflow:hidden;color:var(--asm-txt);box-shadow:0 30px 80px -30px rgba(0,0,0,0.85),0 0 70px -34px rgba(59,130,246,0.4)}
.asm-win__chrome{display:flex;align-items:center;gap:0.8rem;padding:0.7rem var(--s-5);border-bottom:1px solid var(--asm-line);background:#0A0A0D;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.1em;text-transform:uppercase;color:var(--asm-mut)}
.asm-dots{display:inline-flex;gap:0.34rem;flex:none}
.asm-dots i{width:9px;height:9px;border-radius:50%}
.asm-dots i:nth-child(1){background:#FE5F57}
.asm-dots i:nth-child(2){background:#FEBC2E}
.asm-dots i:nth-child(3){background:#28C840}
.asm-url{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.asm-live{margin-left:auto;flex:none;display:inline-flex;align-items:center;gap:0.45rem;color:var(--asm-mintink);font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.14em;text-transform:uppercase}
.asm-live::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--asm-mintink);animation:asm-pulse 2.2s ease-out infinite}
.asm-note{margin-top:var(--s-3);font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.16em;text-transform:uppercase;color:var(--txt-mut)}
.asm-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
@keyframes asm-pulse{0%{box-shadow:0 0 0 0 rgba(74,222,128,0.5)}70%{box-shadow:0 0 0 7px rgba(74,222,128,0)}100%{box-shadow:0 0 0 0 rgba(74,222,128,0)}}

/* ---------- command center: hero band ---------- */
.asm-hero{position:relative;display:grid;grid-template-columns:1fr auto;gap:var(--s-5);align-items:center;padding:var(--s-5);border-bottom:1px solid var(--asm-line);overflow:hidden}
.asm-hero::before{content:"";position:absolute;inset:0;background:radial-gradient(60% 120% at 8% 0%,rgba(59,130,246,0.09),transparent 60%),radial-gradient(50% 110% at 92% 100%,rgba(139,92,246,0.07),transparent 60%);pointer-events:none}
.asm-hero__copy{position:relative;display:grid;gap:0.55rem}
.asm-eyebrow{display:inline-flex;align-items:center;gap:0.5rem;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.16em;text-transform:uppercase;color:var(--asm-mut)}
.asm-livedot{width:6px;height:6px;border-radius:50%;background:var(--asm-mintink);animation:asm-pulse 2.2s ease-out infinite}
.asm-hero__t{margin:0;font-size:1.25rem;font-weight:600;letter-spacing:-0.02em;color:var(--asm-head);max-width:34ch}
.asm-hero__t em{font-style:italic;color:var(--asm-txt);font-weight:500}
.asm-hero__sub{display:flex;flex-wrap:wrap;gap:var(--s-4);font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.12em;text-transform:uppercase;color:var(--asm-mut)}
.asm-hero__sub b{color:var(--asm-head);margin-right:0.35rem;font-size:0.85rem}
.asm-hero__sub .asm-ok{color:var(--asm-mintink)}

/* exposure score ring */
.asm-ring{position:relative;z-index:1;display:grid;justify-items:center;gap:0.4rem;width:170px}
.asm-ring__wrap{position:relative;width:120px}
.asm-ring__wrap svg{width:100%;display:block}
.asm-ring__bg{fill:none;stroke:rgba(255,255,255,0.1);stroke-width:5.4}
.asm-ring__v{fill:none;stroke:var(--asm-mint);stroke-width:5.4;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset 1.3s var(--ease) 0.1s;filter:drop-shadow(0 0 8px rgba(34,197,94,0.4))}
.asm-ring.is-on .asm-ring__v{stroke-dashoffset:27}
.asm-ring__c{position:absolute;inset:0;display:grid;place-content:center;text-align:center;gap:0}
.asm-ring__g{font-family:var(--font-mono);font-size:2rem;font-weight:600;letter-spacing:-0.02em;color:var(--asm-mintink);line-height:1}
.asm-ring__s{font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut)}
.asm-ring__l{font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.18em;text-transform:uppercase;color:var(--asm-mut)}
.asm-ring__d{font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut);opacity:0;transform:translateY(4px);transition:opacity 0.5s var(--ease) 1.1s,transform 0.5s var(--ease) 1.1s;text-align:center}
.asm-ring__d b{color:#ffb3a6}
.asm-ring.is-on .asm-ring__d{opacity:1;transform:none}

/* ---------- KPI row ---------- */
.asm-kpis{display:grid;grid-template-columns:repeat(4,1fr);border-bottom:1px solid var(--asm-line)}
.asm-kpi{position:relative;display:grid;gap:0.28rem;align-content:start;padding:var(--s-4) var(--s-5);border-right:1px solid var(--asm-line);min-width:0}
.asm-kpi:last-child{border-right:0}
.asm-kpi::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--asm-blue),transparent 70%);opacity:0.55}
.asm-kpi--mint::before{background:linear-gradient(90deg,var(--asm-mint),transparent 70%)}
.asm-kpi--purple::before{background:linear-gradient(90deg,var(--asm-purple),transparent 70%)}
.asm-kpi--hot::before{background:linear-gradient(90deg,var(--asm-crit),transparent 70%)}
.asm-kpi__l{font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.14em;text-transform:uppercase;color:var(--asm-mut)}
.asm-kpi>b{font-family:var(--font-mono);font-size:1.5rem;font-weight:600;letter-spacing:-0.02em;color:var(--asm-head);line-height:1.1;font-variant-numeric:tabular-nums}
.asm-kpi--hot>b{color:#ffb3a6}
.asm-kpi__d{position:absolute;top:calc(var(--s-4) - 0.1rem);right:var(--s-4);font-family:var(--font-mono);font-size:var(--t-2xs);padding:0.1rem 0.42rem;border-radius:100px;border:1px solid}
.asm-bad{color:var(--asm-crit);border-color:rgba(239,68,68,0.32);background:rgba(239,68,68,0.08)}
.asm-kpi__f{font-size:var(--t-2xs);color:var(--asm-mut)}
.asm-spark{width:100%;height:20px;margin-top:0.25rem}
.asm-spark polyline{fill:none;stroke:var(--asm-blue);stroke-width:1.6;opacity:0.75;stroke-dasharray:130;stroke-dashoffset:130}
.asm-kpi--mint .asm-spark polyline{stroke:var(--asm-mint)}
.asm-kpi--purple .asm-spark polyline{stroke:var(--asm-purple)}
.asm-kpi--hot .asm-spark polyline{stroke:var(--asm-crit)}
.asm-app.is-in .asm-spark polyline{animation:asm-draw130 1.2s var(--ease) forwards}
.asm-kpi:nth-child(2) .asm-spark polyline{animation-delay:0.1s}
.asm-kpi:nth-child(3) .asm-spark polyline{animation-delay:0.2s}
.asm-kpi:nth-child(4) .asm-spark polyline{animation-delay:0.3s}
@keyframes asm-draw130{to{stroke-dashoffset:0}}

/* ---------- dashboard panel grid ---------- */
.asm-grid{display:grid;grid-template-columns:1.15fr 1fr;grid-template-areas:"lead sev" "lead scans" "trend trend"}
.asm-panel{padding:var(--s-4) var(--s-5);border-right:1px solid var(--asm-line);border-bottom:1px solid var(--asm-line);min-width:0}
.asm-panel--lead{grid-area:lead;border-bottom:0;display:flex;flex-direction:column}
.asm-heat{margin-top:auto;padding-top:var(--s-4)}
.asm-heat__h{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.14em;text-transform:uppercase;color:var(--asm-mut);margin-bottom:0.5rem}
.asm-heat__grid{display:grid;grid-template-columns:repeat(24,1fr);gap:3px}
.asm-heat__grid i{aspect-ratio:1;border-radius:2px;background:rgba(59,130,246,0.05);transition:background 0.7s var(--ease)}
@media (prefers-reduced-motion:reduce){.asm-heat__grid i{transition:none}}
.asm-panel--sev{grid-area:sev;border-right:0}
.asm-panel--scans{grid-area:scans;border-right:0;border-bottom:0}
.asm-panel--trend{grid-area:trend;border-right:0;border-bottom:0}
.asm-panel__h{display:flex;justify-content:space-between;align-items:center;gap:0.6rem;flex-wrap:wrap;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.14em;text-transform:uppercase;color:#B4B4BC;margin-bottom:var(--s-3)}
.asm-panel__m{color:var(--asm-mut);letter-spacing:0.1em}

/* riskiest domains leaderboard */
.asm-lead{display:grid;gap:0.45rem;align-content:start}
.asm-lrow{display:grid;grid-template-columns:30px 1fr auto auto;gap:0.7rem;align-items:center;padding:0.55rem 0.65rem;border-radius:8px;background:rgba(255,255,255,0.03);font-size:0.85rem}
.asm-lrow:hover{background:rgba(59,130,246,0.07)}
.asm-app.is-in .asm-lrow{animation:asm-slide 0.45s var(--ease) both}
.asm-app.is-in .asm-lrow:nth-child(2){animation-delay:0.07s}
.asm-app.is-in .asm-lrow:nth-child(3){animation-delay:0.14s}
.asm-app.is-in .asm-lrow:nth-child(4){animation-delay:0.21s}
.asm-app.is-in .asm-lrow:nth-child(5){animation-delay:0.28s}
.asm-lrow__n{font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut)}
.asm-lrow__d{font-family:var(--font-mono);font-size:0.8rem;color:var(--asm-head);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.asm-lrow__s{font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut)}
.asm-grade{display:inline-grid;place-content:center;width:24px;height:24px;border-radius:6px;font-family:var(--font-mono);font-size:0.8rem;font-weight:600;border:1px solid}
.asm-grade--a{color:#4ADE80;border-color:rgba(34,197,94,0.4);background:rgba(34,197,94,0.1)}
.asm-grade--b{color:#86efac;border-color:rgba(34,197,94,0.3);background:rgba(34,197,94,0.07)}
.asm-grade--c{color:#fde047;border-color:rgba(234,179,8,0.4);background:rgba(234,179,8,0.1)}
.asm-grade--d{color:#fdba74;border-color:rgba(249,115,22,0.4);background:rgba(249,115,22,0.1)}
.asm-grade--f{color:#fca5a5;border-color:rgba(239,68,68,0.4);background:rgba(239,68,68,0.1)}
@keyframes asm-slide{from{opacity:0;transform:translateY(-9px)}}

/* severity mix donut */
.asm-donutwrap{display:grid;grid-template-columns:auto 1fr;gap:var(--s-4);align-items:center}
.asm-donut{position:relative;width:126px;flex:none}
.asm-donut svg{width:100%;display:block}
.asm-donut circle{fill:none;stroke-width:6.5;transition:opacity 0.3s var(--ease),stroke-width 0.3s var(--ease)}
.asm-app.is-in .asm-donut circle{animation:asm-seg 1s var(--ease) both}
.asm-donut circle:nth-of-type(2){animation-delay:0.1s}
.asm-donut circle:nth-of-type(3){animation-delay:0.2s}
.asm-donut circle:nth-of-type(4){animation-delay:0.3s}
.asm-donut circle:nth-of-type(5){animation-delay:0.4s}
@keyframes asm-seg{from{stroke-dasharray:0 100}}
.asm-donut[data-hl] circle{opacity:0.22}
.asm-donut[data-hl="a"] circle[data-k="a"],.asm-donut[data-hl="b"] circle[data-k="b"],.asm-donut[data-hl="c"] circle[data-k="c"],.asm-donut[data-hl="d"] circle[data-k="d"],.asm-donut[data-hl="e"] circle[data-k="e"]{opacity:1;stroke-width:8.4}
.asm-donut__c{position:absolute;inset:0;display:grid;place-content:center;text-align:center;gap:0.1rem}
.asm-donut__c b{font-family:var(--font-mono);font-size:0.95rem;color:var(--asm-head)}
.asm-donut__c span{font-family:var(--font-mono);font-size:0.55rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--asm-mut)}
.asm-legend{list-style:none;margin:0;padding:0;display:grid;gap:0.42rem}
.asm-legend li{display:grid;grid-template-columns:10px 1fr auto auto;gap:0.6rem;align-items:center;font-size:0.84rem;color:var(--asm-txt);border-radius:6px;padding:0.1rem 0.25rem}
.asm-legend li[data-k]{cursor:default}
.asm-legend li:hover{background:rgba(255,255,255,0.05)}
.asm-legend i{width:9px;height:9px;border-radius:3px}
.asm-legend b{font-family:var(--font-mono);font-weight:500;color:var(--asm-head)}
.asm-legend .asm-pct{font-family:var(--font-mono);color:var(--asm-mut);font-size:var(--t-2xs)}

/* active scans */
.asm-scans{display:grid;gap:0.55rem}
.asm-scanrow{display:grid;gap:0.3rem;padding:0.55rem 0.65rem;border-radius:8px;background:rgba(255,255,255,0.03)}
.asm-scanrow__t{display:flex;align-items:center;gap:0.55rem;font-size:0.82rem}
.asm-scanrow__d{font-family:var(--font-mono);color:var(--asm-head);font-size:0.8rem}
.asm-scanrow__k{font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.08em;text-transform:uppercase;color:#9cc0ff;border:1px solid rgba(59,130,246,0.35);background:rgba(59,130,246,0.08);border-radius:6px;padding:0.08rem 0.35rem}
.asm-scanrow__p{margin-left:auto;font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut);font-variant-numeric:tabular-nums}
.asm-prog{height:6px;border-radius:100px;background:rgba(255,255,255,0.09);overflow:hidden}
.asm-prog i{display:block;height:100%;width:0;border-radius:100px;background:linear-gradient(90deg,var(--asm-blue),#60a5fa);transition:width 0.5s linear}
.asm-scanrow__s{font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut)}
.asm-livepill{font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.12em;text-transform:uppercase;color:var(--asm-mintink);border:1px solid rgba(34,197,94,0.35);background:rgba(34,197,94,0.08);border-radius:100px;padding:0.14rem 0.5rem}

/* vulnerability trend area */
.asm-trend svg{width:100%;height:auto;display:block}
.asm-trend__fill{opacity:0}
.asm-app.is-in .asm-trend__fill{animation:asm-fadein 0.9s var(--ease) 0.9s forwards}
.asm-trend__line{fill:none;stroke:var(--asm-blue);stroke-width:1.8;stroke-linejoin:round;stroke-dasharray:400;stroke-dashoffset:400}
.asm-app.is-in .asm-trend__line{animation:asm-draw400 1.6s var(--ease) 0.2s forwards}
.asm-trend__ax{font-family:var(--font-mono);font-size:4.2px;letter-spacing:0.08em;fill:var(--asm-mut)}
.asm-trend__gl{stroke:rgba(255,255,255,0.08);stroke-width:0.5}
@keyframes asm-draw400{to{stroke-dashoffset:0}}
@keyframes asm-fadein{to{opacity:1}}

/* ---------- live scan window ---------- */
.asm-scanwin__body{display:grid;grid-template-columns:280px 1fr;gap:0}
.asm-stages{display:grid;gap:0;align-content:start;padding:var(--s-4) var(--s-5);border-right:1px solid var(--asm-line)}
.asm-stage{position:relative;display:flex;align-items:center;gap:0.7rem;padding:0.55rem 0;font-family:var(--font-mono);font-size:0.78rem;color:var(--asm-mut)}
.asm-stage::before{content:"";position:absolute;left:8px;top:2rem;bottom:-0.4rem;width:1px;background:var(--asm-line)}
.asm-stage:last-child::before{display:none}
.asm-stage__pip{position:relative;z-index:1;flex:none;width:17px;height:17px;border-radius:50%;border:1.5px solid var(--asm-line2);background:var(--asm-bg);display:grid;place-content:center}
.asm-stage[data-s="done"]{color:var(--asm-txt)}
.asm-stage[data-s="done"] .asm-stage__pip{border-color:rgba(34,197,94,0.6);background:rgba(34,197,94,0.12)}
.asm-stage[data-s="done"] .asm-stage__pip::after{content:"✓";font-size:9px;color:var(--asm-mintink)}
.asm-stage[data-s="run"]{color:var(--asm-head)}
.asm-stage[data-s="run"] .asm-stage__pip{border-color:transparent;border-top-color:var(--asm-blue);border-right-color:var(--asm-blue);animation:asm-spin 0.9s linear infinite}
.asm-stage[data-s="run"] .asm-stage__tx{color:#9cc0ff}
@keyframes asm-spin{to{transform:rotate(360deg)}}
.asm-chipsrow{display:flex;flex-wrap:wrap;gap:0.5rem;padding:var(--s-3) var(--s-5);border-top:1px solid var(--asm-line)}
.asm-cchip{display:inline-flex;align-items:center;gap:0.45rem;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.1em;text-transform:uppercase;color:var(--asm-mut);border:1px solid var(--asm-line);border-radius:100px;padding:0.22rem 0.6rem}
.asm-cchip b{color:var(--asm-head);font-variant-numeric:tabular-nums}
.asm-cchip::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--asm-blue)}
.asm-cchip--mint::before{background:var(--asm-mint)}
.asm-cchip--purple::before{background:var(--asm-purple)}
.asm-cchip--hot::before{background:var(--asm-crit)}
.asm-term{display:grid;grid-template-rows:auto 1fr;min-width:0}
.asm-term__bar{display:flex;align-items:center;gap:0.7rem;padding:0.55rem var(--s-4);border-bottom:1px solid var(--asm-line);background:#0A0A0D;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.12em;text-transform:uppercase;color:var(--asm-mut)}
.asm-term__list{list-style:none;margin:0;padding:var(--s-3) var(--s-4);display:grid;gap:0.3rem;align-content:start;min-height:284px;background:#0a0a0d}
.asm-term__list li{display:grid;grid-template-columns:64px 92px 1fr;gap:0.7rem;align-items:baseline;font-family:var(--font-mono);font-size:0.78rem}
.asm-term__list li.is-new{animation:asm-slide 0.4s var(--ease)}
.asm-tl__t{color:var(--asm-mut);font-size:var(--t-2xs)}
.asm-tl__k{font-size:var(--t-2xs);letter-spacing:0.06em;text-transform:uppercase;text-align:center;padding:0.1rem 0.25rem;border-radius:5px;border:1px solid}
.asm-tl__k--sub{color:#9cc0ff;border-color:rgba(59,130,246,0.35);background:rgba(59,130,246,0.08)}
.asm-tl__k--srv{color:#86efac;border-color:rgba(34,197,94,0.35);background:rgba(34,197,94,0.08)}
.asm-tl__k--tech{color:#d8b4fe;border-color:rgba(139,92,246,0.35);background:rgba(139,92,246,0.08)}
.asm-tl__k--port{color:#fde047;border-color:rgba(234,179,8,0.35);background:rgba(234,179,8,0.08)}
.asm-tl__k--ip{color:#B4B4BC;border-color:var(--asm-line2)}
.asm-tl__k--cert{color:#fdba74;border-color:rgba(249,115,22,0.35);background:rgba(249,115,22,0.08)}
.asm-tl__k--vuln{color:#fca5a5;border-color:rgba(239,68,68,0.35);background:rgba(239,68,68,0.08)}
.asm-tl__v{color:var(--asm-txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- vulnerability report + AI fix window ---------- */
.asm-vuln__head{display:flex;flex-wrap:wrap;align-items:center;gap:0.6rem;padding:var(--s-4) var(--s-5);border-bottom:1px solid var(--asm-line)}
.asm-sev{font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.1em;text-transform:uppercase;padding:0.18rem 0.5rem;border-radius:6px;border:1px solid}
.asm-sev--high{color:#fdba74;border-color:rgba(249,115,22,0.4);background:rgba(249,115,22,0.1)}
.asm-sev--crit{color:#fca5a5;border-color:rgba(239,68,68,0.45);background:rgba(239,68,68,0.12)}
.asm-vuln__t{font-size:0.95rem;font-weight:600;color:var(--asm-head);letter-spacing:-0.01em}
.asm-vuln__host{font-family:var(--font-mono);font-size:0.78rem;color:var(--asm-mut)}
.asm-status{margin-left:auto;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.1em;text-transform:uppercase;padding:0.18rem 0.5rem;border-radius:6px;border:1px solid}
.asm-status[data-st="open"]{color:#fca5a5;border-color:rgba(239,68,68,0.4);background:rgba(239,68,68,0.1)}
.asm-status[data-st="retesting"]{color:#9cc0ff;border-color:rgba(59,130,246,0.35);background:linear-gradient(90deg,rgba(59,130,246,0.06),rgba(59,130,246,0.22),rgba(59,130,246,0.06));background-size:200% 100%;animation:asm-shim 1.1s linear infinite}
.asm-status[data-st="fixed"]{color:var(--asm-mintink);border-color:rgba(34,197,94,0.4);background:rgba(34,197,94,0.1)}
@keyframes asm-shim{to{background-position:-200% 0}}
.asm-vuln__body{display:grid;grid-template-columns:1fr 1fr;gap:0}
.asm-evid{border-right:1px solid var(--asm-line);min-width:0}
.asm-etabs{display:flex;gap:0.2rem;padding:0 var(--s-4);border-bottom:1px solid var(--asm-line);background:#0A0A0D;overflow-x:auto;scrollbar-width:none}
.asm-etabs::-webkit-scrollbar{display:none}
.asm-etab{appearance:none;background:none;border:0;border-bottom:2px solid transparent;padding:0.7rem 0.8rem;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.12em;text-transform:uppercase;color:var(--asm-mut);cursor:pointer;white-space:nowrap;transition:color 0.25s var(--ease)}
.asm-etab:hover{color:#C7C7CE}
.asm-etab.is-active{color:#F5F5F8;border-bottom-color:var(--asm-blue)}
.asm-epane{display:none;margin:0;padding:var(--s-4);font-family:var(--font-mono);font-size:0.76rem;line-height:1.55;color:var(--asm-txt);background:#0a0a0d;overflow-x:auto;min-height:190px}
.asm-epane.is-active{display:block}
.asm-epane .k{color:#9cc0ff}
.asm-epane .s{color:#86efac}
.asm-epane .c{color:var(--asm-mut)}
.asm-evid__foot{display:flex;align-items:center;gap:0.6rem;flex-wrap:wrap;padding:var(--s-3) var(--s-4);border-top:1px solid var(--asm-line);font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.1em;text-transform:uppercase;color:var(--asm-mut)}
.asm-evid__foot b{color:var(--asm-txt)}
.asm-retest{margin-left:auto;appearance:none;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.08em;text-transform:uppercase;color:var(--asm-mintink);border:1px solid rgba(34,197,94,0.4);background:rgba(34,197,94,0.08);border-radius:8px;padding:0.32rem 0.7rem;cursor:pointer;transition:background 0.2s var(--ease),transform 0.2s var(--ease)}
.asm-retest:hover{background:rgba(34,197,94,0.16);transform:translateY(-1px)}
.asm-retest:disabled{cursor:default;opacity:0.8;transform:none}
.asm-fix{display:grid;grid-template-rows:auto 1fr auto;min-width:0}
.asm-fix__bar{display:flex;align-items:center;gap:0.6rem;padding:0.55rem var(--s-4);border-bottom:1px solid var(--asm-line);background:#0A0A0D;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.12em;text-transform:uppercase;color:#d8b4fe}
.asm-fix__bar::before{content:"✦";color:#a78bfa}
.asm-fix__body{padding:var(--s-4);background:#0a0a0d;font-family:var(--font-mono);font-size:0.78rem;line-height:1.6;color:var(--asm-txt);min-height:190px}
.asm-fix__body p{margin:0 0 0.35rem}
.asm-fix__body p.is-hidden{display:none}
.asm-fix__body .h{color:#d8b4fe;font-weight:600}
.asm-fix__body .n{color:#9cc0ff}
.asm-fix__body .code{color:#86efac;background:rgba(34,197,94,0.07);border-radius:4px;padding:0 0.3rem}
.asm-fix__cursor{display:inline-block;width:7px;height:0.95em;background:#a78bfa;vertical-align:-0.15em;animation:asm-blink 0.85s steps(1) infinite}
@keyframes asm-blink{50%{opacity:0}}
.asm-fix__foot{display:flex;align-items:center;gap:0.6rem;padding:var(--s-3) var(--s-4);border-top:1px solid var(--asm-line);font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.08em;text-transform:uppercase;color:var(--asm-mut);opacity:0;transition:opacity 0.5s var(--ease)}
.asm-fix.is-done .asm-fix__foot{opacity:1}

/* ---------- responsive ---------- */
@media (max-width:900px){
 .asm-hero{grid-template-columns:1fr;justify-items:start}
 .asm-ring{justify-self:center}
 .asm-kpis{grid-template-columns:repeat(2,1fr)}
 .asm-kpi{border-bottom:1px solid var(--asm-line)}
 .asm-kpi:nth-child(2n){border-right:0}
 .asm-grid{grid-template-columns:1fr;grid-template-areas:"lead" "sev" "scans" "trend"}
 .asm-panel{border-right:0}
 .asm-panel--lead{border-bottom:1px solid var(--asm-line)}
 .asm-panel--scans{border-bottom:1px solid var(--asm-line)}
 .asm-scanwin__body{grid-template-columns:1fr}
 .asm-stages{border-right:0;border-bottom:1px solid var(--asm-line)}
 .asm-vuln__body{grid-template-columns:1fr}
 .asm-evid{border-right:0;border-bottom:1px solid var(--asm-line)}
}
@media (max-width:640px){
 .asm-url{display:none}
 .asm-term__list li{grid-template-columns:76px 1fr}
 .asm-tl__t{display:none}
 .asm-tl__v{white-space:normal}
 .asm-term__list{min-height:0}
 .asm-donutwrap{grid-template-columns:1fr;justify-items:center}
 .asm-status{margin-left:0}
 .asm-lrow{grid-template-columns:24px 1fr auto}
 .asm-lrow__s{display:none}
}

/* ---------- reduced motion: render final states ---------- */
/* live hero monitor — discovery grid sweep */
.asm-mon{position:relative;z-index:1;display:grid;gap:0.55rem;width:238px;padding:var(--s-4);border:1px solid var(--asm-line);border-radius:12px;background:rgba(59,130,246,0.04)}
.asm-mon__top{display:flex;justify-content:space-between;align-items:baseline;gap:0.5rem}
.asm-mon__l{font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.14em;text-transform:uppercase;color:var(--asm-mut)}
.asm-mon__nwrap{display:flex;align-items:baseline;gap:0.35rem}
.asm-mon__n{font-family:var(--font-mono);font-size:1.7rem;font-weight:600;line-height:1;color:#4ADE80}
.asm-mon__s{font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut)}
.asm-mon__viz{display:grid;grid-template-columns:repeat(12,1fr);grid-auto-rows:1fr;gap:2.5px;height:52px}
.asm-mon__viz i{border-radius:1.5px;background:rgba(59,130,246,0.16);transition:background 0.45s var(--ease),box-shadow 0.45s var(--ease)}
.asm-mon__viz i.on{background:#60A5FA;box-shadow:0 0 5px rgba(59,130,246,0.85)}
.asm-mon__viz i.hit{background:var(--asm-mintink);box-shadow:0 0 6px rgba(74,222,128,0.85)}
.asm-mon__pill{justify-self:start;display:inline-flex;align-items:center;gap:0.4rem;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.12em;text-transform:uppercase;color:var(--asm-mintink);border:1px solid rgba(34,197,94,0.32);background:rgba(34,197,94,0.08);border-radius:100px;padding:0.2rem 0.55rem}
.asm-mon__pill::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--asm-mintink);animation:asm-pulse 1.8s ease-out infinite}
.asm-mon__foot{font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut)}
.asm-mon__foot b{color:#ffb3a6}
@media (max-width:900px){.asm-mon{width:auto;justify-self:stretch}}
@media (prefers-reduced-motion:reduce){.asm-mon__viz i,.asm-mon__pill::before{transition:none;animation:none}}

@media (prefers-reduced-motion:reduce){
 .asm-live::before,.asm-livedot{animation:none}
 .asm-ring__v{transition:none;stroke-dashoffset:27}
 .asm-ring__d{opacity:1;transform:none;transition:none}
 .asm-spark polyline{animation:none!important;stroke-dashoffset:0}
 .asm-app.is-in .asm-donut circle,.asm-donut circle{animation:none}
 .asm-trend__line{animation:none!important;stroke-dashoffset:0}
 .asm-trend__fill{animation:none!important;opacity:1}
 .asm-app.is-in .asm-lrow{animation:none}
 .asm-term__list li.is-new{animation:none}
 .asm-stage[data-s="run"] .asm-stage__pip{animation:none;border-color:var(--asm-blue)}
 .asm-status[data-st="retesting"]{animation:none}
 .asm-fix__cursor{animation:none;display:none}
 .asm-prog i{transition:none}
 .asm-retest,.asm-lrow,.asm-legend li{transition:none}
}

/* ============================================================
   recon map (asm-rx) — attacker's-eye asset-discovery console.
   Root seed in the centre, discovered assets radiating outward,
   SVG wires between them, dossier inspector on the right and a
   live discovery ticker below the map.
   ============================================================ */
.asm-rx__body{display:grid;grid-template-columns:minmax(0,1fr) 280px;align-items:stretch}
.asm-rx__main{min-width:0;display:flex;flex-direction:column;border-right:1px solid var(--asm-line)}

/* seed / status bar */
.asm-rx__bar{display:flex;align-items:center;gap:0.7rem;flex-wrap:wrap;padding:0.55rem var(--s-4);border-bottom:1px solid var(--asm-line);background:rgba(255,255,255,0.02)}
.asm-rx__seedl{font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.14em;text-transform:uppercase;color:var(--asm-mut)}
.asm-rx__seed{display:inline-flex;align-items:center;gap:0.45rem;padding:0.28rem 0.65rem;border:1px solid var(--asm-line2);border-radius:8px;background:rgba(0,0,0,0.35);font-family:var(--font-mono);font-size:0.8rem;color:var(--asm-head)}
.asm-rx__seed svg{width:13px;height:13px;color:#9cc0ff;flex:none}
.asm-rx__pass{display:inline-flex;align-items:center;gap:0.45rem;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.1em;text-transform:uppercase;color:#9cc0ff;white-space:nowrap}
.asm-rx__pass i{width:6px;height:6px;border-radius:50%;background:var(--asm-blue);animation:asm-pulse 2s ease-out infinite}
.asm-rx__pass b{color:var(--asm-head);font-variant-numeric:tabular-nums}
.asm-rx__tally{margin-left:auto;font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.08em;text-transform:uppercase;color:var(--asm-mut);white-space:nowrap}
.asm-rx__tally b{color:var(--asm-head);font-variant-numeric:tabular-nums}

/* canvas + stage */
.asm-rx__canvas{position:relative;height:430px;overflow:hidden;background:radial-gradient(rgba(255,255,255,0.05) 1px,transparent 1px);background-size:22px 22px;background-position:11px 11px}
.asm-rx__canvas::before{content:"";position:absolute;inset:0;background:repeating-radial-gradient(circle at 46% 47%,rgba(59,130,246,0.09) 0 1px,transparent 1px 74px);pointer-events:none}
.asm-rx__stage{position:absolute;inset:0}
.asm-rx__wires{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:1}
.asm-rx__wires path{fill:none;stroke-width:1.5;transition:opacity 0.25s var(--ease)}
.asm-rx__wires .w-ok{stroke:rgba(255,255,255,0.18);stroke-dasharray:2 5}
.asm-rx__wires .w-warn{stroke:rgba(234,179,8,0.5);stroke-dasharray:5 4}
.asm-rx__wires .w-bad{stroke:rgba(239,68,68,0.6)}
.asm-rx__wires .w-dawn{stroke:rgba(255,122,69,0.65);stroke-dasharray:5 4}
.asm-rx__wires .w-chain{stroke:rgba(99,131,246,0.55)}
.asm-rx__wires.has-sel path{opacity:0.3}
.asm-rx__wires.has-sel path.is-hot{opacity:1;stroke-width:2.2}

/* nodes */
.asm-rxn{appearance:none;border:0;background:none;padding:0;position:absolute;display:grid;justify-items:center;gap:0.32rem;width:124px;cursor:pointer;color:var(--asm-txt);z-index:2;transition:opacity 0.25s var(--ease)}
.asm-rxn.is-dim{opacity:0.45}
.asm-rxn__ring{position:relative;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;border:2px solid var(--asm-line2);background:rgba(10,10,13,0.92);color:#B4B4BC;transition:border-color 0.2s var(--ease),box-shadow 0.2s var(--ease)}
.asm-rxn__ring svg{width:17px;height:17px}
.asm-rxn:hover .asm-rxn__ring{border-color:rgba(255,255,255,0.55)}
.asm-rxn--root .asm-rxn__ring{width:58px;height:58px;border-color:rgba(59,130,246,0.65);color:#9cc0ff}
.asm-rxn--root .asm-rxn__ring svg{width:22px;height:22px}
.asm-rxn--root .asm-rxn__ring::after{content:"";position:absolute;inset:-3px;border-radius:50%;border:1.5px solid rgba(59,130,246,0.55);animation:asm-rxping 2.6s ease-out infinite}
.asm-rxn--sm .asm-rxn__ring{width:36px;height:36px}
.asm-rxn--sm .asm-rxn__ring svg{width:14px;height:14px}
.asm-rxn[data-risk="warn"] .asm-rxn__ring{border-color:rgba(234,179,8,0.65);color:#fde047}
.asm-rxn[data-risk="bad"] .asm-rxn__ring{border-color:rgba(239,68,68,0.7);color:#fca5a5}
.asm-rxn[data-risk="dawn"] .asm-rxn__ring{border-color:rgba(255,122,69,0.75);color:#FFB394;box-shadow:0 0 20px -6px rgba(255,122,69,0.65)}
.asm-rxn.is-sel .asm-rxn__ring{border-color:#FF7A45;color:#FFB394;box-shadow:0 0 0 3px rgba(255,122,69,0.35),0 0 20px -4px rgba(255,122,69,0.6)}
.asm-rxn__bang{position:absolute;top:-6px;right:-6px;width:15px;height:15px;border-radius:50%;display:grid;place-items:center;font-size:0.6rem;font-weight:700;color:#0A0A0D;background:#EAB308}
.asm-rxn[data-risk="bad"] .asm-rxn__bang{background:#EF4444;color:#fff}
.asm-rxn__tx{display:grid;justify-items:center;gap:0.14rem;min-width:0;max-width:124px}
.asm-rxn__tx b{font-family:var(--font-mono);font-size:0.66rem;font-weight:600;color:var(--asm-head);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:124px}
.asm-rxn__tx small{font-size:0.6rem;color:var(--asm-mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:124px}
.asm-rxn__flag{font-family:var(--font-mono);font-size:0.55rem;letter-spacing:0.08em;text-transform:uppercase;color:#FFB394;border:1px solid rgba(255,122,69,0.45);background:rgba(255,122,69,0.1);border-radius:100px;padding:0.08rem 0.4rem;white-space:nowrap}
@keyframes asm-rxping{from{transform:scale(1);opacity:0.8}to{transform:scale(2.1);opacity:0}}
@keyframes asm-rxpop{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:scale(1)}}
.asm-rx.is-live .asm-rxn{animation:asm-rxpop 0.4s var(--ease) backwards;animation-delay:var(--d,0s)}

/* discovery ticker */
.asm-rx__ticker{border-top:1px solid var(--asm-line);background:#0a0a0d}
.asm-rx__tickh{display:flex;justify-content:space-between;gap:0.7rem;padding:0.45rem var(--s-4);border-bottom:1px solid rgba(255,255,255,0.05);font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.12em;text-transform:uppercase;color:var(--asm-mut)}
.asm-rx__ticklist{list-style:none;margin:0;padding:0.45rem var(--s-4) 0.55rem;display:grid;gap:0.28rem;align-content:start;min-height:8.6rem}
.asm-rx__ticklist li{display:grid;grid-template-columns:56px 38px minmax(0,1fr) auto;gap:0.6rem;align-items:baseline;font-family:var(--font-mono);font-size:0.74rem}
.asm-rx__ticklist li.is-new{animation:asm-slide 0.4s var(--ease)}
.asm-rx__tt{color:var(--asm-mut);font-size:var(--t-2xs);font-variant-numeric:tabular-nums}
.asm-rx__tk{font-size:0.56rem;letter-spacing:0.08em;text-transform:uppercase;text-align:center;padding:0.08rem 0.2rem;border-radius:5px;border:1px solid rgba(34,197,94,0.35);background:rgba(34,197,94,0.08);color:#86efac}
.asm-rx__tv{color:var(--asm-txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.asm-rx__ts{color:var(--asm-mut);font-size:var(--t-2xs);white-space:nowrap}

/* inspector */
.asm-rx__insp{padding:var(--s-4);display:grid;gap:0.65rem;align-content:start;background:rgba(255,255,255,0.015)}
.asm-rxi__hd{display:flex;align-items:center;gap:0.6rem}
.asm-rxi__ic{flex:none;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;border:1.5px solid var(--asm-line2);color:#B4B4BC;background:rgba(255,255,255,0.03)}
.asm-rxi__ic svg{width:15px;height:15px}
.asm-rxi__hd[data-risk="ok"] .asm-rxi__ic,.asm-rxi__hd[data-risk="root"] .asm-rxi__ic{border-color:rgba(99,131,246,0.55);color:#93b1f8;background:rgba(59,130,246,0.07)}
.asm-rxi__hd[data-risk="warn"] .asm-rxi__ic{border-color:rgba(234,179,8,0.6);color:#fde047;background:rgba(234,179,8,0.07)}
.asm-rxi__hd[data-risk="bad"] .asm-rxi__ic{border-color:rgba(239,68,68,0.6);color:#fca5a5;background:rgba(239,68,68,0.07)}
.asm-rxi__hd[data-risk="dawn"] .asm-rxi__ic{border-color:rgba(255,122,69,0.6);color:#FFB394;background:rgba(255,122,69,0.07)}
.asm-rxi__hd b{font-family:var(--font-mono);font-size:0.88rem;font-weight:600;color:var(--asm-head);line-height:1.3;overflow-wrap:anywhere}
.asm-rxi__hd small{display:block;font-family:var(--font-mono);font-size:var(--t-2xs);color:var(--asm-mut);margin-top:0.1rem}
.asm-rxi__kv{display:grid;gap:0}
.asm-rxi__kv > div{display:grid;grid-template-columns:86px 1fr;gap:0.7rem;align-items:baseline;padding:0.32rem 0;border-bottom:1px solid rgba(255,255,255,0.05);font-size:0.76rem}
.asm-rxi__kv > div:last-child{border-bottom:0}
.asm-rxi__kv > div > span{color:var(--asm-mut)}
.asm-rxi__kv b{font-family:var(--font-mono);font-weight:500;color:var(--asm-head);min-width:0;overflow-wrap:anywhere;line-height:1.45}
.asm-rxi__l{font-family:var(--font-mono);font-size:var(--t-2xs);letter-spacing:0.12em;text-transform:uppercase;color:var(--asm-mut);margin-top:0.15rem}
.asm-rxi__chips{display:flex;flex-wrap:wrap;gap:0.3rem}
.asm-rxi__chips > span{font-family:var(--font-mono);font-size:0.68rem;color:#C7C7CE;border:1px solid var(--asm-line2);border-radius:6px;padding:0.1rem 0.42rem;background:rgba(255,255,255,0.02)}
.asm-rxi__chips > span.is-warn{color:#fde047;border-color:rgba(234,179,8,0.45);background:rgba(234,179,8,0.08)}
.asm-rxi__chips > span.is-bad{color:#fca5a5;border-color:rgba(239,68,68,0.5);background:rgba(239,68,68,0.1)}
.asm-rxi__verdict{display:grid;gap:0.45rem;padding-top:0.55rem;border-top:1px solid var(--asm-line)}
.asm-rxi__verdict > p{margin:0;font-size:0.8rem;line-height:1.55;color:var(--asm-txt)}
.asm-rxi__sev{justify-self:start;display:inline-block;font-family:var(--font-mono);font-size:0.66rem;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;padding:0.12rem 0.5rem;border-radius:5px}
.asm-rxi__sev--crit{background:#DC2626;color:#fff}
.asm-rxi__sev--high{background:#C2410C;color:#fff}
.asm-rxi__sev--med{background:#EAB308;color:#101014}
.asm-rxi__sev--low{background:#3f3f46;color:#e4e4e7}
.asm-rxi__sev--watch{background:#3f3f46;color:#e4e4e7}
.asm-rxi__sev--ok{background:#166534;color:#dcfce7}
.asm-rxi__hint{font-size:0.7rem;line-height:1.5;color:var(--asm-mut);border-top:1px solid rgba(255,255,255,0.05);padding-top:0.5rem}

/* responsive */
@media (max-width:900px){
 .asm-rx__body{grid-template-columns:1fr}
 .asm-rx__main{border-right:0}
 .asm-rx__insp{border-top:1px solid var(--asm-line)}
 .asm-rx__canvas{height:390px}
}
@media (max-width:760px){
 .asm-rx__tally{display:none}
 .asm-rx__canvas{height:auto;background:none}
 .asm-rx__canvas::before{display:none}
 .asm-rx__wires{display:none}
 .asm-rx__stage{position:static;display:flex;flex-wrap:wrap;gap:0.55rem;padding:var(--s-4)}
 .asm-rxn{position:static;width:auto;flex:1 1 46%;min-width:0;grid-template-columns:auto minmax(0,1fr);justify-items:start;align-items:center;gap:0.55rem;text-align:left;padding:0.45rem 0.55rem;border:1px solid var(--asm-line);border-radius:10px;background:rgba(255,255,255,0.02)}
 .asm-rxn__ring,.asm-rxn--root .asm-rxn__ring{width:36px;height:36px}
 .asm-rxn--root .asm-rxn__ring::after{display:none}
 .asm-rxn__tx{justify-items:start;max-width:none;min-width:0;width:100%}
 .asm-rxn__tx b,.asm-rxn__tx small{max-width:100%}
 .asm-rx.is-live .asm-rxn{animation:none}
 .asm-rx__ticklist li{grid-template-columns:38px minmax(0,1fr)}
 .asm-rx__tt,.asm-rx__ts{display:none}
 .asm-rx__tv{white-space:normal}
 .asm-rx__ticklist{min-height:0}
}
@media (prefers-reduced-motion:reduce){
 .asm-rx__pass i{animation:none}
 .asm-rxn--root .asm-rxn__ring::after{animation:none;opacity:0.4}
 .asm-rx.is-live .asm-rxn{animation:none}
 .asm-rx__ticklist li.is-new{animation:none}
 .asm-rxn,.asm-rxn__ring,.asm-rx__wires path{transition:none}
}
