
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&family=DM+Mono:wght@400;500&display=swap');
:root {
  --bg:        #08111e;
  --bg2:       #0d1a2d;
  --surface:   #111f33;
  --surface2:  #162640;
  --surface3:  #1c2f4d;
  --border:    rgba(99,155,255,.12);
  --border2:   rgba(99,155,255,.2);
  --text1:     #e8f0ff;
  --text2:     #7a9cc8;
  --text3:     #4a6a96;
  --blue:      #3d8ef0;
  --blue2:     #5aa3ff;
  --teal:      #00d4b4;
  --green:     #22d87a;
  --orange:    #ff8c42;
  --red:       #ff4d6a;
  --purple:    #a78bfa;
  --yellow:    #fbbf24;
  --r:         10px;
  --r2:        14px;
  --font:      'DM Sans',sans-serif;
  --mono:      'DM Mono',monospace;
  --glow-blue: 0 0 20px rgba(61,142,240,.15);
  --glow-teal: 0 0 20px rgba(0,212,180,.12);
}

/* ── LIGHT THEME OVERRIDE (nativo per ITSM Client portal) ──
   client.css è scritto con palette dark; in light theme rimappiamo
   le stesse variabili a colori chiari ad alto contrasto.
   Aggiunto 2026-05-06: il portale deve essere nativamente chiaro,
   ma le card/etichette restavano scure e illeggibili. */
html[data-theme="light"] {
  --bg:        #f1f5f9;
  --bg2:       #ffffff;
  --surface:   #ffffff;
  --surface2:  #f8fafc;
  --surface3:  #eef2f6;
  --border:    rgba(15,23,42,.10);
  --border2:   rgba(15,23,42,.18);
  --text1:     #0f172a;     /* titoli e numeri KPI */
  --text2:     #334155;     /* testo body — più scuro per leggibilità */
  --text3:     #475569;     /* etichette / hint — non più sbiadite */
  --blue:      #2563eb;
  --blue2:     #1d4ed8;
  --teal:      #0d9488;
  --green:     #16a34a;
  --orange:    #ea580c;
  --red:       #dc2626;
  --purple:    #7c3aed;
  --yellow:    #ca8a04;
  --glow-blue: 0 0 20px rgba(37,99,235,.10);
  --glow-teal: 0 0 20px rgba(13,148,136,.10);
}
html[data-theme="light"] body { background: var(--bg); color: var(--text1); }
/* Box "scuri" decorativi (es. KPI Compliance NIST/ISO27001/SOC2/GDPR
   con sfondo --surface2 forzato dark in legacy) → forziamo testo chiaro
   solo dove lo sfondo resta scuro. Per i KPI standard usiamo card chiare. */
html[data-theme="light"] .kpi { background: var(--surface); border-color: var(--border); }
html[data-theme="light"] .kpi-label { color: var(--text3); }
html[data-theme="light"] .kpi-val { color: var(--text1); }
/* Section headings (es. "Score per framework", "Framework Scorecard")
   restavano in colori sbiaditi: forziamo testo scuro */
html[data-theme="light"] .ct,
html[data-theme="light"] .section-title,
html[data-theme="light"] h2, html[data-theme="light"] h3 { color: var(--text1); }
/* Tabelle: header con --surface2 deve avere testo scuro */
html[data-theme="light"] thead tr,
html[data-theme="light"] thead th { color: var(--text2); background: var(--surface2); }
/* Empty state — il blu sbiadito su bianco era invisibile */
html[data-theme="light"] .empty { color: var(--text2); }
html[data-theme="light"] .empty-t { color: var(--text1); }
html[data-theme="light"] .empty-s { color: var(--text3); }
/* Catalogo: cat-item ora su sfondo chiaro tenue */
html[data-theme="light"] .cat-item { background: var(--surface); border-color: var(--border2); box-shadow: 0 1px 3px rgba(15,23,42,.04); }
html[data-theme="light"] .cat-item:hover { background: var(--surface2); }
html[data-theme="light"] .cat-name { color: var(--text1); }
html[data-theme="light"] .cat-desc { color: var(--text2); }
html[data-theme="light"] .cat-sla { color: var(--text3); }
/* Badge "Approvazione richiesta" su catalogo: garantisce testo leggibile */
html[data-theme="light"] .badge { color: #92400e; background: #fef3c7; border-color: #fcd34d; }
/* Filter bar / select dark → light */
html[data-theme="light"] .filter-bar select,
html[data-theme="light"] .filter-bar input { background: var(--surface); color: var(--text1); border-color: var(--border2); }
/* Notifiche / SLA / status liste con sfondo --surface2 dark */
html[data-theme="light"] .svc-status,
html[data-theme="light"] .status-ind,
html[data-theme="light"] .report-stat,
html[data-theme="light"] .notif-item { background: var(--surface); border-color: var(--border); }
html[data-theme="light"] .report-stat-label,
html[data-theme="light"] .svc-desc,
html[data-theme="light"] .status-desc,
html[data-theme="light"] .notif-text { color: var(--text2); }
html[data-theme="light"] .notif-time,
html[data-theme="light"] .ti-date,
html[data-theme="light"] .tl-time,
html[data-theme="light"] .tl-author { color: var(--text3); }
html[data-theme="light"] .tl-text { color: var(--text2); }
/* Inner-tabs (sub-navigation Sicurezza, Compliance, ecc.) */
html[data-theme="light"] .inner-tabs { background: var(--surface2); }
html[data-theme="light"] .inner-tab { color: var(--text3); }
html[data-theme="light"] .inner-tab.active { background: #ffffff; color: var(--blue); box-shadow: 0 1px 2px rgba(15,23,42,.08); }
/* Modal / form fields */
html[data-theme="light"] .modal-box { background: #ffffff; border-color: var(--border2); }
html[data-theme="light"] .fg input,
html[data-theme="light"] .fg select,
html[data-theme="light"] .fg textarea,
html[data-theme="light"] .field input { background: #ffffff; color: var(--text1); border-color: var(--border2); }
html[data-theme="light"] .fg label,
html[data-theme="light"] .field label { color: var(--text2); }
/* Btn secondario (default era surface2 dark con text1 chiaro) */
html[data-theme="light"] .btn-secondary { background: var(--surface); color: var(--text1); border-color: var(--border2); }
html[data-theme="light"] .btn-secondary:hover { background: var(--surface2); }
/* Card e contenitori principali */
html[data-theme="light"] .card { background: var(--surface); border-color: var(--border); box-shadow: 0 1px 3px rgba(15,23,42,.04); }
/* Topbar / nav resta chiaro */
html[data-theme="light"] #topbar,
html[data-theme="light"] #nav { background: #ffffff; border-color: var(--border); }
html[data-theme="light"] .nav-tab { color: var(--text3); }
html[data-theme="light"] .nav-tab:hover { color: var(--text1); }
html[data-theme="light"] .nav-tab.active { color: var(--blue); border-bottom-color: var(--blue); }
/* SLA bar bg */
html[data-theme="light"] .sla-bar { background: var(--surface3); }
html[data-theme="light"] .sla-label { color: var(--text2); }
html[data-theme="light"] .sla-pct { color: var(--text2); }
/* Compliance bar fill bg */
html[data-theme="light"] .compliance-bar { background: var(--surface3); }
/* Hide ULID category pill (rimasto da fix precedente) */
html[data-theme="light"] .badge.b-gray { display: none; }
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--font);background:var(--bg);color:var(--text1);min-height:100vh;font-size:14px;line-height:1.5;overflow-x:hidden}
a{color:var(--blue2);text-decoration:none}

/* ── SCROLLBAR ── */
::-webkit-scrollbar{width:4px;height:4px}
::-webkit-scrollbar-track{background:var(--bg2)}
::-webkit-scrollbar-thumb{background:var(--surface3);border-radius:2px}

/* ── LOGIN ── */
#login-screen{position:fixed;inset:0;z-index:1000;background:var(--bg);display:flex;align-items:center;justify-content:center;transition:opacity .5s}
#login-screen.hidden{opacity:0;pointer-events:none}
#login-screen::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 80% 60% at 50% 0%,rgba(61,142,240,.08),transparent);pointer-events:none}
.login-wrap{display:flex;flex-direction:column;align-items:center;gap:32px;width:100%;max-width:400px;padding:0 24px;position:relative}
.login-mark{width:56px;height:56px;border-radius:16px;background:linear-gradient(135deg,#1a5fd4,#0d3a8c);border:1px solid rgba(61,142,240,.4);display:flex;align-items:center;justify-content:center;box-shadow:0 8px 32px rgba(61,142,240,.3)}
.login-mark svg{width:28px;height:28px}
.login-title{font-size:20px;font-weight:600;text-align:center;letter-spacing:-.02em}
.login-sub{font-size:13px;color:var(--text3);text-align:center;margin-top:4px}
.login-card{width:100%;background:var(--surface);border:1px solid var(--border2);border-radius:var(--r2);padding:28px;display:flex;flex-direction:column;gap:18px;box-shadow:0 16px 48px rgba(0,0,0,.4)}
.field{display:flex;flex-direction:column;gap:7px}
.field label{font-size:11px;font-weight:600;color:var(--text3);letter-spacing:.06em;text-transform:uppercase}
.field input{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);padding:11px 14px;color:var(--text1);font-size:14px;font-family:var(--font);outline:none;transition:border-color .2s,box-shadow .2s}
.field input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(61,142,240,.15)}
.field input.uppercase{text-transform:uppercase}
#login-error{font-size:12px;color:var(--red);text-align:center;min-height:16px}
.btn-login{width:100%;padding:12px;background:linear-gradient(135deg,#1a5fd4,#1248a8);color:#fff;border:none;border-radius:var(--r);font-size:14px;font-weight:600;font-family:var(--font);cursor:pointer;letter-spacing:.01em;transition:all .2s;box-shadow:0 4px 16px rgba(61,142,240,.3)}
.btn-login:hover:not(:disabled){background:linear-gradient(135deg,#2269e0,#1a5fd4);transform:translateY(-1px);box-shadow:0 6px 20px rgba(61,142,240,.4)}
.btn-login:disabled{opacity:.5;cursor:not-allowed;transform:none}

/* ── CHANGE PWD ── */
#changepwd-screen{position:fixed;inset:0;z-index:999;background:var(--bg);display:flex;align-items:center;justify-content:center}
#changepwd-screen.hidden{display:none}
#cp-error{font-size:12px;color:var(--red);min-height:16px}

/* ── APP ── */
#app{display:none;flex-direction:column;min-height:100vh}

/* ── TOPBAR ── */
#topbar{height:58px;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 24px;gap:14px;position:sticky;top:0;z-index:100;backdrop-filter:blur(12px)}
.tb-brand{display:flex;align-items:center;gap:10px}
.tb-icon{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,#1a5fd4,#0d3a8c);display:flex;align-items:center;justify-content:center;border:1px solid rgba(61,142,240,.3)}
.tb-icon svg{width:17px;height:17px}
#tb-name{font-size:15px;font-weight:600;letter-spacing:-.01em}
#tb-badge{font-size:10px;font-weight:600;background:rgba(61,142,240,.15);color:var(--blue2);border:1px solid rgba(61,142,240,.25);border-radius:5px;padding:2px 8px;letter-spacing:.04em}
.tb-user{margin-left:auto;display:flex;align-items:center;gap:12px}
#tb-username{font-size:13px;color:var(--text2)}
.btn-logout{font-size:12px;font-weight:500;color:var(--text3);cursor:pointer;padding:5px 12px;border-radius:7px;border:1px solid var(--border);background:transparent;font-family:var(--font);transition:all .2s}
.btn-logout:hover{border-color:var(--red);color:var(--red)}
.notif-btn{position:relative;width:34px;height:34px;border-radius:8px;border:1px solid var(--border);background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}
.notif-btn:hover{border-color:var(--border2);background:var(--surface2)}
.notif-btn svg{width:16px;height:16px;color:var(--text2)}
.notif-dot{position:absolute;top:6px;right:6px;width:7px;height:7px;border-radius:50%;background:var(--red);border:2px solid var(--surface)}

/* ── NAV ── */
/* 🆕 2026-05-07 — #nav SEMPRE sidebar verticale sinistra (no condizioni) */
#nav{
  position:fixed; top:58px; left:0; bottom:0;
  width:220px; height:calc(100vh - 58px);
  background:var(--surface); border-right:1px solid var(--border);
  display:flex; flex-direction:column; flex-wrap:nowrap;
  overflow-y:auto; overflow-x:hidden;
  padding:14px 8px; gap:2px;
  z-index:80; scrollbar-width:thin;
}
#main{ margin-left:220px; }
@media (max-width: 880px){
  #nav{ width:64px; }
  #nav .nav-tab span[data-i18n], #nav .nav-tab > :not(svg){ display:none; }
  #nav .nav-tab{ justify-content:center; padding:11px; }
  #main{ margin-left:64px; }
}
#nav::-webkit-scrollbar{height:4px}
#nav::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
/* 🆕 2026-05-07 — .nav-tab adattata a sidebar verticale */
.nav-tab{padding:10px 14px;font-size:13px;font-weight:500;color:var(--text3);cursor:pointer;border-left:3px solid transparent;border-bottom:none;border-radius:8px;transition:all .2s;white-space:nowrap;display:flex;align-items:center;gap:10px;flex-shrink:0;width:100%;justify-content:flex-start}
@media (max-width:900px){.nav-tab{padding:10px 10px;font-size:12px}.nav-tab svg{display:none}}
.nav-tab svg{width:14px;height:14px;opacity:.7}
.nav-tab:hover{color:var(--text2)}
.nav-tab.active{color:var(--blue);background:rgba(61,142,240,.12);border-left-color:var(--blue);border-bottom-color:transparent}
.nav-tab:hover{background:var(--surface2)}
.nav-tab svg{width:16px;height:16px;flex-shrink:0}

/* ── MAIN ── */
#main{flex:1;padding:28px 32px;max-width:1320px;margin:0 auto;width:100%}
.page{display:none}
.page.active{display:block;animation:fadeIn .3s ease}
@keyframes fadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.ph{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:24px;gap:16px;flex-wrap:wrap}
.ph h1{font-size:22px;font-weight:700;letter-spacing:-.03em}
.ph-sub{font-size:13px;color:var(--text3);margin-top:4px}

/* ── GRID ── */
.g2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.g5{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
@media(max-width:900px){.g4,.g5{grid-template-columns:repeat(2,1fr)}.g3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.g2,.g3,.g4,.g5{grid-template-columns:1fr}}

/* ── CARD ── */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r2);padding:20px}
.card-sm{padding:16px}
.ch{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.ct{font-size:13px;font-weight:600;color:var(--text1);letter-spacing:-.01em}
.cl{font-size:12px;color:var(--blue2);cursor:pointer}
.cl:hover{text-decoration:underline}

/* ── KPI ── */
.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--r2);padding:18px 20px;position:relative;overflow:hidden;transition:border-color .2s,box-shadow .2s}
.kpi:hover{border-color:var(--border2);box-shadow:var(--glow-blue)}
.kpi::after{content:'';position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.02),transparent);pointer-events:none}
.kpi-icon{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;margin-bottom:14px}
.kpi-icon svg{width:18px;height:18px}
.kpi-val{font-size:30px;font-weight:700;letter-spacing:-.04em;line-height:1;font-family:var(--mono)}
.kpi-label{font-size:11px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.05em;margin-top:6px}
.kpi-delta{font-size:11px;margin-top:8px;display:flex;align-items:center;gap:4px}
.kpi-delta.up{color:var(--green)}
.kpi-delta.down{color:var(--red)}
.kpi-delta.neutral{color:var(--text3)}
.kpi.accent-blue .kpi-icon{background:rgba(61,142,240,.15)}
.kpi.accent-blue .kpi-icon svg{color:var(--blue2)}
.kpi.accent-teal .kpi-icon{background:rgba(0,212,180,.12)}
.kpi.accent-teal .kpi-icon svg{color:var(--teal)}
.kpi.accent-green .kpi-icon{background:rgba(34,216,122,.12)}
.kpi.accent-green .kpi-icon svg{color:var(--green)}
.kpi.accent-orange .kpi-icon{background:rgba(255,140,66,.12)}
.kpi.accent-orange .kpi-icon svg{color:var(--orange)}
.kpi.accent-red .kpi-icon{background:rgba(255,77,106,.12)}
/* ── KPI Sparkline + drill-down (2026-05-06 Batch1 Executive) ── */
.kpi.kpi-clickable{cursor:pointer}
.kpi.kpi-clickable:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(15,23,42,.08),var(--glow-blue)}
.kpi-spark{position:absolute;right:12px;top:14px;width:90px;height:32px;opacity:.85;pointer-events:none}
html[data-theme="light"] .kpi-spark{opacity:.95}
.kpi-delta-pill{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:9px;font-weight:700;font-size:10px;letter-spacing:.02em}
.kpi-delta-pill.up{background:rgba(34,216,122,.15);color:var(--green)}
.kpi-delta-pill.down{background:rgba(255,77,106,.15);color:var(--red)}
.kpi-delta-pill.flat{background:rgba(120,140,180,.15);color:var(--text3)}
html[data-theme="light"] .kpi-delta-pill.up{background:#dcfce7;color:#15803d}
html[data-theme="light"] .kpi-delta-pill.down{background:#fee2e2;color:#b91c1c}
html[data-theme="light"] .kpi-delta-pill.flat{background:#f1f5f9;color:#475569}
/* ── Skeleton loader (Quick win 5) ── */
.skeleton{background:linear-gradient(90deg,var(--surface2) 0%,var(--surface3) 50%,var(--surface2) 100%);background-size:200% 100%;animation:skel 1.4s ease infinite;border-radius:6px;display:inline-block}
@keyframes skel{0%{background-position:200% 0}100%{background-position:-200% 0}}
.skeleton-line{height:14px;width:100%;margin:6px 0}
.skeleton-line.sm{height:10px;width:60%}
.skeleton-card{height:120px;width:100%;margin-bottom:12px}
/* ── Service Health Strip (Batch1) ── */
.svc-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.svc-chip{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:11px 13px;display:flex;flex-direction:column;gap:6px;transition:all .2s;cursor:pointer}
.svc-chip:hover{border-color:var(--border2);transform:translateY(-1px)}
.svc-chip-head{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--text1)}
.svc-chip-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;box-shadow:0 0 0 3px rgba(255,255,255,.06)}
.svc-chip-dot.ok{background:#22c55e;box-shadow:0 0 0 3px rgba(34,197,94,.18)}
.svc-chip-dot.warn{background:#f59e0b;box-shadow:0 0 0 3px rgba(245,158,11,.18)}
.svc-chip-dot.err{background:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,.18)}
.svc-chip-uptime{font-size:11px;color:var(--text3);display:flex;justify-content:space-between}
.svc-chip-uptime b{color:var(--text1);font-family:var(--mono);font-size:12px}
.svc-chip-bar{display:flex;gap:1px;height:18px;align-items:flex-end}
.svc-chip-bar div{flex:1;border-radius:1px;background:var(--surface3);transition:all .2s;min-height:2px}
.svc-chip-bar div.ok{background:#22c55e;opacity:.6}
.svc-chip-bar div.warn{background:#f59e0b;opacity:.7}
.svc-chip-bar div.err{background:#ef4444;opacity:.85}
.svc-chip-bar div:hover{opacity:1;transform:scaleY(1.1)}
/* ── Performance Heatmap (Batch2) ── */
.perf-hm{display:grid;grid-template-columns:36px repeat(24,1fr);gap:2px;font-size:10px;font-family:var(--mono);min-width:560px}
.perf-hm-h{color:var(--text3);text-align:center;font-weight:600;padding:2px 0}
.perf-hm-d{color:var(--text2);font-weight:600;display:flex;align-items:center;justify-content:flex-end;padding-right:6px}
.perf-hm-c{aspect-ratio:1/1;border-radius:3px;background:var(--surface2);position:relative;cursor:pointer;transition:transform .12s}
.perf-hm-c:hover{transform:scale(1.4);z-index:5;box-shadow:0 4px 12px rgba(0,0,0,.25);outline:1px solid var(--border2)}
.perf-hm-c[data-v="0"]{background:var(--surface3);opacity:.4}
.perf-hm-c[data-v="1"]{background:rgba(61,142,240,.18)}
.perf-hm-c[data-v="2"]{background:rgba(61,142,240,.38)}
.perf-hm-c[data-v="3"]{background:rgba(61,142,240,.6)}
.perf-hm-c[data-v="4"]{background:rgba(61,142,240,.85)}
.perf-hm-c[data-v="5"]{background:rgba(255,140,66,.85)}
.perf-hm-c[data-v="6"]{background:rgba(255,77,106,.9)}
.perf-hm-legend{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text3);margin-top:10px}
.perf-hm-legend div{width:18px;height:10px;border-radius:2px}
/* ── Funnel ── */
.fnl-step{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--surface2);border:1px solid var(--border);border-radius:var(--r);position:relative;overflow:hidden}
.fnl-step .fnl-fill{position:absolute;inset:0;background:linear-gradient(90deg,rgba(61,142,240,.18),rgba(0,212,180,.10));z-index:0;transition:width .8s ease;border-radius:var(--r)}
.fnl-step > *{position:relative;z-index:1}
.fnl-step .fnl-name{font-size:13px;font-weight:600;color:var(--text1);min-width:130px}
.fnl-step .fnl-count{font-family:var(--mono);font-weight:700;font-size:15px;color:var(--text1)}
.fnl-step .fnl-pct{font-size:11px;color:var(--text3);margin-left:auto;font-family:var(--mono)}
.fnl-step .fnl-drop{font-size:10px;color:var(--red);font-weight:700;margin-left:8px}
/* ── Report Center grid (Batch3) ── */
.rc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;padding:6px 0}
.rc-tpl{background:var(--surface);border:1px solid var(--border);border-radius:var(--r2);padding:14px;display:flex;flex-direction:column;gap:8px;transition:all .2s;position:relative;overflow:hidden}
.rc-tpl:hover{border-color:var(--border2);transform:translateY(-2px);box-shadow:0 6px 20px rgba(15,23,42,.06)}
.rc-tpl-icon{width:38px;height:38px;border-radius:9px;display:flex;align-items:center;justify-content:center;background:rgba(61,142,240,.12);color:var(--blue);font-size:18px}
.rc-tpl-name{font-size:13px;font-weight:700;color:var(--text1);line-height:1.3}
.rc-tpl-desc{font-size:11px;color:var(--text3);line-height:1.5;flex:1}
.rc-tpl-meta{display:flex;gap:6px;font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.04em}
.rc-tpl-meta span{padding:2px 7px;border-radius:9px;background:var(--surface3);font-weight:600}
.rc-tpl-actions{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}
.rc-tpl-actions .btn{flex:1;padding:6px 8px;font-size:11px;min-width:80px}
.rc-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:var(--r);background:var(--surface);border:1px solid var(--border);margin-bottom:6px;font-size:12px}
.rc-row:hover{border-color:var(--border2)}
.rc-row .rc-row-name{font-weight:600;color:var(--text1);flex:1}
.rc-row .rc-row-meta{color:var(--text3);font-size:11px}
.rc-row .rc-row-act{display:flex;gap:4px}
.rc-row .rc-row-act button{padding:4px 8px;font-size:10px}
/* ── Change Calendar (Batch4) ── */
.cal-toolbar{display:flex;gap:6px;align-items:center}
.cal-tb-btn{background:var(--surface);border:1px solid var(--border);color:var(--text1);padding:6px 12px;border-radius:6px;cursor:pointer;font-size:12px;font-family:var(--font);transition:all .15s}
.cal-tb-btn:hover{border-color:var(--border2);background:var(--surface2)}
.cal-tb-btn-today{font-weight:700;color:var(--blue)}
.cal-view.active{background:var(--blue);color:#fff;border-color:var(--blue)}
.cal-legend{display:flex;gap:14px;font-size:11px;color:var(--text3);align-items:center;flex-wrap:wrap}
.cal-legend span{display:flex;align-items:center;gap:5px}
.cal-legend i{display:inline-block;width:12px;height:12px;border-radius:3px}
.change-cal{padding:0;background:var(--surface)}
.cc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--border);border-radius:0}
.cc-dow{background:var(--surface2);text-align:center;font-size:10px;text-transform:uppercase;color:var(--text3);font-weight:700;padding:8px 4px;letter-spacing:.06em}
.cc-cell{background:var(--surface);min-height:96px;padding:5px 6px;display:flex;flex-direction:column;gap:3px;position:relative}
.cc-cell.cc-other{background:var(--surface2);opacity:.55}
.cc-cell.cc-today{background:linear-gradient(180deg,rgba(61,142,240,.06),transparent);border-top:2px solid var(--blue)}
.cc-cell.cc-freeze{background:repeating-linear-gradient(45deg,rgba(254,226,226,.4),rgba(254,226,226,.4) 6px,rgba(252,165,165,.18) 6px,rgba(252,165,165,.18) 12px)}
html[data-theme="light"] .cc-cell.cc-freeze{background:repeating-linear-gradient(45deg,#fee2e2,#fee2e2 6px,#fecaca 6px,#fecaca 12px)}
.cc-num{font-size:11px;font-weight:700;color:var(--text2);font-family:var(--mono)}
.cc-cell.cc-today .cc-num{color:var(--blue)}
.cc-evt{font-size:10px;padding:2px 6px;border-radius:3px;color:#fff;font-weight:600;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.4;border-left:3px solid rgba(0,0,0,.18);transition:transform .12s}
.cc-evt:hover{transform:translateX(2px);filter:brightness(1.1)}
.cc-evt.std{background:#22c55e}
.cc-evt.nor{background:#3d8ef0}
.cc-evt.emg{background:#ef4444;animation:pulseEmg 1.6s infinite}
@keyframes pulseEmg{0%,100%{box-shadow:0 0 0 0 rgba(239,68,68,.5)}50%{box-shadow:0 0 0 4px rgba(239,68,68,0)}}
.cc-more{font-size:10px;color:var(--text3);cursor:pointer;font-weight:600}
.cc-more:hover{color:var(--blue)}
/* week view */
.cc-week{display:grid;grid-template-columns:60px repeat(7,1fr);gap:1px;background:var(--border)}
.cc-week-h{background:var(--surface2);text-align:center;font-size:11px;color:var(--text3);font-weight:700;padding:8px 4px}
.cc-week-time{background:var(--surface2);text-align:right;padding:6px 8px;font-size:10px;color:var(--text3);font-family:var(--mono)}
.cc-week-cell{background:var(--surface);min-height:48px;position:relative}
/* ── Service Map (Batch7) ── */
.sm-node{position:absolute;background:var(--surface);border:2px solid var(--border2);border-radius:50%;width:54px;height:54px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:11px;font-weight:700;text-align:center;line-height:1.1;transition:all .25s;box-shadow:0 4px 12px rgba(15,23,42,.08);user-select:none}
.sm-node:hover{transform:translate(-50%,-50%) scale(1.18) !important;z-index:10;box-shadow:0 8px 22px rgba(0,0,0,.15)}
.sm-node.ok{border-color:#22c55e;background:rgba(34,197,94,.08)}
.sm-node.warn{border-color:#f59e0b;background:rgba(245,158,11,.10);animation:smPulse 2s infinite}
.sm-node.err{border-color:#ef4444;background:rgba(239,68,68,.12);animation:smPulse 1s infinite}
@keyframes smPulse{0%,100%{box-shadow:0 0 0 0 currentColor}50%{box-shadow:0 0 0 8px rgba(0,0,0,0)}}
.sm-svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.sm-edge{stroke:rgba(120,140,180,.45);stroke-width:1.6;fill:none}
.sm-edge.err{stroke:#ef4444;stroke-width:2.2;stroke-dasharray:4 3;animation:dash 0.8s linear infinite}
@keyframes dash{to{stroke-dashoffset:-14}}
/* ── Vendor table ── */
.vs-tbl{width:100%;border-collapse:collapse;font-size:12px}
.vs-tbl th{font-size:10px;color:var(--text3);text-transform:uppercase;font-weight:700;padding:8px 10px;text-align:left;background:var(--surface2);letter-spacing:.04em;border-bottom:2px solid var(--border)}
.vs-tbl td{padding:9px 10px;border-bottom:1px solid var(--border);color:var(--text1)}
.vs-tbl tr:hover td{background:var(--surface2)}
.vs-pill{display:inline-block;padding:2px 8px;border-radius:9px;font-size:10px;font-weight:700}
.vs-pill.ok{background:#dcfce7;color:#166534}
.vs-pill.warn{background:#fef3c7;color:#92400e}
.vs-pill.err{background:#fee2e2;color:#991b1b}
/* ── CSAT word cloud ── */
.csat-word{padding:6px 12px;border-radius:18px;background:rgba(61,142,240,.12);color:var(--text1);font-weight:600;cursor:default;transition:all .15s}
.csat-word:hover{background:rgba(61,142,240,.22);transform:scale(1.05)}
/* ── MI War Room timeline ── */
.mi-tl{position:relative;padding-left:24px;border-left:2px solid var(--border2)}
.mi-tl-evt{position:relative;padding:8px 0 12px 12px}
.mi-tl-evt::before{content:'';position:absolute;left:-30px;top:12px;width:14px;height:14px;border-radius:50%;background:var(--surface);border:3px solid var(--blue);box-shadow:0 0 0 3px rgba(61,142,240,.15)}
.mi-tl-evt.crit::before{border-color:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,.18);animation:smPulse 1.2s infinite}
.mi-tl-evt.ok::before{border-color:#22c55e}
.mi-tl-time{font-size:10px;color:var(--text3);font-family:var(--mono);text-transform:uppercase;letter-spacing:.05em}
.mi-tl-title{font-size:13px;font-weight:600;color:var(--text1);margin:2px 0 3px}
.mi-tl-desc{font-size:11px;color:var(--text2);line-height:1.5}
/* ── Vuln Heatmap (Batch6) ── */
.vh-grid{display:grid;gap:3px;font-size:11px;font-family:var(--mono);min-width:480px}
.vh-h{font-size:10px;font-weight:700;color:var(--text3);text-transform:uppercase;text-align:center;padding:4px 0;letter-spacing:.04em}
.vh-svc{font-size:11px;color:var(--text2);padding:8px 8px;text-align:right;font-weight:600;font-family:var(--font);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vh-cell{aspect-ratio:1.6/1;border-radius:4px;display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;cursor:pointer;transition:transform .12s}
.vh-cell:hover{transform:scale(1.06);z-index:5;box-shadow:0 4px 12px rgba(0,0,0,.2)}
.vh-cell.v0{background:var(--surface3);color:var(--text3);opacity:.5}
.vh-cell.v1{background:rgba(34,216,122,.4)}
.vh-cell.v2{background:rgba(255,140,66,.55)}
.vh-cell.v3{background:rgba(255,140,66,.85)}
.vh-cell.v4{background:rgba(239,68,68,.95)}
/* ── Risk Matrix 5x5 ── */
.rm-grid{display:grid;grid-template-columns:54px repeat(5,1fr);gap:3px;align-items:stretch}
.rm-axis{display:flex;align-items:center;justify-content:center;font-size:10px;color:var(--text3);font-weight:700;text-transform:uppercase;writing-mode:vertical-rl;transform:rotate(180deg);padding:6px 4px}
.rm-cell{aspect-ratio:1.4/1;border-radius:6px;display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;cursor:pointer;font-family:var(--mono);position:relative;transition:transform .12s}
.rm-cell:hover{transform:scale(1.06);z-index:5}
.rm-low{background:#22c55e}
.rm-med{background:#f59e0b}
.rm-high{background:#f97316}
.rm-crit{background:#dc2626;animation:smPulse 1.6s infinite}
.rm-empty{background:var(--surface3);color:var(--text3);opacity:.4}
.rm-x{display:flex;justify-content:space-between;font-size:10px;color:var(--text3);text-transform:uppercase;font-weight:700;padding:6px 0;letter-spacing:.04em}
.rm-y-label{font-size:10px;color:var(--text3);text-transform:uppercase;font-weight:700;text-align:center;margin:6px 0 0;letter-spacing:.04em}
/* ── Threat Flow Sankey-like ── */
.tf-stage{display:flex;flex-direction:column;gap:8px;flex:1}
.tf-row{display:flex;gap:14px;align-items:flex-start}
.tf-label{font-size:10px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px}
.tf-item{padding:8px 10px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);font-size:12px;font-weight:600;color:var(--text1);position:relative}
.tf-item.actor{border-left:3px solid #ef4444}
.tf-item.ttp{border-left:3px solid #f59e0b}
.tf-item.asset{border-left:3px solid #3d8ef0}
.tf-item .tf-bar{position:absolute;bottom:0;left:0;height:3px;background:linear-gradient(90deg,#ef4444,#3d8ef0);transition:width .6s}
/* ── Polish finale (Batch10 2026-05-06) ── */
.kpi, .card, .nav-tab, .btn, .cat-item, .svc-chip, .rc-tpl, .cc-evt {transition:all .2s ease}
.btn:focus-visible, .nav-tab:focus-visible, .kpi-clickable:focus-visible {outline:2px solid var(--blue);outline-offset:2px;border-radius:8px}
@media (prefers-reduced-motion: reduce){
  .skeleton, .cc-evt.emg, .sm-node.warn, .sm-node.err, #mi-badge, .mi-tl-evt.crit::before { animation: none !important; }
  *, *::before, *::after { transition-duration: .01ms !important; }
}
/* Aumento contrasto tabelle in dark theme */
html[data-theme="dark"] .vs-tbl tr:hover td, html[data-theme="dark"] .rc-row:hover { background: rgba(99,155,255,.06); }
/* Hover-lift consistente per nav-tab */
.nav-tab.active { font-weight:700 }
/* kpi sparkline fade su mobile */
@media (max-width: 720px){
  .kpi-spark{opacity:.4;width:60px;height:24px}
  .perf-hm{min-width:480px;font-size:9px}
}
/* Compliance card a vista pulita */
html[data-theme="light"] #cr-comp-dashboard .kpi, html[data-theme="light"] #page-compliance .kpi { background: var(--surface); }
html[data-theme="light"] #cr-comp-dashboard .kpi-val, html[data-theme="light"] #page-compliance .kpi-val { color: var(--text1); }
html[data-theme="light"] #cr-comp-dashboard .kpi-label, html[data-theme="light"] #page-compliance .kpi-label { color: var(--text3); }
html[data-theme="light"] #cr-comp-dashboard .ct, html[data-theme="light"] #page-compliance .ct { color: var(--text1); }
/* Catalogo card: testo descrizione visibile in entrambe le modalità */
.cat-desc { font-size:12px;color:var(--text2);line-height:1.5 }
html[data-theme="dark"] .cat-desc { color: #a8c2e8 }
/* ── F1: CSAT prompt stars ── */
#csat-prompt-stars span{transition:transform .15s,color .15s;color:#cbd5e1;line-height:1}
#csat-prompt-stars span:hover{transform:scale(1.15)}
#csat-prompt-stars span.active{color:#facc15;text-shadow:0 0 8px rgba(250,204,21,.4)}
#csat-prompt-stars span.active::before{content:'★'}
#csat-prompt-stars span:not(.active)::before{content:'☆'}
#csat-prompt-stars span::before{display:inline-block}
#csat-prompt-stars span > *{display:none}
/* ── F7: Global search results ── */
.gs-section{font-size:10px;font-weight:700;text-transform:uppercase;color:var(--text3);padding:8px 14px 4px;letter-spacing:.05em}
.gs-row{padding:8px 14px;cursor:pointer;display:flex;gap:10px;align-items:flex-start;border-radius:6px;transition:background .12s}
.gs-row:hover,.gs-row.active{background:var(--surface2)}
.gs-row .gs-ico{width:28px;height:28px;border-radius:6px;background:rgba(61,142,240,.12);color:var(--blue);display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}
.gs-row .gs-name{font-size:13px;font-weight:600;color:var(--text1);line-height:1.3}
.gs-row .gs-meta{font-size:11px;color:var(--text3);margin-top:2px}
/* ── F5: Saved filters chip ── */
.sf-bar{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap;align-items:center}
.sf-chip{padding:5px 11px;border-radius:14px;font-size:11px;font-weight:600;background:var(--surface);border:1px solid var(--border);color:var(--text2);cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .15s}
.sf-chip:hover{border-color:var(--border2);color:var(--text1)}
.sf-chip.active{background:var(--blue);color:#fff;border-color:var(--blue)}
.sf-chip .sf-x{opacity:.5;font-size:13px}
.sf-chip .sf-x:hover{opacity:1;color:var(--red)}
/* ── S1: Audit log row ── */
.al-row{display:grid;grid-template-columns:140px 100px 1fr;gap:8px;padding:8px 12px;border-bottom:1px solid var(--border);font-size:12px;align-items:center}
.al-row:hover{background:var(--surface2)}
.al-time{font-family:var(--mono);color:var(--text3);font-size:11px}
.al-action{font-size:10px;font-weight:700;padding:2px 8px;border-radius:9px;text-align:center;background:rgba(61,142,240,.15);color:var(--blue)}
.al-action.create{background:rgba(34,216,122,.15);color:var(--green)}
.al-action.delete{background:rgba(255,77,106,.15);color:var(--red)}
.al-action.update{background:rgba(255,140,66,.15);color:var(--orange)}
.al-target{color:var(--text1);font-weight:500}
.al-target small{color:var(--text3);font-weight:400;display:block;margin-top:2px}
/* ── Q3: Error banner ── */
#nh-err-banner{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:#fee2e2;color:#991b1b;border:1px solid #fca5a5;padding:10px 16px;border-radius:8px;font-size:12px;font-weight:600;display:none;z-index:9000;box-shadow:0 8px 24px rgba(0,0,0,.15);max-width:520px}
/* ── Sidebar verticale (Vertical nav layout) — 2026-05-07 ── */
body.nav-vertical #nav{
  position:fixed; top:58px; left:0; bottom:0;
  width:220px; height:calc(100vh - 58px);
  flex-direction:column; flex-wrap:nowrap;
  overflow-y:auto; overflow-x:hidden;
  padding:14px 8px; gap:2px;
  background:var(--surface); border-right:1px solid var(--border); border-bottom:none;
  z-index:80;
}
body.nav-vertical #nav .nav-tab{
  width:100%; padding:10px 14px; border-bottom:none; border-left:3px solid transparent;
  border-radius:8px; justify-content:flex-start; gap:10px; flex-shrink:0;
}
body.nav-vertical #nav .nav-tab.active{
  background:rgba(61,142,240,.12); border-left-color:var(--blue); color:var(--blue);
  border-bottom-color:transparent;
}
body.nav-vertical #nav .nav-tab:hover{ background:var(--surface2); }
body.nav-vertical #nav .nav-tab svg{ width:16px; height:16px; flex-shrink:0; }
body.nav-vertical #main{ margin-left:220px; }
html[data-theme="light"] body.nav-vertical #nav{ background:#ffffff; border-right-color:var(--border); box-shadow:1px 0 0 rgba(15,23,42,.04); }
@media (max-width: 880px){
  body.nav-vertical #nav{ width:64px; }
  body.nav-vertical #nav .nav-tab span[data-i18n], body.nav-vertical #nav .nav-tab > :not(svg){ display:none; }
  body.nav-vertical #nav .nav-tab{ justify-content:center; padding:11px; }
  body.nav-vertical #main{ margin-left:64px; }
}
/* Smooth transition on switch */
#nav, #main{ transition: margin-left .22s ease, width .22s ease; }
/* 🆕 2026-05-07 — Forzo nav-vertical sempre attivo (lato CSS, indipendente dal JS) */
body{ /* placeholder per ensure CSS scope */ }
body:not(.nav-vertical) #nav{
  /* fallback: se per qualsiasi motivo il JS non aggiunge la classe, applichiamo comunque sidebar */
  position:fixed; top:58px; left:0; bottom:0;
  width:220px; height:calc(100vh - 58px);
  flex-direction:column; flex-wrap:nowrap;
  overflow-y:auto; overflow-x:hidden;
  padding:14px 8px; gap:2px;
  background:var(--surface); border-right:1px solid var(--border); border-bottom:none;
  z-index:80;
}
body:not(.nav-vertical) #nav .nav-tab{
  width:100%; padding:10px 14px; border-bottom:none; border-left:3px solid transparent;
  border-radius:8px; justify-content:flex-start; gap:10px; flex-shrink:0;
}
body:not(.nav-vertical) #nav .nav-tab.active{
  background:rgba(61,142,240,.12); border-left-color:var(--blue); color:var(--blue);
  border-bottom-color:transparent;
}
body:not(.nav-vertical) #nav .nav-tab:hover{ background:var(--surface2); }
body:not(.nav-vertical) #nav .nav-tab svg{ width:16px; height:16px; flex-shrink:0; }
body:not(.nav-vertical) #main{ margin-left:220px; }
@media (max-width: 880px){
  body:not(.nav-vertical) #nav{ width:64px; }
  body:not(.nav-vertical) #nav .nav-tab span[data-i18n], body:not(.nav-vertical) #nav .nav-tab > :not(svg){ display:none; }
  body:not(.nav-vertical) #nav .nav-tab{ justify-content:center; padding:11px; }
  body:not(.nav-vertical) #main{ margin-left:64px; }
}
.kpi.accent-red .kpi-icon svg{color:var(--red)}
.kpi.accent-purple .kpi-icon{background:rgba(167,139,250,.12)}
.kpi.accent-purple .kpi-icon svg{color:var(--purple)}

/* ── CHART WRAP ── */
.chart-wrap{position:relative;height:200px}
.chart-wrap-sm{position:relative;height:160px}
.chart-wrap-lg{position:relative;height:260px}

/* ── BADGE ── */
.badge{display:inline-flex;align-items:center;padding:3px 9px;border-radius:99px;font-size:11px;font-weight:600;letter-spacing:.02em}
.b-red{background:rgba(255,77,106,.15);color:#ff6b83;border:1px solid rgba(255,77,106,.2)}
.b-orange{background:rgba(255,140,66,.15);color:#ffaa6b;border:1px solid rgba(255,140,66,.2)}
.b-blue{background:rgba(61,142,240,.15);color:#6ba8ff;border:1px solid rgba(61,142,240,.2)}
.b-green{background:rgba(34,216,122,.15);color:#4de08a;border:1px solid rgba(34,216,122,.2)}
.b-gray{background:rgba(120,140,180,.1);color:#7a9cc8;border:1px solid rgba(120,140,180,.15)}
.b-purple{background:rgba(167,139,250,.15);color:#c4b0ff;border:1px solid rgba(167,139,250,.2)}
.b-teal{background:rgba(0,212,180,.12);color:#00d4b4;border:1px solid rgba(0,212,180,.2)}
.b-yellow{background:rgba(251,191,36,.12);color:#fbbf24;border:1px solid rgba(251,191,36,.2)}

/* ── TICKET ITEM ── */
.ti{display:flex;align-items:flex-start;gap:14px;padding:14px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .15s;border-radius:var(--r)}
.ti:hover{background:var(--surface2)}
.ti:last-child{border-bottom:none}
.ti-key{font-family:var(--mono);font-size:11px;font-weight:500;color:var(--blue2);min-width:80px;padding-top:2px}
.ti-body{flex:1;min-width:0}
.ti-title{font-size:13px;font-weight:500;margin-bottom:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ti-meta{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.ti-date{font-size:11px;color:var(--text3);margin-left:auto}

/* ── SLA BAR ── */
.sla-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.sla-label{font-size:12px;color:var(--text2);min-width:100px}
.sla-bar{flex:1;height:6px;background:var(--surface3);border-radius:3px;overflow:hidden}
.sla-fill{height:100%;border-radius:3px;transition:width .8s ease}
.sla-pct{font-size:11px;font-family:var(--mono);color:var(--text2);min-width:35px;text-align:right}

/* ── TIMELINE ── */
.timeline{position:relative;padding-left:20px}
.timeline::before{content:'';position:absolute;left:6px;top:6px;bottom:6px;width:1px;background:var(--border2)}
.tl-item{position:relative;margin-bottom:16px}
.tl-item::before{content:'';position:absolute;left:-17px;top:5px;width:8px;height:8px;border-radius:50%;background:var(--surface3);border:2px solid var(--border2)}
.tl-item.active::before{background:var(--blue);border-color:var(--blue2)}
.tl-time{font-size:11px;color:var(--text3);margin-bottom:3px;font-family:var(--mono)}
.tl-text{font-size:13px;color:var(--text2)}
.tl-author{font-size:11px;color:var(--text3);margin-top:2px}

/* ── CATALOG ── 🆕 2026-05-06: contrasto migliorato (testo chiaro su sfondo card) */
.cat-item{background:var(--surface3);border:1px solid var(--border2,rgba(99,155,255,.25));border-radius:var(--r2);padding:16px;cursor:pointer;transition:all .2s;display:flex;flex-direction:column;gap:10px}
.cat-item:hover{border-color:#3d8ef0;background:#1f3360;transform:translateY(-2px);box-shadow:var(--glow-blue)}
.cat-icon{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:rgba(61,142,240,.18)}
.cat-icon svg{width:20px;height:20px}
.cat-name{font-size:14px;font-weight:700;color:var(--text1)}
.cat-desc{font-size:12px;color:var(--text2,#a8c2e8);line-height:1.5}
.cat-sla{font-size:11px;font-weight:500;margin-top:4px;color:var(--text2,#a8c2e8)}
/* Filter chips: nascondi la pillola con ULID (category_id) — preferiamo nome leggibile in renderCatalog */
.cat-item .badge.b-gray{display:none}

/* ── NOTIF ── */
.notif-item{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;gap:12px;align-items:flex-start}
.notif-item:last-child{border-bottom:none}
.notif-item.unread{background:rgba(61,142,240,.04)}
.notif-dot2{width:8px;height:8px;border-radius:50%;background:var(--blue);margin-top:5px;flex-shrink:0}
.notif-dot2.read{background:var(--surface3)}
.notif-text{font-size:13px;color:var(--text2);line-height:1.5}
.notif-time{font-size:11px;color:var(--text3);margin-top:3px}

/* ── REPORT ── */
.report-stat{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r);padding:14px 16px;display:flex;justify-content:space-between;align-items:center}
.report-stat-label{font-size:12px;color:var(--text3)}
.report-stat-val{font-size:16px;font-weight:700;font-family:var(--mono)}

/* ── FORM ── */
.fg{display:flex;flex-direction:column;gap:7px;margin-bottom:16px}
.fg label{font-size:11px;font-weight:600;color:var(--text3);letter-spacing:.05em;text-transform:uppercase}
.fg input,.fg select,.fg textarea{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);padding:10px 14px;color:var(--text1);font-size:14px;font-family:var(--font);outline:none;transition:border-color .2s;resize:vertical}
.fg input:focus,.fg select:focus,.fg textarea:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(61,142,240,.12)}
.fg select option{background:var(--surface)}

/* ── BUTTONS ── */
.btn{padding:9px 18px;border-radius:var(--r);font-size:13px;font-weight:600;font-family:var(--font);cursor:pointer;border:none;transition:all .2s;letter-spacing:.01em}
.btn-primary{background:linear-gradient(135deg,#1a5fd4,#1248a8);color:#fff;box-shadow:0 2px 12px rgba(61,142,240,.25)}
.btn-primary:hover:not(:disabled){background:linear-gradient(135deg,#2269e0,#1a5fd4);transform:translateY(-1px)}
.btn-secondary{background:var(--surface2);color:var(--text1);border:1px solid var(--border)}
.btn-secondary:hover{border-color:var(--border2);background:var(--surface3)}
.btn-sm{padding:6px 12px;font-size:12px}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}

/* ── MODAL ── */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:500;display:none;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(4px)}
.modal-overlay.open{display:flex}
.modal-box{background:var(--surface);border:1px solid var(--border2);border-radius:var(--r2);padding:28px;width:100%;max-width:640px;max-height:85vh;overflow-y:auto;box-shadow:0 24px 80px rgba(0,0,0,.6)}
.modal-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}
.modal-title{font-size:16px;font-weight:700;letter-spacing:-.02em}
.modal-close{background:none;border:none;color:var(--text3);cursor:pointer;font-size:20px;font-family:var(--font);transition:color .2s;line-height:1}
.modal-close:hover{color:var(--text1)}

/* ── FILTER BAR ── */
.filter-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.filter-bar select,.filter-bar input{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r);padding:7px 12px;color:var(--text1);font-size:12px;font-family:var(--font);outline:none}
.filter-bar select:focus,.filter-bar input:focus{border-color:var(--blue)}

/* ── EMPTY / SPINNER ── */
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;gap:12px;color:var(--text3)}
.empty-icon{font-size:40px;opacity:.6}
.empty-t{font-size:14px;font-weight:500}
.empty-s{font-size:12px}
.spinner{width:22px;height:22px;border:2px solid var(--border);border-top-color:var(--blue);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── TOAST ── */
#toast-c{position:fixed;top:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:8px}
.toast{padding:11px 18px;border-radius:var(--r);font-size:13px;font-weight:500;box-shadow:0 8px 24px rgba(0,0,0,.4);animation:slideIn .25s ease;border:1px solid transparent}
.toast.success{background:#0d2e1a;color:var(--green);border-color:rgba(34,216,122,.2)}
.toast.error{background:#2e0d14;color:var(--red);border-color:rgba(255,77,106,.2)}
.toast.info{background:#0d1e3a;color:var(--blue2);border-color:rgba(61,142,240,.2)}
.toast.warning{background:#2e1e0d;color:var(--orange);border-color:rgba(255,140,66,.2)}
@keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}

/* ── EXPORT BUTTONS ── */
.export-bar{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.export-label{font-size:11px;color:var(--text3);font-weight:500;text-transform:uppercase;letter-spacing:.04em;margin-right:4px}
.btn-export{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;border-radius:6px;font-size:11px;font-weight:600;font-family:var(--font);cursor:pointer;border:1px solid var(--border);background:var(--surface2);color:var(--text2);transition:all .2s;text-decoration:none}
.btn-export:hover{border-color:var(--border2);background:var(--surface3);color:var(--text1)}
.btn-export.pdf{border-color:rgba(255,77,106,.2);color:#ff6b83}
.btn-export.pdf:hover{background:rgba(255,77,106,.08)}
.btn-export.xlsx{border-color:rgba(34,216,122,.2);color:#4de08a}
.btn-export.xlsx:hover{background:rgba(34,216,122,.08)}
.btn-export.csv{border-color:rgba(251,191,36,.2);color:#fbbf24}
.btn-export.csv:hover{background:rgba(251,191,36,.08)}

/* ── NOC / SOC CLIENT ── */
.noc-client-tabs,.soc-client-tabs{display:flex;gap:0;border-bottom:1px solid var(--border);margin-bottom:16px}
.nc-tab{padding:9px 16px;font-size:13px;font-weight:500;color:var(--text3);cursor:pointer;border-bottom:2px solid transparent;transition:all .2s}
.nc-tab:hover{color:var(--text2)}
.nc-tab.active{color:var(--blue2);border-bottom-color:var(--blue)}
.nc-panel{display:none}
.nc-panel.active{display:block;animation:fadeIn .3s ease}
.svc-status{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:var(--r);background:var(--surface2);border:1px solid var(--border);margin-bottom:8px}
.svc-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.svc-dot.ok{background:var(--green);box-shadow:0 0 6px rgba(34,216,122,.5)}
.svc-dot.warn{background:var(--orange);box-shadow:0 0 6px rgba(255,140,66,.5)}
.svc-dot.err{background:var(--red);box-shadow:0 0 6px rgba(255,77,106,.5)}
.svc-dot.recovering{background:var(--yellow);box-shadow:0 0 6px rgba(251,191,36,.5)}
.svc-name{font-size:13px;font-weight:500;flex:1}
.svc-desc{font-size:11px;color:var(--text3)}
.vuln-row{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .15s;border-radius:var(--r)}
.vuln-row:hover{background:var(--surface2)}
.vuln-row:last-child{border-bottom:none}
.cvss-chip{font-size:11px;font-weight:700;font-family:var(--mono);padding:2px 8px;border-radius:4px}
.cvss-crit{background:rgba(255,77,106,.15);color:#ff6b83}
.cvss-high{background:rgba(255,140,66,.15);color:#ffaa6b}
.cvss-med{background:rgba(251,191,36,.12);color:#fbbf24}
.compliance-bar{height:8px;background:var(--surface2);border-radius:4px;overflow:hidden;margin-top:4px}
.compliance-fill{height:100%;border-radius:4px;transition:width .8s ease}

/* ── PROGRESS RING ── */
.progress-ring{display:flex;flex-direction:column;align-items:center;gap:8px}
.progress-ring svg{transform:rotate(-90deg)}
.pr-val{font-size:22px;font-weight:700;font-family:var(--mono)}
.pr-label{font-size:11px;color:var(--text3);text-align:center;text-transform:uppercase;letter-spacing:.04em}

/* ── STATUS INDICATOR ── */
.status-ind{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:var(--r);background:var(--surface2);border:1px solid var(--border)}
.status-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
.status-dot.ok{background:var(--green);box-shadow:0 0 8px rgba(34,216,122,.5)}
.status-dot.warn{background:var(--orange);box-shadow:0 0 8px rgba(255,140,66,.5)}
.status-dot.err{background:var(--red);box-shadow:0 0 8px rgba(255,77,106,.5)}
.status-name{font-size:13px;font-weight:500}
.status-desc{font-size:11px;color:var(--text3);margin-left:auto}

/* ── DIVIDER ── */
.divider{height:1px;background:var(--border);margin:16px 0}

/* ── TAB INNER ── */
.inner-tabs{display:flex;gap:4px;margin-bottom:16px;background:var(--surface2);border-radius:var(--r);padding:4px}
.inner-tab{flex:1;padding:7px 12px;font-size:12px;font-weight:500;text-align:center;cursor:pointer;border-radius:7px;color:var(--text3);transition:all .2s}
.inner-tab.active{background:var(--surface3);color:var(--text1)}
