/* AISG dashboard styles — extracted from web/dashboard.html (2026-08-14), content unchanged. */
/* ---- block 1 ---- */

:root{--bg:#04060f;--bg2:#0a0f22;--card:#0d1428cc;--cyan:#22d3ee;--magenta:#e879f9;--violet:#818cf8;--green:#34d399;--red:#f87171;--amber:#fbbf24;--txt:#e2e8f0;--dim:#8ea0c0;--line:#1e2a4a}
*{margin:0;padding:0;box-sizing:border-box}
body{background:var(--bg);color:var(--txt);font-family:'Rajdhani',system-ui,sans-serif;min-height:100vh}
.bg-grid{position:fixed;inset:0;z-index:-2;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:44px 44px;opacity:.3}
.bg-glow{position:fixed;inset:0;z-index:-1;background:radial-gradient(700px 300px at 80% -10%,rgba(34,211,238,.12),transparent 70%),radial-gradient(700px 300px at 10% 100%,rgba(129,140,248,.12),transparent 70%)}
a{color:var(--cyan);text-decoration:none}
button{font-family:'Rajdhani';cursor:pointer}
input,select{font-family:'Rajdhani';background:#0a0f22;border:1px solid var(--line);color:var(--txt);padding:10px 14px;border-radius:8px;font-size:15px;width:100%}
/* autofill Chrome default putih -> samakan dgn theme gelap (input jangan berubah warna saat auto-input) */
input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{
  -webkit-box-shadow:0 0 0 1000px #0a0f22 inset;
  -webkit-text-fill-color:var(--txt);
  transition:background-color 9999s ease-in-out 0s
}
input:focus,select:focus{outline:none;border-color:var(--cyan)}
.hide{display:none!important}
/* top bar */
.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 26px;border-bottom:1px solid var(--line);background:#05081aee;position:sticky;top:0;z-index:5}
.logo{font-family:'Orbitron';font-weight:900;letter-spacing:2px;font-size:18px;color:#fff;text-shadow:0 0 14px rgba(34,211,238,.35)}
.logo .glow{color:var(--cyan);text-shadow:0 0 10px var(--cyan),0 0 26px rgba(34,211,238,.55);animation:glowPulse 3s ease-in-out infinite}
@keyframes glowPulse{0%,100%{text-shadow:0 0 8px var(--cyan),0 0 20px rgba(34,211,238,.45)}50%{text-shadow:0 0 14px var(--cyan),0 0 34px rgba(34,211,238,.8)}}
/* scan visual: radar premium + steps */
.scan-visual{border:1px solid var(--line);border-radius:14px;padding:26px;background:var(--card);margin-bottom:18px;display:none}
.scan-visual.show{display:block}
.scan-grid{display:grid;grid-template-columns:minmax(240px,300px) 1fr;gap:30px;align-items:center;max-width:680px;margin:0 auto}
.radar{position:relative;width:300px;height:300px;justify-self:center}
.radar svg{width:100%;height:100%}
.radar .rings circle{fill:none;stroke:#22d3ee55;stroke-width:1.5}
.radar .rings line{stroke:#22d3ee22;stroke-width:1}
.radar .sweep{transform-origin:100px 100px;animation:sweep 2.6s linear infinite}
.radar .sweep-line{stroke:#22d3ee;stroke-width:2;stroke-linecap:round;filter:drop-shadow(0 0 6px #22d3ee);transform-origin:100px 100px;animation:sweep 2.6s linear infinite}
@keyframes sweep{to{transform:rotate(360deg)}}
.progress-ring{fill:none;stroke:#22d3ee;stroke-width:2.5;stroke-linecap:round;stroke-dasharray:603;stroke-dashoffset:603;transition:stroke-dashoffset .6s ease;filter:drop-shadow(0 0 5px #22d3ee)}
.spark{filter:drop-shadow(0 0 6px #e0faff)}
.ping{fill:none;stroke:#22d3ee;stroke-width:1.5;transform-box:fill-box;transform-origin:center;animation:ping 2.6s ease-out infinite}
.ping.p2{animation-delay:1.3s}
@keyframes ping{0%{transform:scale(.1);opacity:.9}100%{transform:scale(9.4);opacity:0}}
.blip{transform-box:fill-box;transform-origin:center;animation:blipPing 2.4s ease-out forwards;filter:drop-shadow(0 0 7px currentColor)}
@keyframes blipPing{0%{transform:scale(.2);opacity:0}18%{transform:scale(1.2);opacity:1}60%{opacity:.85}100%{transform:scale(.85);opacity:0}}
.blip-sast{fill:#22d3ee;color:#22d3ee}
.blip-secrets{fill:#e879f9;color:#e879f9}
.blip-sca{fill:#fbbf24;color:#fbbf24}
.blip-net{fill:#60a5fa;color:#60a5fa}
.trail{stroke:#22d3ee55;stroke-width:1;stroke-dasharray:3 3;animation:trailFade 2.4s linear forwards}
@keyframes trailFade{0%{opacity:.8}100%{opacity:0}}
.scan-status{font-family:'Orbitron';font-size:14px;letter-spacing:3px;color:var(--cyan);text-align:center;margin:0 0 10px;text-shadow:0 0 10px rgba(34,211,238,.6);animation:statusBlink 1.2s ease-in-out infinite}
@keyframes statusBlink{0%,100%{opacity:1}50%{opacity:.55}}
.scan-stats{display:flex;justify-content:center;gap:44px;margin-top:14px}
.scan-stats b{font-family:'Orbitron';font-size:20px;color:var(--cyan);display:block;text-align:center;text-shadow:0 0 10px rgba(34,211,238,.5)}
.scan-stats span{color:var(--dim);font-size:11px;letter-spacing:2px;display:block;text-align:center}
.scan-steps{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:220px}
.logo em{color:var(--cyan);font-style:normal}
.topbar .right{display:flex;align-items:center;gap:14px;color:var(--dim);font-size:14px}
.plan-badge{border:1px solid var(--cyan);color:var(--cyan);border-radius:999px;padding:3px 12px;font-size:12px;letter-spacing:1px;font-family:'Orbitron'}
/* auth */
#auth-view{max-width:400px;margin:12vh auto;padding:34px;border:1px solid var(--line);border-radius:16px;background:var(--card);text-align:center}
#auth-view h1{font-family:'Orbitron';font-size:22px;margin-bottom:6px}
#auth-view p{color:var(--dim);font-size:14px;margin-bottom:22px}
#auth-view input{margin-bottom:12px}
.btn{display:inline-block;border:none;border-radius:10px;padding:12px 26px;font-weight:700;font-size:15px;letter-spacing:.5px;background:linear-gradient(90deg,var(--cyan),var(--violet));color:#04060f;box-shadow:0 0 20px rgba(34,211,238,.3)}
.btn.sm{padding:7px 14px;font-size:13px}
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--txt)}
.btn.ghost:hover{border-color:var(--cyan)}
/* layout */
.layout{display:grid;grid-template-columns:200px 1fr;min-height:calc(100vh - 60px)}
.side{border-right:1px solid var(--line);padding:22px 14px;background:#05081a88}
.side a{display:block;padding:11px 14px;border-radius:8px;color:var(--dim);font-weight:600;letter-spacing:.5px;margin-bottom:4px;font-size:15px}
.side a:hover,.side a.active{background:#0d1428;color:var(--cyan)}
.side .logout{margin-top:26px;color:var(--red)}
.side .home-link{margin-top:26px;color:var(--dim)}
.side .home-link:hover{color:var(--cyan)}
main{padding:30px}
h2{font-family:'Orbitron';font-size:22px;margin-bottom:20px;letter-spacing:1px}
h2 .dot{color:var(--cyan)}
.card{border:1px solid var(--line);border-radius:14px;padding:20px;background:var(--card);margin-bottom:18px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-bottom:20px}
.metric{border:1px solid var(--line);border-radius:12px;padding:18px;background:var(--card)}
.metric b{font-family:'Orbitron';font-size:26px;display:block;background:linear-gradient(90deg,var(--cyan),var(--magenta));-webkit-background-clip:text;background-clip:text;color:transparent}
.metric span{color:var(--dim);font-size:12px;text-transform:uppercase;letter-spacing:1px}
.bar{height:8px;border-radius:99px;background:#0a0f22;overflow:hidden;margin-top:8px}
.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),var(--violet))}
table{width:100%;border-collapse:collapse;font-size:14px}
th,td{border-bottom:1px solid var(--line);padding:10px 12px;text-align:left;color:var(--dim)}
th{font-family:'Orbitron';font-size:11px;letter-spacing:1px;color:var(--cyan)}
td b{color:var(--txt)}
.sev{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:700}
.sev.critical{background:#f8717111;color:var(--red);border:1px solid var(--red)}
.sev.high{background:#fbbf2411;color:var(--amber);border:1px solid var(--amber)}
.sev.medium{background:#22d3ee11;color:var(--cyan);border:1px solid var(--cyan)}
.sev.low{background:#34d39911;color:var(--green);border:1px solid var(--green)}
.row{display:flex;gap:10px;align-items:center}
.row input{flex:1}
.row select{width:auto}
.msg{padding:12px 16px;border-radius:10px;font-size:14px;margin-bottom:14px}
.msg.ok{border:1px solid var(--green);color:var(--green);background:#34d39911}
.msg.err{border:1px solid var(--red);color:var(--red);background:#f8717111}
.msg.info{border:1px solid var(--cyan);color:var(--cyan);background:#22d3ee11}
.mini-card{border:1px solid var(--line);border-radius:10px;padding:10px 14px;background:#0a0f22}
@media(max-width:760px){.layout{grid-template-columns:1fr}.side{display:flex;overflow-x:auto;gap:6px;border-right:none;border-bottom:1px solid var(--line)}.side a{white-space:nowrap;margin:0}}

/* ---- block 2 ---- */

    .notify{padding:12px 16px;border-radius:10px;font-size:13px;font-weight:600;box-shadow:0 6px 24px rgba(0,0,0,.45);border:1px solid rgba(255,255,255,.08);animation:notifyIn .25s ease}
    .notify.ok{background:linear-gradient(135deg,#052e2b,#0b3d33);color:#4ade80;border-color:#166534}
    .notify.warn{background:linear-gradient(135deg,#3a2a06,#4b340a);color:#fbbf24;border-color:#a16207}
    .notify.err{background:linear-gradient(135deg,#3d0d10,#57121a);color:#f87171;border-color:#991b1b}
    .notify.info{background:linear-gradient(135deg,#0b2239,#0f2c4a);color:#7dd3fc;border-color:#155e75}
    @keyframes notifyIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
  
/* ---- block 3 ---- */

/* SCAN QUOTA EXHAUSTED — LIMIT NOTICE (2026-08-13): kuota scan habis
   -> scan baru diblokir; report lama tetap bisa dibuka. Overlay bisa
   ditutup (closeLimitScreen) — bukan pengunci fitur lagi. */
#limit-overlay{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:radial-gradient(1200px 600px at 50% -10%,rgba(248,113,113,.14),transparent 60%),rgba(4,6,16,.98);backdrop-filter:blur(6px)}
#limit-overlay .lo-box{max-width:540px;margin:24px;text-align:center;padding:46px 38px;border:1px solid rgba(248,113,113,.35);border-radius:18px;background:#0a0f22;box-shadow:0 0 70px rgba(248,113,113,.16)}
#limit-overlay .lo-ico{font-size:48px;margin-bottom:12px;animation:loPulse 2s ease-in-out infinite}
@keyframes loPulse{0%,100%{opacity:1}50%{opacity:.55}}
