:root{--bg:#f4f6fb;--card:#fff;--tx:#1d2433;--mu:#6b7488;--br:#e4e8f1;--p:#4f46e5;--a:#06b6d4;--g:#10b981;--o:#f59e0b;--r:#ef4444}
*{box-sizing:border-box}body{margin:0;font-family:system-ui,"Segoe UI",Roboto,Arial,sans-serif;background:var(--bg);color:var(--tx)}
header.top{background:linear-gradient(90deg,#312e81,#4f46e5 60%,#06b6d4);color:#fff;padding:14px 24px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
header.top h1{font-size:18px;margin:0;flex:1}header.top a{color:#fff;text-decoration:none;padding:7px 13px;border-radius:8px;background:#ffffff26;font-size:14px}
header.top a.on{background:#fff;color:#312e81;font-weight:600}
main{max-width:1180px;margin:20px auto;padding:0 16px}
h2.t{font-size:20px;margin:0}
.bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:16px}
.bar select,.bar input,.btn{padding:8px 12px;border:1px solid var(--br);border-radius:8px;background:#fff;font-size:14px;color:var(--tx);text-decoration:none;cursor:pointer}
.chips{display:flex;gap:6px;flex-wrap:wrap}.chips a{border:1px solid var(--br);background:#fff;padding:7px 12px;border-radius:99px;font-size:13px;color:var(--tx);text-decoration:none}.chips a.on{background:var(--p);color:#fff;border-color:var(--p)}
.grid{display:grid;gap:14px}.k4{grid-template-columns:repeat(4,1fr)}.g2{grid-template-columns:2fr 1fr}.g3{grid-template-columns:repeat(3,1fr)}.g2e{grid-template-columns:1fr 1fr}
@media(max-width:860px){.k4{grid-template-columns:1fr 1fr}.g2,.g3,.g2e{grid-template-columns:1fr}}
.card{background:var(--card);border:1px solid var(--br);border-radius:14px;padding:16px;box-shadow:0 1px 2px #0000000a;min-width:0}
.card h3{margin:0 0 10px;font-size:14px;color:var(--mu);font-weight:600}
.kpi{border-top:4px solid var(--c)}.kpi .v{font-size:30px;font-weight:700}.kpi .d{font-size:13px;margin-top:4px;color:var(--mu)}.up{color:var(--g)!important}.dn{color:var(--r)!important}
table{width:100%;border-collapse:collapse;font-size:14px}th{text-align:left;color:var(--mu);font-weight:600;padding:8px;border-bottom:1px solid var(--br)}td{padding:8px;border-bottom:1px solid #f0f2f8;vertical-align:middle}
td.n,th.n{text-align:right}.thumb{max-width:380px;max-height:130px;width:auto;height:auto;border:1px solid var(--br);border-radius:4px;display:block}
.pill{padding:3px 9px;border-radius:99px;font-size:12px;white-space:nowrap}.ok{background:#d1fae5;color:#065f46}.wa{background:#fef3c7;color:#92400e}.ko{background:#fee2e2;color:#991b1b}.gr{background:#eef0f7;color:#555}
.bw{height:8px;background:#eef0f7;border-radius:99px;overflow:hidden}.bw i{display:block;height:100%;background:linear-gradient(90deg,var(--p),var(--a))}
.rowb{margin:9px 0}.rowb .l{display:flex;justify-content:space-between;font-size:13px;gap:8px}
.vuoto{color:var(--mu);font-size:14px;padding:10px 0}
canvas{max-width:100%}footer{text-align:center;color:var(--mu);font-size:12px;padding:20px}
.login{max-width:380px;margin:80px auto;padding:0 16px}.login .card{padding:24px}.login h1{font-size:20px;margin:0 0 4px}.login p{color:var(--mu);margin:0 0 16px;font-size:14px}
.login label{display:block;font-size:13px;margin:12px 0 4px;color:var(--mu)}.login input{width:100%;padding:10px 12px;border:1px solid var(--br);border-radius:8px;font-size:15px}
.login button{margin-top:18px;width:100%;padding:11px;border:0;border-radius:8px;background:var(--p);color:#fff;font-size:15px;font-weight:600;cursor:pointer}
.err{background:#fee2e2;color:#991b1b;padding:9px 12px;border-radius:8px;font-size:14px;margin-bottom:10px}

.msg{padding:11px 14px;border-radius:10px;margin-bottom:14px;font-size:14px}.okm{background:#d1fae5;color:#065f46}.msg.err{margin-bottom:14px}
.msg code{background:#fff;padding:2px 8px;border-radius:6px;font-size:15px;user-select:all}
.form label{display:block;font-size:13px;color:var(--mu);margin:12px 0 4px}.form input,.form select{display:block;width:100%;margin-top:4px;padding:9px 11px;border:1px solid var(--br);border-radius:8px;font-size:14px;color:var(--tx);background:#fff}
.form .thumb{margin:6px 0}.r2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form .chk{display:flex;gap:8px;align-items:center;color:var(--tx)}.form .chk input{width:auto;margin:0}
.btn.pri{background:var(--p);color:#fff;border-color:var(--p);font-weight:600}.btn.sm{padding:5px 10px;font-size:12px}.form button.btn{margin-top:16px}
