/* idata-visual.css — visual layer: cards, CB tiles, strings, trackers, topology, animations */

/* ---- CIT cards ---- */
.twin-cits{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:6px}
.cit-card{position:relative;overflow:hidden}
.cit-card-h{display:flex;justify-content:space-between;align-items:center;border-left:3px solid var(--idata);padding-left:10px;margin-bottom:12px}
.cit-name{font-weight:900;font-size:1.15rem;display:flex;align-items:center;gap:8px}
.cit-name .dot{width:9px;height:9px;border-radius:50%}
.cit-cbsum{display:flex;gap:18px;margin:12px 0}
.cit-cbsum b{font-size:1.3rem;font-weight:900}.cit-cbsum span{display:block;color:var(--t3);font-size:.74rem}
.cit-gw{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.cit-gw span{font-size:.7rem;color:var(--t3);background:var(--panel-h);border:1px solid var(--border);border-radius:6px;padding:2px 7px}
.cb-mini{display:grid;grid-template-columns:repeat(14,1fr);gap:4px;margin-top:10px}
.cb-mini .cbm{width:100%;aspect-ratio:1;border-radius:3px;background:var(--night);cursor:pointer;display:block}
.cbm.fresh{background:#16A34A}.cbm.zero{background:#D97706}.cbm.stale,.cbm.nocturnal{background:#475569}.cbm.disabled{background:#334155}.cbm.pending{background:#64748B}.cbm.error{background:#B91C1C}

/* ---- CB tiles (grid / explorer) ---- */
.cb-group{margin-bottom:14px}
.cb-group-h{display:flex;justify-content:space-between;align-items:center;border-left:3px solid var(--idata);padding:6px 10px;margin-bottom:8px;background:var(--panel-h);border-radius:0 8px 8px 0}
.cb-group-h span{color:var(--t3);font-size:.78rem}
.cb-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(86px,1fr));gap:8px}
.cbx{border:1px solid var(--border);border-radius:12px;padding:9px;background:var(--panel);cursor:pointer;text-align:left;color:var(--t)}
.cbx b{display:block;font-size:.92rem}.cbx small{display:block;color:var(--t3);font-size:.7rem;margin-top:3px}
.cbx .b655{font-style:normal;font-size:.58rem;color:#B45309;background:#FEF3C7;border-radius:5px;padding:0 4px;margin-left:4px}
.cbx.fresh{border-color:rgba(22,163,74,.5);background:rgba(22,163,74,.10)}
.cbx.zero{border-color:rgba(217,119,6,.5);background:rgba(217,119,6,.08)}
.cbx.stale,.cbx.nocturnal,.cbx.pending,.cbx.disabled{border-color:var(--border);opacity:.72}
.cbx.error{border-color:rgba(185,28,28,.5);background:rgba(185,28,28,.08)}

/* ---- string bars ---- */
.cbd-head{display:flex;justify-content:space-between;align-items:center}
.cbd .b655{font-style:normal;color:#B45309;background:#FEF3C7;border-radius:5px;padding:1px 6px;font-size:.7rem}
.string-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(46px,1fr));gap:6px;margin:12px 0}
.sb{display:flex;flex-direction:column;align-items:center;gap:2px;border-radius:8px;padding:4px 2px}
.sb-top{font-size:.7rem;color:#F59E0B;height:12px;line-height:1}
.sb-track{width:100%;height:64px;background:var(--panel-h);border-radius:5px;display:flex;align-items:flex-end;overflow:hidden}
.sb-fill{width:100%;background:var(--idata);border-radius:4px 4px 3px 3px;transition:height .5s ease}
.sb-val{font-size:.7rem;font-weight:800}.sb-lbl{font-size:.62rem;color:var(--t3);font-weight:700}
.sb-max{background:rgba(245,158,11,.10);box-shadow:inset 0 0 0 2px #f59e0b}.sb-max .sb-fill{background:#f59e0b}.sb-max .sb-lbl{color:#F59E0B}
.sb-low .sb-fill{background:#D97706}
.sb-zero .sb-fill{background:#64748B}
.sb-nodata .sb-fill{background:#334155}
.legend{font-size:.74rem;color:var(--t3);display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.legend .lg{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:4px;vertical-align:middle}
.legend .lg.sb-max{background:#f59e0b}.legend .lg.sb-ok{background:var(--idata)}.legend .lg.sb-low{background:#D97706}.legend .lg.sb-zero{background:#64748B}.legend .lg.sb-nodata{background:#334155}
.side{position:sticky;top:74px}

/* ---- trackers ---- */
.trk-tools{display:flex;gap:12px;align-items:center;margin-bottom:12px}
.trk-tools input{background:var(--panel-h);border:1px solid var(--border);border-radius:8px;padding:8px 12px;color:var(--t);min-width:240px}
.ncu-wrap{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.ncu-block{border:1px solid var(--border);border-radius:14px;padding:12px;background:var(--panel-h)}
.ncu-h{display:flex;justify-content:space-between;align-items:center;border-left:3px solid var(--idata);padding-left:8px;margin-bottom:10px}
.chip-est{font-size:.66rem;background:rgba(217,119,6,.16);color:#FBBF24;border-radius:6px;padding:2px 7px;margin-left:6px}
.trk-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:3px;margin-top:10px}
.trk{width:100%;aspect-ratio:1;border-radius:2px;background:var(--night)}
.trk.on{background:#16A34A}.trk.off{background:#475569}
.trk.hit{outline:2px solid #F59E0B;outline-offset:1px}

/* ---- meteo ---- */
.twin-meteo{display:flex;gap:10px;flex-wrap:wrap;margin-top:8px}
.meteo-chip{display:flex;flex-direction:column;gap:3px;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:10px 14px;min-width:96px}
.meteo-chip b{font-size:1.1rem}.meteo-chip span{color:var(--t3);font-size:.76rem}
.irr-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.irr-card{background:var(--panel-h);border:1px solid var(--border);border-radius:14px;padding:14px;text-align:center}
.irr-lbl{font-weight:900}.irr-val{font-size:1.8rem;font-weight:900;letter-spacing:-.04em}.irr-unit{color:var(--t3);font-size:.74rem}

/* ---- combiner explorer detail ---- */
.cbd .muted{margin:6px 0}
.sig-tools{display:flex;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.sig-tools input,.sig-tools select{background:var(--panel-h);border:1px solid var(--border);border-radius:8px;padding:8px 12px;color:var(--t)}
.sig-tools input{min-width:260px}

/* ---- topology ---- */
.topo-svg{width:100%;height:auto;display:block}
.topo-rect{fill:var(--panel-h);stroke:var(--border2);stroke-width:1}
.topo-rect.topo-edge{fill:rgba(29,78,216,.16);stroke:#1D4ED8}
.topo-rect.topo-backend{fill:rgba(124,58,237,.14);stroke:#7C3AED}
.topo-rect.topo-public{fill:rgba(22,163,74,.12);stroke:#16A34A}
.topo-rect.topo-store{fill:rgba(148,163,184,.12)}
.topo-t{fill:var(--t);font-size:12px;font-weight:800}
.topo-s{fill:var(--t3);font-size:10px}
.topo-cap{fill:var(--t3);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em}
.flow,.flow-static{fill:none;stroke-width:2.4}
.flow-ok{stroke:#16A34A;stroke-dasharray:5 7;animation:dash 1.4s linear infinite}
.flow-warn{stroke:#D97706;stroke-dasharray:5 7;animation:dash 2.2s linear infinite}
.flow-err{stroke:#B91C1C;stroke-dasharray:4 6;animation:dash 1s linear infinite}
.flow-data{stroke:#1D4ED8;stroke-dasharray:6 8;animation:dash 1.2s linear infinite}
.flow-static{stroke:#475569;stroke-dasharray:2 6;opacity:.5}
.topo-legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:12px;font-size:.76rem;color:var(--t3);align-items:center}
.lg-line{display:inline-block;width:18px;height:3px;border-radius:2px;margin-right:5px;vertical-align:middle}
.lg-line.ok{background:#16A34A}.lg-line.warn{background:#D97706}.lg-line.idle{background:#475569}.lg-line.data{background:#1D4ED8}.lg-line.err{background:#B91C1C}
.topo-modes{margin-top:8px;font-size:.74rem}
@keyframes dash{to{stroke-dashoffset:-24}}

/* ---- animations ---- */
@keyframes idatapulse{0%{box-shadow:0 0 0 0 rgba(22,163,74,.35)}70%{box-shadow:0 0 0 8px rgba(22,163,74,0)}100%{box-shadow:0 0 0 0 rgba(22,163,74,0)}}
.pulse .dot,.pulse{animation:idatapulse 2.6s ease-out infinite}
.topo-pulse circle{animation:idatapulse 2.6s ease-out infinite}
@media (prefers-reduced-motion: reduce){
  .flow-ok,.flow-warn,.flow-err,.flow-data{animation:none}
  .pulse,.pulse .dot,.topo-pulse circle{animation:none}
  .sb-fill{transition:none}
}
