
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
:root{--bg0:#0a0c10;--bg1:#0c0f16;--bg2:#101420;--brd:#182030;--brd2:#1c2538;--t1:#dfe3ed;--t2:#8090b0;--t3:#7886a5;--t4:#6f80a7;--acc:#00c2ff;--crit:#ff3b5c;--high:#ff7a3d;--med:#ffc53d;--low:#34d399;--info:#6888e8;--co:#a78bfa;--mono:'Courier New',Courier,monospace;--sans:system-ui,-apple-system,'Segoe UI',sans-serif}
html.light{--bg0:#f0f2f5;--bg1:#ffffff;--bg2:#e8ecf1;--brd:#d0d7e0;--brd2:#c4ccd8;--t1:#1a1e2a;--t2:#4a5568;--t3:#5a6878;--t4:#596878;--acc:#006494;--crit:#e0294a;--high:#e06020;--med:#a07800;--low:#137a4f;--info:#4a68c8;--co:#7c5cc4}
html,body{height:100%;font-family:var(--sans);background:var(--bg0);color:var(--t1);overflow:hidden;font-size:13px}
::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--brd2);border-radius:2px}
@keyframes gp{0%,100%{opacity:1}50%{opacity:.4}}
@keyframes slideUp{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.app{display:flex;flex-direction:column;height:100vh}
.top-nav{height:52px;background:var(--bg1);border-bottom:1px solid var(--brd);display:flex;align-items:center;justify-content:space-between;padding:0 20px;flex-shrink:0;z-index:1000}
.logo-area{display:flex;align-items:center;gap:10px}
.logo-text{display:flex;flex-direction:column;line-height:1}
.logo-text span:first-child{font-size:18px;font-weight:600;letter-spacing:.5px}
.logo-text span:last-child{font-size:6.5px;font-weight:400;color:var(--t2);letter-spacing:4px;text-transform:uppercase;margin-top:2px}
.logo-divider{width:1px;height:28px;background:var(--brd);margin:0 4px 0 6px}
.halios-brand{display:flex;align-items:baseline;gap:6px}
.halios-name{font-size:16px;font-weight:300;letter-spacing:3px;color:var(--acc);text-transform:uppercase}
.halios-sub{font-size:11px;font-weight:400;color:var(--t3);letter-spacing:.5px}
.halios-ver{font-size:9px;font-weight:500;color:var(--t4);font-family:var(--mono);background:rgba(0,194,255,.08);border:1px solid rgba(0,194,255,.15);border-radius:4px;padding:1px 5px}
.nav-right{display:flex;align-items:center;gap:12px}
.btn-import{padding:6px 14px;background:rgba(0,194,255,.1);border:1px solid rgba(0,194,255,.3);border-radius:6px;font-size:11.5px;font-weight:500;color:var(--acc);cursor:pointer;font-family:inherit;display:flex;align-items:center;gap:6px}
.btn-import:hover{background:rgba(0,194,255,.18)}
.status{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--t3)}
.status-dot{width:7px;height:7px;background:var(--low);border-radius:50%;box-shadow:0 0 8px rgba(52,211,153,.5);animation:gp 2s infinite}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--bg2);border:1px solid var(--brd);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--t3);cursor:pointer}
.main{display:flex;flex:1;overflow:hidden}
.sidebar{width:320px;min-width:320px;background:var(--bg1);border-right:1px solid var(--brd);display:flex;flex-direction:column}
.search-wrap{padding:14px;border-bottom:1px solid var(--brd)}
.search-box{display:flex;align-items:center;background:var(--bg2);border:1px solid var(--brd);border-radius:8px;padding:0 12px;transition:border-color .2s}
.search-box.active{border-color:rgba(0,194,255,.3)}
.search-box input{flex:1;background:none;border:none;outline:none;padding:9px 10px;font-size:13px;color:var(--t1);font-family:inherit}
.search-box input::placeholder{color:var(--t4)}
.search-clear{display:none;background:none;border:none;cursor:pointer;padding:4px 2px;color:var(--t4);font-size:16px;line-height:1;opacity:.6;transition:opacity .2s}
.search-clear:hover{opacity:1;color:#ff3b5c}
.search-box.active .search-clear{display:block}
.search-count{font-family:var(--mono);font-size:10px;color:var(--acc);flex-shrink:0}
.search-hint{font-size:10px;color:var(--t4);margin-top:6px;padding-left:4px}
.filter-tabs{display:flex;gap:3px;padding:10px 12px;border-bottom:1px solid var(--brd);flex-wrap:wrap}
.filter-tab{padding:5px 10px;font-size:11px;font-weight:500;cursor:pointer;border-radius:5px;font-family:inherit;border:1px solid transparent;background:transparent;color:var(--t4);text-transform:capitalize}
.filter-tab.active{border-color:rgba(0,194,255,.3);background:rgba(0,194,255,.1);color:var(--acc)}
.filter-count{font-family:var(--mono);font-size:10px;margin-left:4px;opacity:.6}
.dataset-filter{padding:0 12px 8px;border-bottom:1px solid var(--brd)}
.dataset-select{width:100%;padding:6px 10px;font-size:11px;font-family:inherit;background:rgba(0,194,255,0.05);border:1px solid rgba(0,194,255,0.15);border-radius:5px;color:var(--t2);cursor:pointer;outline:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2300c2ff' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center}
.dataset-select:focus{border-color:rgba(0,194,255,0.4)}
.dataset-select option{background:var(--bg1);color:var(--t2)}
/* S135: typed filters on custom columns (shown only when the chosen dataset has filterable columns) */
.custom-filters{display:none;padding:0 12px 8px;border-bottom:1px solid var(--brd)}
.custom-filters.show{display:block}
.cf-row{display:flex;align-items:center;gap:4px;margin-top:4px}
.cf-row label{font-size:10px;color:var(--t3);min-width:72px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cf-row input,.cf-row select{flex:1;min-width:0;padding:3px 6px;font-size:11px;font-family:inherit;background:rgba(0,194,255,0.05);border:1px solid rgba(0,194,255,0.15);border-radius:4px;color:var(--t2)}
.cf-row input:focus,.cf-row select:focus{border-color:rgba(0,194,255,0.4);outline:none}
.cf-head{display:flex;justify-content:space-between;align-items:center;font-size:10px;color:var(--t4);margin-top:6px}
.cf-head a{color:var(--acc);cursor:pointer;font-size:10px}
.intel-list{flex:1;overflow-y:auto;padding:6px}
.intel-card{padding:12px 10px;margin-bottom:2px;border-radius:7px;cursor:pointer;border:1px solid transparent;transition:all .15s}
.intel-card:hover{background:var(--bg2)}
.intel-card.active{background:var(--bg2);border-color:var(--acc);box-shadow:0 0 0 3px rgba(0,194,255,.08)}
.card-header{display:flex;gap:8px;align-items:flex-start;margin-bottom:6px;flex-wrap:wrap}
.sev-badge{padding:2px 7px;border-radius:4px;font-size:9.5px;font-weight:700;text-transform:uppercase;font-family:var(--mono);flex-shrink:0;white-space:nowrap}
.card-title{font-size:12.5px;font-weight:500;line-height:1.35;min-width:0;overflow-wrap:anywhere}
.card-meta{display:flex;align-items:center;gap:8px;font-size:10.5px;color:var(--t4);flex-wrap:wrap}
.card-type{font-family:var(--mono);font-size:9.5px;padding:1px 5px;background:var(--bg0);border-radius:3px;color:var(--t3)}
.match-row{margin-top:5px;display:flex;align-items:center;gap:5px}
.match-key{font-size:10px;color:var(--t3)}
.match-val{font-size:10px;color:var(--acc);font-family:var(--mono);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.map-area{flex:1;position:relative}
#map{width:100%;height:100%;z-index:1;background:#0e0e10}   /* S147: the land colour behind the tiles — no light-grey flash while they paint */
html.light #map{background:#e2dfda}
/* S147 (Obs-S147-5): the page-placed country label — same type as the dark map's country rule; light keeps the stock light flavor's country colour */
.country-label-patch{font:600 12px "Avenir Next","Montserrat","Segoe UI",system-ui,sans-serif;letter-spacing:.8px;text-transform:uppercase;color:#55555a;text-shadow:0 0 2px #0e0e10,0 0 2px #0e0e10;white-space:nowrap;transform:translate(-50%,-50%);pointer-events:none;background:none;border:none;text-align:center;width:auto!important;height:auto!important}
html.light .country-label-patch{color:#a3a3a3;text-shadow:0 0 2px #e2dfda,0 0 2px #e2dfda}
.map-controls{position:absolute;top:12px;left:12px;z-index:900;display:flex;gap:6px;flex-wrap:wrap}
.layer-btn{padding:6px 12px;font-size:11.5px;font-family:inherit;cursor:pointer;border-radius:7px;backdrop-filter:blur(12px);transition:all .2s}
.layer-btn.on{border:1px solid rgba(0,194,255,.3);background:rgba(0,194,255,.08);color:var(--acc)}
.layer-btn.off{border:1px solid var(--brd);background:rgba(12,15,22,.9);color:var(--t3)}
.map-legend{position:absolute;bottom:14px;left:14px;z-index:900;padding:8px 14px;background:rgba(12,15,22,.92);border:1px solid var(--brd);border-radius:8px;display:flex;gap:14px}
.legend-item{display:flex;align-items:center;gap:5px;font-size:10.5px;color:var(--t4)}
.legend-dot{width:7px;height:7px;border-radius:50%}
.right-panel{width:300px;min-width:300px;background:var(--bg1);border-left:1px solid var(--brd);display:flex;flex-direction:column;overflow-x:hidden}
.right-header{padding:13px 16px;border-bottom:1px solid var(--brd);display:flex;align-items:center;justify-content:space-between}
.right-header h2{font-size:11px;font-weight:600;letter-spacing:1.2px;text-transform:uppercase;color:var(--t3);margin:0}
.right-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:14px}
.right-content svg{width:auto;height:auto;display:inline}
/* S151a: the right panel collapses to a strip (demo mode) */
.right-panel{transition:width .2s ease,min-width .2s ease}
.right-panel.collapsed{width:28px;min-width:28px}
.right-panel.collapsed .right-content,.right-panel.collapsed #rightTitle{display:none}
.right-panel.collapsed .right-header{padding:13px 3px;justify-content:center}
.right-toggle{background:none;border:1px solid var(--brd2);color:var(--t3);border-radius:6px;width:20px;height:20px;line-height:16px;padding:0;cursor:pointer;font-size:14px;flex:none;font-family:inherit}
.right-toggle:hover{color:var(--t1);border-color:var(--acc)}
.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:18px}
.stat-box{background:var(--bg2);border:1px solid var(--brd);border-radius:8px;padding:12px}
.stat-label{font-size:10px;font-weight:500;color:var(--t4);text-transform:uppercase;letter-spacing:.5px;margin-bottom:5px}
.stat-val{font-family:var(--mono);font-size:22px;font-weight:700;overflow:hidden;text-overflow:ellipsis}
.section-title{font-size:10.5px;font-weight:600;color:var(--t4);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}
.bar-row{display:flex;align-items:center;gap:8px;margin-bottom:7px;font-size:11px}
.bar-label{width:96px;color:var(--t4);text-align:right;flex-shrink:0;font-size:10.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar-track{flex:1;height:5px;background:var(--bg0);border-radius:3px;overflow:hidden}
.bar-fill{height:100%;border-radius:3px}
.bar-val{font-family:var(--mono);font-size:10.5px;color:var(--t3);width:62px;flex-shrink:0;text-align:right}
.detail-row{display:flex;justify-content:space-between;padding:8px 0;border-top:1px solid var(--brd);font-size:12px}
.detail-key{color:var(--t4);text-transform:capitalize}
.detail-val{color:var(--t1);font-weight:500;font-family:var(--mono);font-size:11px;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}
.btn-primary{padding:8px 0;background:var(--acc);color:var(--bg0);border:none;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;flex:1}
.btn-secondary{padding:8px 0;background:transparent;color:var(--t3);border:1px solid var(--brd);border-radius:6px;font-size:12px;cursor:pointer;font-family:inherit;flex:1}
.btn-back{width:100%;margin-top:8px;padding:7px 0;background:none;border:1px solid var(--brd);border-radius:6px;color:var(--t4);font-size:11px;cursor:pointer;font-family:inherit}
.activity-item{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid var(--brd);cursor:pointer}
.activity-dot{width:7px;height:7px;border-radius:50%;margin-top:5px;flex-shrink:0}
.leaflet-control-zoom a{background:var(--bg2)!important;color:var(--t1)!important;border-color:var(--brd)!important}
.leaflet-control-zoom a:hover{background:var(--bg1)!important}
.leaflet-control-attribution{background:rgba(10,12,16,.85)!important;color:var(--t4)!important;font-size:10px!important}
.leaflet-control-attribution a{color:var(--t3)!important}
.leaflet-popup-content-wrapper{background:var(--bg2)!important;border:1px solid var(--brd2)!important;border-radius:10px!important;box-shadow:0 20px 60px rgba(0,0,0,.5)!important}
.leaflet-popup-tip{background:var(--bg2)!important}
.leaflet-popup-content{margin:0!important}
.leaflet-popup-close-button{color:var(--t4)!important;font-size:20px!important;padding:6px 8px 0 0!important}
.marker-cluster{background:rgba(0,194,255,.15)!important}
.marker-cluster div{background:rgba(0,194,255,.4)!important;color:#fff!important;font-family:var(--mono)!important;font-size:11px!important;font-weight:600!important}
.pulse-marker{width:14px;height:14px;border-radius:50%;position:relative}
.pulse-marker::before{content:'';position:absolute;inset:-6px;border-radius:50%;border:2px solid;animation:ring 2s ease-out infinite;opacity:0}
@keyframes ring{0%{transform:scale(.5);opacity:.8}100%{transform:scale(2.2);opacity:0}}
.m-critical{background:var(--crit);box-shadow:0 0 12px var(--crit)}.m-critical::before{border-color:var(--crit)}
.m-high{background:var(--high);box-shadow:0 0 10px var(--high)}.m-high::before{border-color:var(--high)}
.m-medium{background:var(--med);box-shadow:0 0 8px var(--med)}.m-medium::before{border-color:var(--med)}
.m-low{background:var(--low);box-shadow:0 0 8px var(--low)}.m-low::before{border-color:var(--low)}
.m-info{background:var(--info);box-shadow:0 0 8px var(--info)}.m-info::before{border-color:var(--info)}
.m-company{background:var(--co);box-shadow:0 0 8px var(--co)}.m-company::before{border-color:var(--co)}
.m-ds-beeline{background:#00c2ff;box-shadow:0 0 8px #00c2ff}.m-ds-beeline::before{border-color:#00c2ff}
.m-ds-sberbank{background:#ffc53d;box-shadow:0 0 8px #ffc53d}.m-ds-sberbank::before{border-color:#ffc53d}
.m-ds-driver{background:#34d399;box-shadow:0 0 8px #34d399}.m-ds-driver::before{border-color:#34d399}
.m-ds-egrip{background:#a78bfa;box-shadow:0 0 8px #a78bfa}.m-ds-egrip::before{border-color:#a78bfa}
.m-watchlist{background:#dc2626;box-shadow:0 0 10px #dc2626}.m-watchlist::before{border-color:#dc2626}
.popup-inner{padding:16px;min-width:240px}
.popup-inner h3{font-family:var(--sans);font-size:14px;font-weight:600;color:var(--t1);margin-bottom:4px}
.popup-type{font-family:var(--mono);font-size:10px;color:var(--t4);text-transform:uppercase;letter-spacing:1px;margin-bottom:10px}
.popup-row{display:flex;justify-content:space-between;padding:5px 0;border-top:1px solid var(--brd);font-size:12px}
.popup-row-k{color:var(--t4)}.popup-row-v{color:var(--t1);font-weight:500;font-family:var(--mono);font-size:11px}
.popup-actions{display:flex;gap:8px;margin-top:10px}
.popup-actions button{flex:1;padding:6px 0;border-radius:6px;font-family:var(--sans);font-size:11px;font-weight:500;cursor:pointer;border:none}
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:9999;display:none;align-items:center;justify-content:center;backdrop-filter:blur(4px)}
.modal-overlay.show{display:flex}
.modal{background:var(--bg1);border:1px solid var(--brd2);border-radius:12px;width:620px;max-height:80vh;overflow:auto;box-shadow:0 24px 80px rgba(0,0,0,.6)}
.modal-header{padding:18px 24px;border-bottom:1px solid var(--brd2);display:flex;justify-content:space-between;align-items:center}
.modal-header h3{font-size:14px;font-weight:600;margin:0}
.modal-close{background:none;border:none;color:var(--t3);font-size:18px;cursor:pointer}
.modal-body{padding:20px 24px}
.drop-zone{border:2px dashed var(--brd2);border-radius:10px;padding:48px 24px;text-align:center;cursor:pointer;transition:border-color .2s}
.drop-zone:hover{border-color:var(--acc)}
.compat-box{margin-top:16px;padding:14px;background:var(--bg2);border-radius:8px;border:1px solid var(--brd2)}
.compat-box h5{font-size:11px;font-weight:600;color:var(--t3);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}
.compat-box p{font-size:12px;color:var(--t2);line-height:1.6}
.file-info{padding:10px;background:var(--bg2);border-radius:8px;border:1px solid var(--brd2);margin-bottom:16px;display:flex;justify-content:space-between;align-items:center}
.map-fields{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.field-label{display:block;font-size:11px;font-weight:500;color:var(--t3);text-transform:uppercase;letter-spacing:.8px;margin:14px 0 6px}
.field-select{width:100%;padding:8px 10px;background:var(--bg2);border:1px solid var(--brd2);border-radius:6px;color:var(--t1);font-size:12px;font-family:inherit;outline:none}
.field-select option{background:var(--bg2);color:var(--t1)}
.preview-table{width:100%;border-collapse:collapse;font-size:11px;font-family:var(--mono)}
.preview-table th{padding:6px 8px;text-align:left;color:var(--t3);border-bottom:1px solid var(--brd2);background:var(--bg2);font-weight:500;white-space:nowrap}
.preview-table td{padding:5px 8px;color:var(--t2);border-bottom:1px solid #0f1520;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.import-btn{padding:9px 20px;background:var(--acc);color:var(--bg0);border:none;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit}
.import-btn:disabled{opacity:.4;cursor:default}
.import-btn-sec{padding:9px 20px;background:transparent;color:var(--t3);border:1px solid var(--brd2);border-radius:6px;font-size:12px;cursor:pointer;font-family:inherit}
.stats-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:20px}
.stats-box{background:var(--bg2);border-radius:8px;padding:14px;border:1px solid var(--brd2);text-align:center}
.stats-box small{font-size:10px;color:var(--t3);text-transform:uppercase;display:block;margin-bottom:4px}
.stats-box strong{font-family:var(--mono);font-size:22px;font-weight:700;display:block}
.empty-state{padding:40px 20px;text-align:center}
.empty-state svg{margin:0 auto 12px}
.empty-state h4{font-size:13px;font-weight:500;color:var(--t3);margin-bottom:6px}
.empty-state p{font-size:11px;color:var(--t4);line-height:1.6}
@media(max-width:1200px){.right-panel{display:none}}
@media(max-width:900px){.sidebar{width:260px;min-width:260px}}
@media(max-width:700px){.sidebar{display:none}}

/* Login Screen */
.login-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:var(--bg0);z-index:10000;display:flex;align-items:center;justify-content:center}
.login-overlay.hidden{display:none}
.login-box{width:380px;background:var(--bg1);border:1px solid var(--brd);border-radius:12px;padding:40px;text-align:center}
.login-logo{margin-bottom:24px}
.login-logo svg{margin-bottom:12px}
.login-logo h1{font-size:20px;font-weight:300;letter-spacing:3px;color:var(--acc);text-transform:uppercase;margin:0}
.login-logo p{font-size:11px;color:var(--t3);margin:4px 0 0;letter-spacing:1px}
.login-field{width:100%;padding:10px 14px;background:var(--bg2);border:1px solid var(--brd);border-radius:8px;color:var(--t1);font-size:13px;font-family:inherit;margin-bottom:12px;outline:none;transition:border-color .2s}
.login-field:focus{border-color:rgba(0,194,255,.4)}
.login-field::placeholder{color:var(--t4)}
.login-btn{width:100%;padding:11px;background:var(--acc);color:var(--bg0);font-size:13px;font-weight:600;font-family:inherit;border:none;border-radius:8px;cursor:pointer;margin-top:4px;transition:opacity .2s}
.login-btn:hover{opacity:.9}
.login-btn:disabled{opacity:.5;cursor:not-allowed}
.login-error{color:var(--crit);font-size:12px;margin-top:10px;min-height:18px}
.login-footer{margin-top:20px;font-size:11px;color:var(--t4)}
/* S107: first-run setup panels + seats registry */
.setup-panel{width:420px;background:var(--bg1);border:1px solid var(--brd);border-radius:12px;padding:34px 40px;text-align:left;display:none}
.setup-panel h2{font-size:15px;font-weight:600;color:var(--t1);margin:0 0 6px;text-align:center}
.setup-panel .setup-sub{font-size:11.5px;color:var(--t3);line-height:1.6;margin-bottom:18px;text-align:center}
.setup-step-dots{display:flex;justify-content:center;gap:6px;margin-bottom:16px}
.setup-step-dots span{width:7px;height:7px;border-radius:50%;background:var(--brd2)}
.setup-step-dots span.on{background:var(--acc)}
.setup-key-box{font-family:var(--mono);font-size:13px;letter-spacing:1.5px;background:var(--bg2);border:1px dashed var(--brd2);border-radius:8px;padding:12px;text-align:center;margin:10px 0;user-select:all;word-break:break-all;color:var(--t1)}
.setup-hint{font-size:11px;color:var(--t4);line-height:1.6;margin-top:10px}
.seats-table{width:100%;border-collapse:collapse;font-size:11.5px}
.seats-table th{font-size:10px;text-transform:uppercase;letter-spacing:.6px;color:var(--t3);text-align:left;padding:6px 10px;border-bottom:1px solid var(--brd2)}
.seats-table td{padding:7px 10px;border-bottom:1px solid var(--brd);color:var(--t2);white-space:nowrap}
.seats-table td.mono{font-family:var(--mono);font-size:11px}
.seat-pill{display:inline-block;padding:1px 8px;border-radius:9px;font-size:10px;letter-spacing:.4px}
/* S116: dataset entitlement switch (seats page). A real control — the earlier
   clickable-pill form read as a label, not something you could operate. */
.ent-tog{display:inline-flex;align-items:center;gap:6px;cursor:pointer;user-select:none;font-size:10px;letter-spacing:.4px;color:var(--t3)}
.ent-tog+.ent-tog{margin-left:10px}
.ent-tog .ent-sw{position:relative;width:28px;height:15px;border-radius:999px;background:var(--bg2);border:1px solid var(--brd2);transition:background .15s,border-color .15s;flex:0 0 auto}
.ent-tog .ent-sw::after{content:'';position:absolute;top:2px;left:2px;width:9px;height:9px;border-radius:50%;background:var(--t3);transition:transform .15s,background .15s}
.ent-tog.on{color:#3db478}
.ent-tog.on .ent-sw{background:rgba(61,180,120,.28);border-color:rgba(61,180,120,.5)}
.ent-tog.on .ent-sw::after{transform:translateX(13px);background:#3db478}
.ent-tog.busy{opacity:.45;pointer-events:none}
/* S130: a grant whose dataset is no longer published — struck, kept, removable on purpose */
.ent-dangling{display:inline-block;margin-right:10px;padding:1px 8px;border-radius:9px;font-size:10px;letter-spacing:.4px;background:rgba(217,164,65,.14);color:#d9a441;text-decoration:line-through;cursor:pointer}
.seat-pill.ok{background:rgba(61,180,120,.14);color:#3db478}
.seat-pill.warn{background:rgba(217,164,65,.14);color:#d9a441}
.seat-pill.dim{background:var(--bg2);color:var(--t3)}
.loading-spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--brd);border-top-color:var(--acc);border-radius:50%;animation:spin .6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.search-loading{display:flex;align-items:center;justify-content:center;padding:40px;color:var(--t3);gap:10px;font-size:12px}
.btn-logout{padding:6px 12px;background:transparent;border:1px solid var(--brd);border-radius:6px;font-size:11px;color:var(--t3);cursor:pointer;font-family:inherit}
.btn-logout:hover{border-color:var(--crit);color:var(--crit)}

/* === Correlation Engine === */
.m-correlated{background:transparent;border:3px solid #00c2ff;box-shadow:0 0 12px rgba(0,194,255,.5)}.m-correlated::before{border-color:#00c2ff}
.m-inferred{background:rgba(255,122,61,.15);border:3px dashed #ff7a3d;box-shadow:0 0 14px rgba(255,122,61,.5)}.m-inferred::before{border-color:#ff7a3d;animation:ring 2.5s ease-out infinite}
.inferred-label{position:absolute;top:-22px;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:8px;font-weight:700;font-family:var(--mono);color:#ff7a3d;background:rgba(10,12,16,.85);padding:1px 5px;border-radius:3px;border:1px solid rgba(255,122,61,.4);letter-spacing:.5px;text-transform:uppercase;pointer-events:none}

.corr-section{margin-top:14px;padding-top:10px;border-top:1px solid rgba(255,255,255,0.06)}
.corr-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.corr-title{font-size:11px;color:var(--t3);text-transform:uppercase;letter-spacing:1px;font-family:var(--mono)}
.corr-loading{display:flex;align-items:center;gap:8px;padding:16px 0;font-size:11px;color:var(--t3)}
.corr-empty{padding:12px 0;font-size:11px;color:var(--t4);text-align:center}
.corr-tier{margin-bottom:12px}
.corr-tier-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;margin-bottom:6px;padding:3px 8px;border-radius:4px;display:inline-block;font-family:var(--mono)}
.corr-tier-high .corr-tier-label{background:rgba(52,211,153,.12);color:#34d399}
.corr-tier-medium .corr-tier-label{background:rgba(255,197,61,.12);color:#ffc53d}
.corr-tier-low .corr-tier-label{background:rgba(94,106,138,.15);color:#5e6a8a}
.corr-card{padding:8px 10px;margin-bottom:4px;background:rgba(0,194,255,.03);border:1px solid rgba(0,194,255,.08);border-radius:6px;cursor:pointer;transition:all .15s}
.corr-card:hover{background:rgba(0,194,255,.07);border-color:rgba(0,194,255,.2)}
.corr-card-top{display:flex;align-items:center;gap:6px;margin-bottom:4px}
.corr-score{font-family:var(--mono);font-size:10px;font-weight:700;padding:2px 6px;border-radius:4px;flex-shrink:0}
.corr-score-high{background:rgba(52,211,153,.15);color:#34d399}
.corr-score-medium{background:rgba(255,197,61,.15);color:#ffc53d}
.corr-score-low{background:rgba(94,106,138,.15);color:#5e6a8a}
.corr-dataset{font-size:9px;font-family:var(--mono);padding:2px 6px;border-radius:3px;background:rgba(167,139,250,.1);color:#a78bfa;text-transform:uppercase;flex-shrink:0}
.corr-card-title{font-size:12px;font-weight:500;color:var(--t1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.corr-match-tag{font-size:9px;font-family:var(--mono);padding:1px 5px;border-radius:3px;background:rgba(0,194,255,.08);color:var(--acc)}
.corr-evidence{margin-top:4px;display:flex;flex-wrap:wrap;gap:3px}
.corr-ev-item{font-size:8.5px;font-family:var(--mono);padding:1px 4px;border-radius:3px;background:rgba(94,106,138,.12);color:var(--t3)}
.gt-evidence{margin-top:5px;padding-top:5px;border-top:1px solid rgba(94,106,138,.2)}
.gt-ev-details{margin-top:5px}
.gt-ev-summary{cursor:pointer;font-size:11px;color:var(--t3);user-select:none}
.gt-ev-details .gt-evidence{margin-top:4px;border-top:none;padding-top:3px}
.gt-ev-row{font-size:9px;font-family:var(--mono);line-height:1.6}
.corr-matches{display:flex;flex-wrap:wrap;gap:3px}
.corr-source-legend{margin-top:12px;padding:10px;background:rgba(0,194,255,.03);border:1px solid rgba(0,194,255,.08);border-radius:6px}
.corr-source-legend-title{font-size:10px;font-weight:600;color:var(--t3);text-transform:uppercase;letter-spacing:.8px;margin-bottom:6px;font-family:var(--mono)}
.corr-source-item{font-size:11px;color:var(--t2);padding:2px 0}
.corr-source-num{font-weight:700;color:var(--acc);margin-right:4px}

.btn-theme{padding:5px 8px;background:transparent;border:1px solid var(--brd);border-radius:6px;cursor:pointer;color:var(--t3);display:flex;align-items:center;justify-content:center;transition:all .2s}
.btn-theme:hover{border-color:var(--acc);color:var(--acc)}
html.light .leaflet-control-zoom a{background:var(--bg1)!important;color:var(--t1)!important;border-color:var(--brd)!important}
html.light .leaflet-control-zoom a:hover{background:var(--bg2)!important}
html.light .leaflet-control-attribution{background:rgba(255,255,255,.85)!important;color:var(--t3)!important}
html.light .leaflet-popup-content-wrapper{background:var(--bg1)!important;border:1px solid var(--brd)!important}
html.light .leaflet-popup-tip{background:var(--bg1)!important}
html.light .map-legend{background:rgba(255,255,255,.92)}
html.light .inferred-label{background:rgba(255,255,255,.9)}
html.light .marker-cluster{background:rgba(0,100,148,.15)!important}
html.light .marker-cluster div{background:rgba(0,100,148,.5)!important}
html.light .login-overlay{background:var(--bg2)}
html.light ::-webkit-scrollbar-thumb{background:var(--brd)}

.modal.modal-wide{width:780px}
/* S135b (operator walk): the import wizard gets real width; Seats keeps 780px */
#importModal .modal.modal-wide{width:min(1100px,94vw)}
.help-q{display:inline-block;width:13px;height:13px;line-height:13px;text-align:center;border-radius:50%;background:var(--brd2);color:var(--t3);font-size:9px;font-weight:700;margin-left:5px;cursor:help;vertical-align:middle;text-transform:none}
.help-q:hover{background:var(--acc);color:#04121f}
.conf-warn{font-family:var(--mono);font-size:10.5px;padding:2px 6px;border-radius:4px;background:rgba(255,197,61,.12);color:var(--med);margin-left:6px;cursor:help;white-space:nowrap}
.map-util{color:var(--t3);text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--brd2)}
.map-util:hover{color:var(--acc);text-decoration-color:var(--acc)}
.help-pop{position:fixed;z-index:10600;max-width:360px;background:var(--bg1);border:1px solid var(--brd2);border-radius:8px;padding:10px 12px;font-size:11.5px;line-height:1.55;color:var(--t2);box-shadow:0 12px 40px rgba(0,0,0,.55)}
/* S116: the seats table carries 10 nowrap columns — a fixed 780px box forced a
   horizontal scroll to reach Last login/Created. Size to content instead,
   capped at the viewport (min-width keeps the box from collapsing when the
   registry is small). Seats-only: modal-wide is shared with the import modal. */
.modal.modal-seats{width:auto;min-width:780px;max-width:min(96vw,1180px)}
.step-bar{display:flex;gap:0;margin-bottom:20px;position:relative}
.step-bar::before{content:'';position:absolute;top:12px;left:24px;right:24px;height:2px;background:var(--brd2)}
.step-item{flex:1;text-align:center;position:relative;z-index:1}
.step-num{width:24px;height:24px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;font-family:var(--mono);border:2px solid var(--brd2);background:var(--bg1);color:var(--t4);margin-bottom:4px;transition:all .2s}
.step-item.active .step-num{border-color:var(--acc);background:var(--acc);color:var(--bg0)}
.step-item.done .step-num{border-color:var(--low);background:rgba(52,211,153,.15);color:var(--low)}
.step-label{font-size:10.5px;color:var(--t4);text-transform:uppercase;letter-spacing:.8px;display:block}
.step-item.active .step-label{color:var(--acc)}
.step-item.done .step-label{color:var(--low)}
.schema-table{width:100%;border-collapse:collapse;font-size:13px;margin:12px 0}   /* S147: 11 -> 13px */
.schema-table th{padding:9px 10px;text-align:left;color:var(--t2);border-bottom:2px solid var(--brd2);font-weight:600;font-size:11.5px;text-transform:uppercase;letter-spacing:.6px;white-space:nowrap}
.schema-table td{padding:8px 10px;border-bottom:1px solid var(--brd);color:var(--t1);vertical-align:middle}
.schema-table tr:hover{background:rgba(0,194,255,.03)}
.schema-table .field-name{font-family:var(--mono);font-size:13px;color:var(--t1);font-weight:600}
.schema-table .type-badge{font-family:var(--mono);font-size:11px;padding:3px 8px;border-radius:4px;font-weight:600;display:inline-block}
.type-phone{background:rgba(0,194,255,.12);color:var(--acc)}
.type-email{background:rgba(104,136,232,.12);color:var(--info)}
.type-date{background:rgba(255,197,61,.12);color:var(--med)}
.type-text{background:rgba(142,142,142,.1);color:var(--t3)}
.type-keyword{background:rgba(167,139,250,.1);color:var(--co)}
.type-integer,.type-float{background:rgba(52,211,153,.1);color:var(--low)}
.type-ip,.type-url{background:rgba(255,122,61,.1);color:var(--high)}
.type-boolean{background:rgba(244,114,182,.1);color:#f472b6}
.type-geo_point{background:rgba(52,211,153,.15);color:var(--low)}
.conf-bar{width:48px;height:6px;background:var(--brd);border-radius:3px;display:inline-block;vertical-align:middle;margin-right:4px;position:relative;overflow:hidden}
.conf-fill{height:100%;border-radius:3px;transition:width .3s}
.conf-high{background:var(--low)}
.conf-med{background:var(--med)}
.conf-low{background:var(--crit)}
.sample-vals{font-family:var(--mono);font-size:12px;color:var(--t2);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.target-select{padding:6px 8px;background:var(--bg2);border:1px solid var(--brd);border-radius:4px;color:var(--t1);font-size:12.5px;font-family:var(--mono);outline:none;width:100%;max-width:230px}
.target-select:focus{border-color:rgba(0,194,255,.4)}
.schema-warnings{margin:8px 0;padding:9px 12px;background:rgba(255,197,61,.06);border:1px solid rgba(255,197,61,.15);border-radius:6px;font-size:12.5px;color:var(--med)}
.schema-warnings svg{vertical-align:middle;margin-right:4px}
.geo-pair-badge{font-size:9px;font-family:var(--mono);padding:1px 5px;border-radius:3px;background:rgba(52,211,153,.1);color:var(--low);margin-left:4px}
.progress-track{width:100%;height:8px;background:var(--brd);border-radius:4px;margin:12px 0;overflow:hidden}
.progress-fill{height:100%;background:var(--acc);border-radius:4px;transition:width .5s}
.progress-stats{display:flex;justify-content:space-between;font-size:11px;color:var(--t3);font-family:var(--mono)}
/* S130: wizard visibility control */
.vis-ctl{margin:12px 0 4px;padding:10px 12px;background:var(--bg2);border:1px solid var(--brd);border-radius:6px}
.vis-opts{display:flex;gap:10px;flex-wrap:wrap}
.vis-opt{display:flex;align-items:flex-start;gap:8px;flex:1 1 220px;padding:8px 10px;border:1px solid var(--brd2);border-radius:6px;cursor:pointer;font-size:12px;color:var(--t2)}
.vis-opt.on{border-color:var(--acc);background:rgba(0,194,255,.06)}
.vis-opt input{margin-top:3px}
.vis-opt small{display:block;font-size:10.5px;color:var(--t4);margin-top:2px}
.dataset-input{width:100%;padding:8px 10px;background:var(--bg2);border:1px solid var(--brd2);border-radius:6px;color:var(--t1);font-size:12px;font-family:inherit;outline:none}
.dataset-input:focus{border-color:rgba(0,194,255,.4)}
.dataset-input::placeholder{color:var(--t4)}
.mapping-footer{display:flex;justify-content:space-between;align-items:center;margin-top:16px;padding-top:14px;border-top:1px solid var(--brd)}
.schema-scroll{border:1px solid var(--brd);border-radius:6px}
/* S147: the Map Fields step (the only wide modal) lifts its small inline text one step; the modal-wide class is set only on step 3 */
.modal.modal-wide .modal-body [style*="font-size:11px"]{font-size:12.5px!important}
.modal.modal-wide .modal-body [style*="font-size:10.5px"]{font-size:12px!important}
.modal.modal-wide .modal-body [style*="font-size:10px"]{font-size:11.5px!important}
.modal.modal-wide .modal-body .help-q{width:15px;height:15px;line-height:15px;font-size:10px}

/* === D3 Graph Visualization (Session 29, polished Session 30) === */
.corr-tab-bar{display:flex;gap:2px;margin-bottom:10px;background:var(--bg0);border-radius:6px;padding:2px}
.corr-tab{flex:1;padding:5px 0;text-align:center;font-size:10px;font-weight:600;font-family:var(--mono);text-transform:uppercase;letter-spacing:.8px;cursor:pointer;border-radius:5px;color:var(--t4);transition:all .15s;border:none;background:none}
.corr-tab.active{background:rgba(0,194,255,.12);color:var(--acc)}
.corr-tab:hover:not(.active){color:var(--t2)}

/* Graph overlay — fullscreen modal for the graph */
.graph-overlay{position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:9998;display:none;align-items:center;justify-content:center;backdrop-filter:blur(6px)}
.graph-overlay.show{display:flex}
.graph-modal{background:var(--bg1);border:1px solid var(--brd2);border-radius:12px;width:calc(100vw - 80px);height:calc(100vh - 80px);max-width:1400px;max-height:900px;display:flex;flex-direction:column;box-shadow:0 24px 80px rgba(0,0,0,.6);overflow:hidden}
.graph-modal-header{padding:12px 20px;border-bottom:1px solid var(--brd);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.graph-modal-header h3{font-size:13px;font-weight:600;color:var(--t1);margin:0;display:flex;align-items:center;gap:10px}
.graph-modal-header h3 .gm-seed{font-size:11px;font-weight:400;color:var(--t3);font-family:var(--mono)}
.graph-modal-actions{display:flex;align-items:center;gap:10px}
.graph-modal-close{background:none;border:1px solid var(--brd);border-radius:6px;color:var(--t3);font-size:13px;cursor:pointer;padding:5px 12px;font-family:inherit;transition:all .15s}
.gma-btn{background:rgba(0,194,255,.12);border:1px solid rgba(0,194,255,.3);border-radius:6px;color:#00c2ff;font-size:12px;font-weight:600;cursor:pointer;padding:5px 12px;font-family:inherit;transition:all .15s}
.gma-btn:hover{background:rgba(0,194,255,.2)}
.graph-modal-close:hover{border-color:var(--crit);color:var(--crit)}
.graph-toolbar{padding:8px 20px;border-bottom:1px solid var(--brd);display:flex;align-items:center;gap:16px;flex-shrink:0;flex-wrap:wrap}
.graph-toolbar-group{display:flex;align-items:center;gap:6px}
.graph-toolbar-group label{font-size:10px;font-family:var(--mono);color:var(--t2);text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}
.graph-toolbar-group select{padding:4px 8px;font-size:11px;font-family:var(--mono);background:var(--bg2);border:1px solid var(--brd);border-radius:4px;color:var(--t2);cursor:pointer;outline:none}
.graph-toolbar-group select option{background:var(--bg1);color:var(--t2)}
.graph-toolbar-group input[type=range]{width:120px;height:4px;-webkit-appearance:none;appearance:none;background:var(--brd);border-radius:2px;outline:none}
.graph-toolbar-group input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--acc);cursor:pointer;border:2px solid var(--bg1)}
.graph-toolbar-val{font-size:10px;font-family:var(--mono);color:var(--acc);min-width:32px}
.graph-toolbar-stat{font-size:10px;font-family:var(--mono);color:var(--t4);margin-left:auto}
.graph-body{flex:1;position:relative;overflow:hidden;display:flex}
.graph-canvas{flex:1;position:relative;overflow:hidden;background:var(--bg0)}
.graph-canvas svg{width:100%;height:100%;display:block}
.graph-canvas svg text{font-family:var(--sans);pointer-events:none}
.graph-body-controls{position:absolute;top:12px;right:12px;display:flex;flex-direction:column;gap:4px;z-index:10}
.graph-body-controls button{padding:6px 10px;font-size:11px;font-family:var(--mono);background:rgba(12,15,22,.9);border:1px solid var(--brd);border-radius:5px;color:var(--t3);cursor:pointer;transition:all .15s}
.graph-body-controls button:hover{border-color:var(--acc);color:var(--acc)}
.graph-body-stats{position:absolute;bottom:10px;left:14px;font-size:10px;font-family:var(--mono);color:var(--t4);display:flex;gap:14px;z-index:10}
.graph-body-stats span{opacity:.7}
.graph-legend{position:absolute;bottom:28px;right:14px;display:flex;gap:12px;z-index:10;font-size:9px;font-family:var(--mono);color:var(--t4);flex-wrap:wrap;justify-content:flex-end;max-width:85%}   /* S158b: the line legend wraps; S158e: its own row above the stats line */
.graph-legend-line{width:14px;height:2px;border-radius:1px}
.graph-legend-note{color:var(--t3)}
.intel-conf-engine{font-size:12px;color:var(--t2);margin:2px 0 6px}   /* S158b: the engine's confidence on the entity card */
.graph-legend-item{display:flex;align-items:center;gap:4px}
.graph-legend-dot{width:8px;height:8px;border-radius:50%}

/* Graph tooltip — now supports pinning on click */
.graph-tooltip{position:absolute;background:var(--bg2);border:1px solid var(--brd2);border-radius:8px;padding:12px 14px;pointer-events:none;z-index:100;max-width:280px;opacity:0;transition:opacity .15s;box-shadow:0 12px 36px rgba(0,0,0,.5)}
.graph-tooltip.show{opacity:1;pointer-events:auto}
.graph-tooltip.pinned{border-color:var(--acc);box-shadow:0 12px 36px rgba(0,194,255,.15)}
.graph-tooltip h4{font-size:13px;font-weight:600;color:var(--t1);margin:0 0 4px}
.graph-tooltip .gt-meta{font-size:10px;color:var(--t4);font-family:var(--mono);margin-bottom:6px;display:block;line-height:1.6}   /* S159 (the walk): a wrapping line — the flex row broke the longer honesty text into columns */
.graph-tooltip .gt-ds{font-size:9px;padding:1px 6px;border-radius:3px;font-weight:600}
/* S144: same-source chip (seed-relative, display only) + the source-independence summary line */
.same-src-chip{font-size:9px;font-family:var(--mono);padding:1px 6px;border-radius:3px;font-weight:600;background:rgba(255,197,61,.12);color:#ffc53d;border:1px solid rgba(255,197,61,.35);white-space:nowrap;vertical-align:middle;margin-left:4px;cursor:help}
.src-ind-line{color:var(--t2)}
.src-ind-single{color:#ffc53d}
.graph-tooltip .gt-row{display:flex;justify-content:space-between;font-size:10.5px;padding:3px 0;gap:12px}
.graph-tooltip .gt-k{color:var(--t4);white-space:nowrap}.graph-tooltip .gt-v{color:var(--t2);font-family:var(--mono);text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}
.graph-tooltip .gt-edges{margin-top:6px;padding-top:6px;border-top:1px solid var(--brd)}
.graph-tooltip .gt-edge-tag{display:inline-block;font-size:9px;font-family:var(--mono);padding:1px 5px;border-radius:3px;margin:1px 2px;background:rgba(0,194,255,.08);color:var(--acc)}
.graph-tooltip .gt-btn{margin-top:8px;padding:5px 12px;font-size:10px;background:rgba(0,194,255,.12);border:1px solid rgba(0,194,255,.25);border-radius:5px;color:var(--acc);cursor:pointer;font-family:var(--mono);display:block;text-align:center;width:100%}
.graph-tooltip .gt-btn:hover{background:rgba(0,194,255,.22)}
.graph-tooltip .gt-nav{margin-top:4px;padding:5px 12px;font-size:10px;background:rgba(52,211,153,.08);border:1px solid rgba(52,211,153,.2);border-radius:5px;color:var(--low);cursor:pointer;font-family:var(--mono);display:block;text-align:center;width:100%}
.graph-tooltip .gt-nav:hover{background:rgba(52,211,153,.16)}
.graph-tooltip .gt-close{position:absolute;top:6px;right:8px;background:none;border:none;color:var(--t4);font-size:14px;cursor:pointer;line-height:1;padding:2px}
.graph-tooltip .gt-close:hover{color:var(--crit)}

/* Inline mini-graph in right panel (Session 29 fallback) */
.graph-container{position:relative;background:var(--bg0);border:1px solid var(--brd);border-radius:8px;overflow:hidden;min-height:200px}
.graph-container svg{width:100%;height:100%;display:block}
.graph-container svg text{font-family:var(--mono);pointer-events:none}

/* Address cluster panel */
.addr-panel{margin-top:8px;padding:8px 10px;background:rgba(0,194,255,.03);border:1px solid rgba(0,194,255,.08);border-radius:6px}
.addr-panel-title{font-size:10px;font-weight:600;color:var(--t3);text-transform:uppercase;letter-spacing:.8px;margin-bottom:6px;font-family:var(--mono)}
.addr-panel-item{padding:5px 6px;margin-bottom:2px;border-radius:4px;cursor:pointer;font-size:11px;color:var(--t2);transition:background .15s}
.addr-panel-item:hover{background:rgba(0,194,255,.06)}
.addr-panel-item .api-ds{font-size:9px;font-family:var(--mono);color:var(--co);margin-left:4px}

/* Node label backgrounds */
.node-label-bg{fill:var(--bg0);opacity:.75;rx:3;ry:3}
/* Edge hover highlight */
.graph-body svg line.edge-highlight{stroke-width:3!important;opacity:1!important}

/* Graph detail drawer — slides in from the right */
.graph-drawer{position:absolute;top:0;right:0;width:340px;height:100%;background:var(--bg1);border-left:1px solid var(--brd);z-index:50;overflow-y:auto;transform:translateX(100%);transition:transform .2s ease;box-shadow:-8px 0 24px rgba(0,0,0,.3)}
.graph-drawer.open{transform:translateX(0)}
.graph-drawer-header{padding:12px 14px;border-bottom:1px solid var(--brd);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:var(--bg1);z-index:1}
.graph-drawer-header h4{font-size:12px;font-weight:600;color:var(--t2);text-transform:uppercase;letter-spacing:.8px;margin:0}
.graph-drawer-close{background:none;border:none;color:var(--t4);font-size:16px;cursor:pointer;padding:2px 6px}
.graph-drawer-close:hover{color:var(--crit)}
.graph-drawer-body{padding:14px}
.graph-drawer-body .detail-row{display:flex;justify-content:space-between;padding:7px 0;border-top:1px solid var(--brd);font-size:12px}
.graph-drawer-body .detail-key{color:var(--t4);text-transform:capitalize}
.graph-drawer-body .detail-val{color:var(--t1);font-weight:500;font-family:var(--mono);font-size:11px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}
.graph-drawer-body .gd-section{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,0.06)}
.graph-drawer-body .gd-section-title{font-size:10px;color:var(--t3);text-transform:uppercase;letter-spacing:1px;margin-bottom:6px;font-family:var(--mono)}
.graph-drawer-body .gd-doc{margin-bottom:8px;padding:6px 8px;background:rgba(0,194,255,0.04);border:1px solid rgba(0,194,255,0.1);border-radius:5px}
.graph-drawer-body .gd-doc-type{font-size:10px;font-weight:600;color:var(--acc);text-transform:uppercase;margin-bottom:4px}
.graph-drawer-actions{padding:10px 14px;border-top:1px solid var(--brd);position:sticky;bottom:0;background:var(--bg1)}
.graph-drawer-actions button{width:100%;padding:8px 0;border-radius:6px;font-size:11px;font-weight:600;cursor:pointer;font-family:inherit;margin-bottom:6px}
.graph-drawer-actions .gda-graph{background:rgba(52,211,153,.1);color:#34d399;border:1px solid rgba(52,211,153,.25)}
.graph-drawer-actions .gda-graph:hover{background:rgba(52,211,153,.18)}
.graph-drawer-actions .gda-export{background:rgba(0,194,255,.1);color:var(--acc);border:1px solid rgba(0,194,255,.25)}
.graph-drawer-actions .gda-export:hover{background:rgba(0,194,255,.18)}
.graph-drawer-actions .gda-full{background:transparent;color:var(--t3);border:1px solid var(--brd)}
.graph-drawer-actions .gda-full:hover{border-color:var(--acc);color:var(--acc)}

/* === Intelligence Summary (Session 31) === */
.summary-panel{width:380px;min-width:380px;border-left:1px solid var(--brd);background:var(--bg1);overflow-y:auto;overflow-x:hidden;padding:20px}
.summary-panel svg{width:auto;height:auto;display:inline}
.summary-header{margin-bottom:16px}
.summary-headline{font-size:15px;font-weight:600;color:var(--t1);margin-bottom:4px}
.summary-subline{font-size:11px;color:var(--t3)}
.summary-entities{display:flex;flex-direction:column;gap:14px}
.entity-card{background:var(--bg1);border:1px solid var(--brd);border-radius:10px;overflow:hidden}
.entity-card-header{padding:12px 14px;border-bottom:1px solid var(--brd);cursor:pointer;transition:background .15s}
.entity-card-header:hover{background:rgba(0,194,255,.03)}
.entity-name{font-size:13px;font-weight:600;color:var(--t1)}
.entity-aka{font-size:10px;color:var(--t3);margin-top:2px;font-style:italic}
.entity-badges{display:flex;gap:5px;align-items:center;margin-top:6px}
.entity-badge{font-size:9px;padding:3px 8px;border-radius:4px;font-weight:600}
.entity-badge-records{background:rgba(0,194,255,.1);color:var(--acc)}
.entity-badge-datasets{background:rgba(167,139,250,.1);color:var(--co)}
.entity-card-body{padding:12px 14px;display:none}
.entity-card-body.show{display:block}
.intel-section{margin-bottom:12px}
.intel-section:last-child{margin-bottom:0}
.intel-section-title{font-size:9.5px;font-weight:600;color:var(--t4);text-transform:uppercase;letter-spacing:1px;margin-bottom:6px;display:flex;align-items:center;gap:6px}
.intel-section-title svg{opacity:.5}
.intel-grid{display:flex;flex-direction:column;gap:0}
.intel-row{display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid rgba(255,255,255,.04);font-size:12px}
.intel-key{color:var(--t3);white-space:nowrap}
.intel-val{color:var(--t1);font-weight:500;text-align:right;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.intel-val-mono{font-size:11px}
.intel-val-wrap{white-space:normal;word-break:break-word;line-height:1.6}
.intel-list-item{padding:6px 10px;margin-bottom:4px;background:rgba(0,194,255,.03);border:1px solid rgba(0,194,255,.06);border-radius:6px;font-size:11px;color:var(--t2);display:flex;justify-content:space-between;align-items:center}
.intel-list-item .il-type{font-size:9px;padding:1px 6px;border-radius:3px;background:rgba(0,194,255,.08);color:var(--acc);text-transform:uppercase}
.intel-ds-row{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:11px}
.intel-ds-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.intel-ds-name{color:var(--t2);flex:1}
.intel-ds-count{font-size:10px;color:var(--acc)}
.intel-confidence{padding:10px 14px;background:rgba(52,211,153,.04);border:1px solid rgba(52,211,153,.1);border-radius:8px;margin-bottom:14px}
.intel-translit{font-size:10px;color:var(--t4);font-style:italic;margin-top:1px}
.intel-conf-label{font-size:10px;font-weight:600;color:var(--t3);text-transform:uppercase;letter-spacing:.8px;margin-bottom:6px}
.intel-conf-bar{width:100%;height:6px;background:var(--brd);border-radius:3px;overflow:hidden;margin-bottom:4px}
.intel-conf-fill{height:100%;border-radius:3px;transition:width .4s}
.intel-conf-text{font-size:11px;color:var(--t2)}
.intel-business-item{padding:8px 10px;margin-bottom:6px;background:rgba(167,139,250,.04);border:1px solid rgba(167,139,250,.08);border-radius:6px}
.intel-business-item .ib-name{font-size:12px;font-weight:500;color:var(--t1);margin-bottom:4px}
.intel-business-item .ib-meta{font-size:10px;color:var(--t3)}
.intel-business-item .ib-status{font-size:9px;padding:1px 6px;border-radius:3px;display:inline-block;margin-top:4px}
.intel-business-item .ib-status-active{background:rgba(52,211,153,.12);color:var(--low)}
.intel-business-item .ib-status-terminated{background:rgba(255,59,92,.1);color:var(--crit)}
.intel-relationship{padding:10px 14px;background:rgba(255,197,61,.04);border:1px solid rgba(255,197,61,.1);border-radius:8px;margin-top:12px}
.intel-relationship .ir-title{font-size:10px;font-weight:600;color:var(--med);text-transform:uppercase;letter-spacing:.8px;margin-bottom:6px}
.intel-relationship .ir-text{font-size:11px;color:var(--t2);line-height:1.5}
.summary-empty{text-align:center;padding:60px 20px;color:var(--t3)}
.summary-empty svg{margin-bottom:12px;opacity:.3}
.summary-empty h4{font-size:14px;font-weight:500;margin-bottom:6px}
.summary-empty p{font-size:11px;color:var(--t4)}
.narrative-panel{margin-bottom:16px;padding:14px;border:1px solid var(--brd2);border-radius:8px;background:var(--bg2)}
.narrative-eyebrow{font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;display:flex;align-items:center;gap:7px;margin-bottom:10px}
.narrative-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex:0 0 auto}
.narrative-prose p{font-size:12px;line-height:1.55;color:var(--t2);margin:0 0 7px}
.narrative-prose p:last-child{margin-bottom:0}
.narrative-prose strong{color:var(--t1);font-weight:600}
.narrative-prose .narrative-frame{color:var(--t3);font-style:italic;font-size:11px}
.narrative-code{font-family:var(--mono);font-size:11px;color:var(--t1);background:var(--bg0);padding:1px 5px;border-radius:3px}
.narrative-ledger{display:flex;flex-wrap:wrap;gap:5px;margin-top:11px;padding-top:11px;border-top:1px solid var(--brd)}
.narrative-chip{font-size:9px;font-weight:600;padding:2px 7px;border-radius:10px;border:1px solid;background:transparent;white-space:nowrap}
.doc-dup-line{font-size:12px;line-height:1.55;margin:0 0 7px}
.doc-dup-found{color:var(--t1)}
.doc-dup-none{color:var(--t3)}
.doc-dup-unchecked{color:var(--med)}
.graph-timeline-panel{position:absolute;bottom:0;left:0;right:380px;background:var(--bg1);border-top:1px solid var(--brd);display:none;z-index:12;max-height:45%;overflow-y:auto}
.graph-timeline-panel.open{display:block}
.graph-timeline-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:rgba(0,194,255,.04);border-bottom:1px solid var(--brd);font-size:10px;font-weight:600;color:var(--acc);text-transform:uppercase;letter-spacing:1px;position:sticky;top:0;z-index:1}
.graph-timeline-header button{background:none;border:1px solid var(--brd);border-radius:4px;color:var(--t3);font-size:14px;cursor:pointer;padding:2px 8px;line-height:1}
.graph-timeline-header button:hover{border-color:var(--acc);color:var(--acc)}
.graph-timeline-body{padding:16px 20px}
.graph-timeline-body svg{width:100%;height:auto;display:block}

/* ─── S48 Iter Fb: Alerts bell + dropdown ─── */
.bell-wrap{position:relative}
.btn-bell{padding:5px 8px;background:transparent;border:1px solid var(--brd);border-radius:6px;cursor:pointer;color:var(--t3);display:flex;align-items:center;justify-content:center;transition:all .2s;position:relative}
.btn-bell:hover{border-color:var(--acc);color:var(--acc)}
.btn-bell.active{border-color:var(--acc);color:var(--acc);background:rgba(0,194,255,.08)}
.bell-badge{position:absolute;top:-5px;right:-5px;min-width:16px;height:16px;padding:0 4px;background:var(--crit);color:#fff;font-family:var(--mono);font-size:9.5px;font-weight:700;border-radius:8px;display:flex;align-items:center;justify-content:center;line-height:1;box-shadow:0 0 6px rgba(255,59,92,.5)}
.alerts-dropdown{position:absolute;top:calc(100% + 8px);right:0;width:360px;max-height:480px;background:var(--bg1);border:1px solid var(--brd);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.4);z-index:1001;overflow:hidden;display:flex;flex-direction:column}
.alerts-dropdown-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--brd);font-size:11.5px;font-weight:600;color:var(--t2);text-transform:uppercase;letter-spacing:.5px}
.alerts-dropdown-count{font-family:var(--mono);font-size:10px;color:var(--t3);font-weight:400;text-transform:none;letter-spacing:0}
.alerts-dropdown-body{overflow-y:auto;flex:1}
.alerts-row{padding:10px 14px;border-bottom:1px solid var(--brd);cursor:pointer;display:flex;flex-direction:column;gap:4px;transition:background .15s}
.alerts-row:hover{background:var(--bg2)}
.alerts-row:last-child{border-bottom:none}
.alerts-row.unread{border-left:2px solid var(--acc);background:rgba(0,194,255,.04)}
.alerts-row-top{display:flex;align-items:center;gap:6px}
.alerts-row-title{font-size:12px;color:var(--t1);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.alerts-row-meta{font-size:10px;color:var(--t4);font-family:var(--mono)}
.alerts-empty{padding:40px 20px;text-align:center;color:var(--t4);font-size:12px}

/* ── S152: rules formerly inline in the body (S95 quota chrome + S149 case workspaces) ── */
    .quota-banner{display:none;padding:7px 18px;font-size:11px;letter-spacing:.4px;font-family:inherit;background:rgba(217,164,65,.12);border-bottom:1px solid rgba(217,164,65,.45);color:#d9a441;text-align:center}
    .quota-banner.exhausted{background:rgba(214,69,69,.12);border-bottom-color:rgba(214,69,69,.5);color:#d64545}
    .quota-stat-box{margin-top:14px;padding:10px 12px;border:1px solid var(--brd2);font-size:11px;color:var(--t3)}
    .usage-section{margin-top:18px}
    /* S149: case workspaces */
    .case-chip{display:inline-flex;align-items:center;gap:6px;max-width:240px;padding:3px 8px;border:1px solid rgba(0,194,255,.35);border-radius:12px;background:rgba(0,194,255,.10);color:#00c2ff;font-size:10px;letter-spacing:.3px;cursor:pointer;white-space:nowrap;font-family:inherit}
    .case-chip b{font-weight:600;overflow:hidden;text-overflow:ellipsis;max-width:160px}
    .case-chip .case-chip-x{opacity:.7;padding:0 2px}
    .case-chip .case-chip-x:hover{opacity:1}
    .case-card{border:1px solid var(--brd);border-radius:8px;padding:10px;margin-bottom:8px;background:var(--bg0)}
    .case-card.active{border-color:rgba(0,194,255,.45)}
    .case-sec{margin-top:10px;border-top:1px solid var(--brd);padding-top:8px}
    .case-sec-h{font-size:10px;font-weight:600;color:var(--t4);text-transform:uppercase;letter-spacing:1px;margin-bottom:6px;display:flex;justify-content:space-between;align-items:center;gap:8px}
    .case-item{padding:6px 8px;border:1px solid var(--brd);border-radius:6px;margin-bottom:5px;font-size:11px;background:var(--bg0)}
    .case-item .ci-title{cursor:pointer;font-weight:600;color:var(--t1)}
    .case-item .ci-meta{font-size:10px;color:var(--t4);margin-top:2px}
    .case-input{width:100%;box-sizing:border-box;padding:6px 8px;font-size:11px;font-family:inherit;background:var(--bg0);border:1px solid var(--brd);border-radius:6px;color:var(--t1);margin-bottom:6px}
    .case-pencil{cursor:pointer;color:var(--t4);font-size:12px;margin-left:6px;font-weight:400}
    .case-pencil:hover{color:var(--acc)}
/* S153: the two hover effects that were inline onmouse* handlers (the strict CSP) */
.hov-row:hover{background:rgba(0,194,255,0.05)}
.hov-acc:hover{border-color:var(--acc) !important}

/* ── S154 — sanctioned records in the results list (D-S154-9) ── */
.listed-links{margin:0 0 10px;padding:0 0 8px;border-bottom:1px solid var(--brd)}
.listed-links-head{display:flex;align-items:center;gap:8px;padding:6px 10px 8px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--crit)}
.listed-links-count{padding:1px 6px;border-radius:8px;background:rgba(220,38,38,.14);color:var(--crit);font-family:var(--mono);font-size:9.5px}
.intel-card.listed-card{border-left:3px solid var(--crit);background:rgba(220,38,38,.05)}
.intel-card.listed-card.delisted{border-left-color:var(--t4);background:transparent}
.sev-badge.listed-badge{background:rgba(220,38,38,.16);color:var(--crit)}
.intel-card.listed-card.delisted .sev-badge.listed-badge{background:rgba(94,106,138,.18);color:var(--t3)}
.sev-badge.listed-link-badge{background:rgba(220,38,38,.12);color:var(--crit);font-weight:600}
.listed-meta{margin-top:4px;font-size:10.5px;color:var(--t3)}
.listed-tie{margin-top:3px;font-size:10.5px;color:var(--t3);line-height:1.35}
.listed-tie-title{color:var(--t1);font-weight:600}
.listed-tie-val{font-family:var(--mono);color:var(--t4)}
.listed-links-note{padding:6px 10px;font-size:10.5px;color:var(--t4)}
.supplier-note{padding:6px 10px 4px;font-size:10.5px;color:var(--t4)}   /* S156b: the live pass note */
/* S157: the maritime neighbourhood on an opened record */
.mar-row .detail-key{text-transform:none;max-width:55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mar-row.mar-call .detail-key{white-space:normal;overflow:visible;max-width:48%;line-height:1.35}   /* S157f: the date + arrived/departed tag stays readable */
.mar-row.mar-call .detail-val{max-width:52%}
/* S158: the "checking other sources" line and the "Also found" rows on an opened record */
.supplier-note.checking{color:var(--t3)}
.supplier-note.checking::after{content:'\2026';display:inline-block;width:1.2em;text-align:left;animation:hl-dots 1.2s steps(4,end) infinite}
@keyframes hl-dots{0%{clip-path:inset(0 100% 0 0)}100%{clip-path:inset(0 -0.2em 0 0)}}
.also-found{margin-top:8px}
/* S158d: the identity drawer — values wrap so a full street address reads */
.idv-row .detail-val{white-space:normal;overflow:visible;text-overflow:clip;word-break:break-word;max-width:62%;text-align:right;line-height:1.4}
.idv-row .detail-key{max-width:36%}
.mar-row .detail-val{max-width:none;white-space:normal;font-family:inherit;font-size:11px;color:var(--t3)}
.mar-dir{font-size:10px;color:var(--t4);margin-left:4px}
.mar-link{cursor:pointer;color:var(--acc)}
.mar-btn{margin-left:6px;padding:1px 6px;font-size:9.5px;border:1px solid var(--brd);border-radius:4px;background:var(--bg0);color:var(--t2);cursor:pointer}
.mar-aboard{margin:2px 0 6px 12px;padding-left:8px;border-left:2px solid var(--brd)}
.mar-aboard-title{font-size:10px;color:var(--t4);text-transform:uppercase;letter-spacing:.5px;margin:4px 0}
.mar-empty{font-size:11px;color:var(--t4);padding:4px 0}
/* S160m — port co-location: the date window on a port, the who-else block under a hull's call */
.mar-window{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:4px 0 6px}
.mar-date{font-size:11px;padding:2px 4px;border:1px solid var(--brd);border-radius:4px;background:var(--bg0);color:var(--t3);font-family:inherit}
.mar-win-title{font-size:10px;color:var(--t4);text-transform:uppercase;letter-spacing:.5px;margin:6px 0 2px}
.mar-caveat{font-size:10px;color:var(--t4);line-height:1.3;margin:0 0 4px}
.mar-whoelse{margin:2px 0 6px 12px;padding-left:8px;border-left:2px solid var(--brd)}
/* S158e: the case panel's identities — listed in full, one row each */
.case-ents{margin:0 0 12px;border:1px solid var(--brd);border-radius:8px;background:var(--bg1);overflow:hidden}
.case-ents-h{display:flex;justify-content:space-between;align-items:center;padding:7px 10px;font-size:9.5px;font-weight:600;color:var(--t4);text-transform:uppercase;letter-spacing:1px;border-bottom:1px solid var(--brd)}
.case-ents-all{cursor:pointer;color:var(--acc);text-transform:none;letter-spacing:0;font-weight:500}
.case-ent-row{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border-bottom:1px solid var(--brd);cursor:pointer}
.case-ent-row:last-child{border-bottom:none}
.case-ent-row:hover{background:var(--bg2)}
.case-ent-row.on{background:rgba(0,194,255,.08);border-left:3px solid var(--acc);padding-left:7px}
.case-ent-row.wl.on{border-left-color:#dc2626;background:rgba(220,38,38,.08)}
.case-ent-name{font-size:12.5px;font-weight:600;color:var(--t1);display:flex;align-items:center;gap:6px}
.case-ent-dot{width:7px;height:7px;border-radius:50%;background:#dc2626;flex:none}
.case-ent-meta{font-size:10px;color:var(--t3)}
/* S158e step 1: the records behind a selector, in the graph tooltip */
.gt-carriers{margin-top:6px;border-top:1px solid var(--brd);padding-top:5px;max-height:180px;overflow:auto}
.gt-carrier-name{font-size:10.5px;font-weight:600;color:var(--t1);margin-top:4px}
.gt-carrier-row{font-size:9.5px;font-family:var(--mono);color:var(--t3);padding:2px 0 2px 8px;cursor:pointer}
.gt-carrier-row:hover{color:var(--acc)}
/* S159 (D-S159-6): the Kept-apart block — on the identity drawer card and the panel's entity card */
.kept-apart{margin-top:8px;padding-top:6px;border-top:1px solid var(--brd)}
.kept-title{font-size:10px;font-weight:600;color:#ffc53d;text-transform:uppercase;letter-spacing:1px;margin-bottom:4px}
.kept-row{font-size:10.5px;color:var(--t2);margin-top:4px;white-space:normal}
.kept-val{font-family:var(--mono)}
.kept-why{color:#ffc53d}
.kept-rec{font-size:10px;color:var(--t3);padding:2px 0 2px 8px;cursor:pointer;white-space:normal}
.kept-rec:hover{color:var(--acc)}
