*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:#0f172a;color:#e2e8f0}
a{color:#38bdf8}.top{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;background:linear-gradient(90deg,#020617,#1e293b);border-bottom:1px solid #334155;position:sticky;top:0;z-index:5}
.brand{display:flex;gap:12px;align-items:center}.brand strong{font-size:20px;display:block}.brand small{color:#94a3b8}.logo{width:42px;height:42px;border-radius:12px;background:linear-gradient(135deg,#22c55e,#38bdf8);display:grid;place-items:center;font-size:24px;color:white;font-weight:900}
main{max-width:1100px;margin:0 auto;padding:24px}.card{background:#1e293b;border:1px solid #334155;border-radius:16px;padding:20px;margin:16px 0}
.login{max-width:480px;margin:40px auto}label{display:block;margin:12px 0;color:#cbd5e1;font-size:14px}input,select{width:100%;padding:12px;border-radius:10px;border:1px solid #475569;background:#0f172a;color:white;margin-top:6px}
button{cursor:pointer;border-radius:10px;padding:12px 18px;border:1px solid #475569;background:#334155;color:white;font-weight:700}button.primary{background:linear-gradient(135deg,#22c55e,#0ea5e9);border:none}button.ghost{background:transparent}button:disabled{opacity:.45;cursor:not-allowed}
.hidden{display:none!important}.muted{color:#94a3b8}.error{color:#f87171}.badge{background:#22c55e;color:#052e16;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:800}.badge.viewer{background:#f59e0b;color:#451a03}
.scanrow{display:grid;grid-template-columns:1fr 110px auto auto;gap:10px}@media(max-width:700px){.scanrow{grid-template-columns:1fr}}
.progress{margin-top:16px}.progress .bar{height:8px;border-radius:999px;background:linear-gradient(90deg,#22c55e,#38bdf8,#a78bfa);background-size:200% 100%;animation:slide 1.2s infinite linear}@keyframes slide{to{background-position:-200% 0}}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}@media(max-width:800px){.grid{grid-template-columns:repeat(2,1fr)}}
.stat b{font-size:28px;display:block;margin-top:6px}.stat.ok b{color:#4ade80}.stat.warn b{color:#facc15}.stat.err b{color:#f87171}.stat.blank b{color:#c084fc}
.score-card{display:flex;align-items:center;gap:16px;grid-column:span 2}.ring{width:110px;height:110px;transform:rotate(-90deg)}.ring-bg{fill:none;stroke:#334155;stroke-width:10}.ring-fg{fill:none;stroke:#22c55e;stroke-width:10;stroke-linecap:round;stroke-dasharray:326;stroke-dashoffset:0}.score-num b{font-size:36px}
table{width:100%;border-collapse:collapse;font-size:14px}th,td{padding:10px;border-bottom:1px solid #334155;text-align:left;vertical-align:top}th{color:#94a3b8}
.pill{padding:3px 9px;border-radius:999px;font-size:12px;font-weight:800}.pill.OK{background:#14532d;color:#86efac}.pill.WARNING{background:#713f12;color:#fde68a}.pill.ERROR{background:#7f1d1d;color:#fca5a5}.pill.BLANK{background:#581c87;color:#d8b4fe}
.detail{background:#0f172a;border-radius:10px;padding:12px;margin:8px 0;white-space:pre-wrap;word-break:break-word;font-size:13px}
.history{display:flex;flex-wrap:wrap;gap:10px}.history button{text-align:left}.report-head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:center}
footer{text-align:center;color:#64748b;padding:24px;font-size:13px}
@media print{body{background:white;color:black}.top,.hero,.history,footer,.actions{display:none}.card{background:white;color:black;border-color:#ddd}}
