/* Somantix — Dashboard Component Styles */

/* ═══════ DASHBOARD / CONTRACT GOVERNANCE ═══════ */
.dash-stats { display:grid; grid-template-columns:repeat(4,1fr); gap:1rem; margin-bottom:2rem; }
.dash-stat { background:var(--card); border:1px solid var(--border); border-radius:10px; padding:1.25rem; }
.dash-stat-label { font-size:0.75rem; font-weight:500; color:var(--text-dim); text-transform:uppercase; letter-spacing:0.04em; margin-bottom:0.5rem; }
.dash-stat-value { font-size:1.75rem; font-weight:700; font-family:'JetBrains Mono',monospace; color:var(--text); }
.dash-stat-sub { font-size:0.75rem; color:var(--text-dim); margin-top:0.25rem; }
.dash-section-label { font-size:0.6875rem; font-weight:600; text-transform:uppercase; letter-spacing:0.06em; color:var(--text-dim); margin-bottom:0.75rem; margin-top:0.5rem; }

/* Vendor cards */
.vcard { background:var(--card); border:1px solid var(--border); border-radius:12px; margin-bottom:1rem; overflow:hidden; transition:border-color 0.15s; }
.vcard:hover { border-color:var(--border-hover, #333); }
.vcard-hd { display:flex; align-items:center; gap:1rem; padding:1.25rem 1.5rem; cursor:pointer; }
.vcard-avatar { width:44px; height:44px; border-radius:10px; background:rgba(16,185,129,0.15); display:flex; align-items:center; justify-content:center; font-size:0.8125rem; font-weight:700; color:var(--accent); font-family:'JetBrains Mono',monospace; flex-shrink:0; }
.vcard-info { flex:1; min-width:0; }
.vcard-name { font-size:1rem; font-weight:600; color:var(--text); }
.vcard-contract { font-size:0.75rem; color:var(--text-dim); display:flex; align-items:center; gap:0.375rem; margin-top:0.125rem; }
.vcard-signal { display:flex; align-items:center; gap:0.75rem; flex-shrink:0; }
.signal-pill { display:flex; align-items:center; gap:0.375rem; padding:0.375rem 0.875rem; border-radius:20px; font-size:0.8125rem; font-weight:600; }
.signal-pill.ok { background:rgba(16,185,129,0.15); color:var(--accent); }
.signal-pill.warn { background:rgba(245,158,11,0.12); color:var(--warning); border:1px solid rgba(245,158,11,0.25); }
.signal-dot { width:8px; height:8px; border-radius:50%; }
.signal-dot.ok { background:var(--accent); }
.signal-dot.warn { background:var(--warning); }
.vcard-expand { width:28px; height:28px; border-radius:6px; background:transparent; border:1px solid var(--border); color:var(--text-dim); cursor:pointer; display:flex; align-items:center; justify-content:center; transition:all 0.15s; flex-shrink:0; }
.vcard-expand:hover { border-color:var(--accent); color:var(--accent); }
.vcard-expand svg { transition:transform 0.2s; }
.vcard.expanded .vcard-expand svg { transform:rotate(180deg); }
.vcard-body { max-height:0; overflow:hidden; transition:max-height 0.3s ease; border-top:0 solid var(--border); }
.vcard.expanded .vcard-body { max-height:2000px; border-top-width:1px; }
.vcard-inner { padding:1.25rem 1.5rem; }

/* Contract block */
.contract-block { display:flex; align-items:center; gap:1rem; background:rgba(255,255,255,0.02); border:1px solid var(--border); border-radius:8px; padding:1rem 1.25rem; margin-bottom:1.25rem; }
.contract-block-icon { width:36px; height:36px; border-radius:8px; background:rgba(59,130,246,0.12); border:1px solid rgba(59,130,246,0.25); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.contract-block-info { flex:1; }
.contract-block-title { font-size:0.8125rem; font-weight:600; color:var(--text); }
.contract-block-detail { font-size:0.75rem; color:var(--text-dim); }
.contract-block-models { display:flex; gap:0.375rem; flex-wrap:wrap; margin-top:0.5rem; }
.model-pill { font-size:0.6875rem; font-family:'JetBrains Mono',monospace; padding:0.125rem 0.5rem; border-radius:4px; background:rgba(16,185,129,0.15); color:var(--accent); font-weight:500; }

/* Metrics grid */
.vcard-grid3 { display:grid; grid-template-columns:repeat(3,1fr); gap:0.75rem; margin-bottom:1.25rem; }
.vcard-metric { background:rgba(255,255,255,0.02); border:1px solid var(--border); border-radius:8px; padding:0.875rem; text-align:center; }
.vcard-metric-val { font-family:'JetBrains Mono',monospace; font-size:1.25rem; font-weight:700; color:var(--text); }
.vcard-metric-lbl { font-size:0.6875rem; color:var(--text-dim); text-transform:uppercase; letter-spacing:0.04em; margin-top:0.125rem; }

/* Reconciliation */
.recon-box { background:rgba(255,255,255,0.015); border:1px solid var(--border); border-radius:10px; margin-bottom:1.25rem; overflow:hidden; }
.recon-hd { display:flex; align-items:center; gap:0.75rem; padding:1rem 1.25rem; }
.recon-ico { width:32px; height:32px; border-radius:8px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.recon-ico.ok { background:rgba(16,185,129,0.15); color:var(--accent); }
.recon-ico.warn { background:rgba(245,158,11,0.12); color:var(--warning); }
.recon-ico.none { background:rgba(255,255,255,0.05); color:var(--text-dim); }
.recon-info { flex:1; }
.recon-title { font-size:0.875rem; font-weight:600; color:var(--text); }
.recon-sub { font-size:0.75rem; color:var(--text-dim); margin-top:0.0625rem; }

/* Coverage bar */
.cov-bar-wrap { padding:0 1.25rem 1rem; }
.cov-bar-labels { display:flex; justify-content:space-between; font-size:0.6875rem; color:var(--text-dim); margin-bottom:0.375rem; }
.cov-bar-labels strong { color:var(--text-secondary); font-weight:600; }
.cov-bar { height:6px; border-radius:3px; background:rgba(255,255,255,0.06); overflow:hidden; }
.cov-fill { height:100%; border-radius:3px; transition:width 0.6s ease; }
.cov-fill.full { background:var(--accent); }
.cov-fill.partial { background:var(--warning); }

/* Unattested */
.unattested-box { margin:0 1.25rem 1rem; padding:0.875rem 1rem; background:rgba(245,158,11,0.08); border:1px solid rgba(245,158,11,0.2); border-radius:8px; }
.unattested-title { font-size:0.8125rem; font-weight:600; color:var(--warning); margin-bottom:0.5rem; display:flex; align-items:center; gap:0.375rem; }
.unattested-file { display:flex; align-items:center; gap:0.75rem; padding:0.375rem 0; font-size:0.8125rem; }
.unattested-name { font-family:'JetBrains Mono',monospace; color:var(--text); flex:1; }
.unattested-size { font-size:0.6875rem; color:var(--text-dim); font-family:'JetBrains Mono',monospace; }
.unattested-dot { width:6px; height:6px; border-radius:50%; background:var(--warning); flex-shrink:0; }

/* Flagged */
.flagged-box { margin-top:1rem; padding:1rem; background:rgba(245,158,11,0.08); border:1px solid rgba(245,158,11,0.2); border-radius:8px; }
.flagged-title { font-size:0.8125rem; font-weight:600; color:var(--warning); margin-bottom:0.75rem; display:flex; align-items:center; gap:0.375rem; }
.flagged-file { display:flex; align-items:center; gap:0.75rem; padding:0.5rem 0; border-bottom:1px solid rgba(245,158,11,0.12); }
.flagged-file:last-child { border-bottom:none; }
.flagged-fname { font-size:0.8125rem; font-weight:500; color:var(--text); font-family:'JetBrains Mono',monospace; flex:1; }
.flagged-reason { font-size:0.75rem; color:var(--warning); }

/* Attestation rows */
.att-row { display:flex; align-items:flex-start; gap:0.75rem; padding:0.875rem 0; border-bottom:1px solid var(--border); }
.att-row:last-child { border-bottom:none; }
.att-ico { width:28px; height:28px; border-radius:6px; display:flex; align-items:center; justify-content:center; flex-shrink:0; font-size:0.75rem; }
.att-ico.ok { background:rgba(16,185,129,0.15); color:var(--accent); }
.att-info { flex:1; }
.att-title { font-size:0.875rem; font-weight:500; color:var(--text); }
.att-detail { font-size:0.75rem; color:var(--text-dim); margin-top:0.125rem; }
.att-date { font-size:0.6875rem; color:var(--text-dim); font-family:'JetBrains Mono',monospace; flex-shrink:0; padding-top:0.125rem; }

/* Drill note */
.drill-note { display:flex; align-items:center; gap:0.5rem; margin-top:1rem; padding-top:1rem; border-top:1px solid var(--border); font-size:0.75rem; color:var(--text-dim); }
.drill-note a { color:var(--text-secondary); text-decoration:underline; text-decoration-color:var(--border); cursor:pointer; }
.drill-note a:hover { color:var(--accent); text-decoration-color:var(--accent); }

/* Scan progress */
.scan-prog { padding:0 1.25rem 1rem; display:none; }
.scan-prog.active { display:block; }
.scan-st { font-size:0.75rem; color:var(--text-secondary); margin-bottom:0.375rem; display:flex; align-items:center; gap:0.5rem; }
.scan-spin { width:12px; height:12px; border:2px solid var(--border); border-top-color:var(--accent); border-radius:50%; animation:dashSpin 0.8s linear infinite; }
@keyframes dashSpin { to { transform:rotate(360deg); } }
.scan-track { height:4px; border-radius:2px; background:rgba(255,255,255,0.06); overflow:hidden; }
.scan-bar-fill { height:100%; border-radius:2px; background:var(--accent); transition:width 0.3s ease; width:0%; }
