:root{
  /* v1.28 colour theme S1 "Day" (Ocean x Earthy). --module = the colour of the part of the program you are in (CDR analysis / CDR compare / Geofencing) */
  --navy:#223a36; --module:#0b5cad; --onmod:#fff; --mod-analysis:#0b5cad; --mod-compare:#b8613f; --mod-geofence:#4f6d56;
  --blue:#0b5cad; --accent:#0b5cad; --bg:#f5f2ea; --card:#fff; --head:#223a36;
  --line:#e2dccb; --text:#27302e; --muted:#6c746f; --ok:#1e8e5a; --err:#c0392b; --warn:#d98a0b;
  --soft:#f0ebde; --soft2:#e9e3d3; --soft3:#ddd5c0; --stripe:#faf8f2; --ibd:#cfc8b6; --note:#f1f4ef; --noteb:#d6e0d3; --notet:#33463f; --tagbg:#e3ecf6;
  --okbg:#e5f4ec; --okbd:#b3dcc6; --oktx:#12643e; --errbg:#fbebe9; --errbd:#f0c0ba; --redsoft:#f9e1de; --amber:#fff6e5; --redrow:#fcf1ef; color-scheme:light;
}
body{--blue:var(--module);--accent:var(--module)}
body.mod-analysis{--module:var(--mod-analysis)}
body.mod-compare{--module:var(--mod-compare)}
body.mod-geofence{--module:var(--mod-geofence)}
html[data-theme=dark]{
  /* theme S2 "Night" (Midnight x Ocean): bright module colours, so text on them is dark */
  --navy:#0d1020; --module:#3fa9f5; --onmod:#0d1020; --mod-analysis:#3fa9f5; --mod-compare:#a78bfa; --mod-geofence:#6fcf97;
  --blue:#3fa9f5; --accent:#3fa9f5; --bg:#141a2b; --card:#1b2338; --head:#c6d8f2;
  --line:#2a3550; --text:#dbe3f0; --muted:#8fa1ba; --ok:#43c59a; --err:#ff8a80; --warn:#f0a15b;
  --soft:#222c45; --soft2:#27324d; --soft3:#2f3c5c; --stripe:#1f2840; --ibd:#3a4a68; --note:#1d2b46; --noteb:#2b4468; --notet:#c5d6ee; --tagbg:#24365a;
  --okbg:#10332b; --okbd:#1d5a49; --oktx:#8fe3c3; --errbg:#3a1d1f; --errbd:#6b2f33; --redsoft:#3d2022; --amber:#33290f; --redrow:#341d20; color-scheme:dark;
}
html[data-theme=dark] input,html[data-theme=dark] select,html[data-theme=dark] textarea{background:var(--card);color:var(--text);border-color:var(--ibd)}
html[data-theme=dark] .warn{background:#33290f;border-color:#6b5420;color:#f2d79a}
html[data-theme=dark] .flash.ok{background:var(--okbg);border-color:var(--okbd);color:var(--oktx)}
html[data-theme=dark] .flash.error{background:var(--errbg);border-color:var(--errbd)}
html[data-theme=dark] .tag.on{background:#123a30}html[data-theme=dark] .tag.off{background:var(--redsoft)}
html[data-theme=dark] .tag.processing{background:#3a2c12}html[data-theme=dark] .tag.done{background:#123a30}html[data-theme=dark] .tag.failed{background:var(--redsoft)}
html[data-theme=dark] .btn.red{background:transparent;border-color:#6b2f33}html[data-theme=dark] .btn.red:hover{background:var(--redsoft)}
html[data-theme=dark] .notif.red{background:var(--redrow)}html[data-theme=dark] .notif.amber{background:var(--amber)}
html[data-theme=dark] tbody tr:nth-child(even){background:var(--stripe)}
html[data-theme=dark] .side{background:#0a101c}
html[data-theme=dark] a.chip.on,html[data-theme=dark] .tab.on,html[data-theme=dark] .related .chip.on{background:var(--module);color:var(--onmod)}
html[data-theme=dark] .secpanel>h2{background:#0a101c}
html[data-theme=dark] .leaflet-container{background:#1b2638}
html[data-theme=dark] .profbox .profpage{background:#fff;color:#17202e}
html[data-theme=dark] td .nm-crim{background:var(--redsoft)}html[data-theme=dark] td .nm-susp{background:#3a2c12;color:#f2c27a}
html[data-theme=dark] .chart text,html[data-theme=dark] .graphbox text{fill:var(--text)}
html[data-theme=dark] .chart line,html[data-theme=dark] .chart .grid{stroke:var(--line)}
.themebtn{background:none;border:1px solid var(--line);border-radius:18px;padding:5px 11px;font-size:13px;cursor:pointer;color:var(--head);margin-right:12px;line-height:1}
.themebtn:hover{background:var(--soft)}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:"Segoe UI",Calibri,Arial,sans-serif;font-size:14px;color:var(--text);background:var(--bg)}
a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline}
.layout{display:flex;min-height:100vh}
.side{width:240px;background:var(--navy);color:#cfd8e8;display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:3000;transform:translateX(-100%);transition:transform .18s ease;box-shadow:none;overflow:auto}
.side.open{transform:none;box-shadow:6px 0 30px rgba(0,0,0,.25)}
.scrim{position:fixed;inset:0;background:rgba(15,25,45,.35);z-index:2900;display:none}
.scrim.open{display:block}
.burger{background:none;border:1px solid var(--line);border-radius:7px;font-size:19px;line-height:1;padding:6px 10px;cursor:pointer;color:var(--head)}
.burger:hover{background:var(--soft)}
.topl{display:flex;align-items:center;gap:12px}
.topbrand{font-weight:700;color:var(--head);letter-spacing:.5px}
.brand{padding:18px 20px;font-size:17px;font-weight:700;color:#fff;letter-spacing:.5px;border-bottom:1px solid rgba(255,255,255,.08)}
.brand small{display:block;font-weight:400;font-size:11px;color:#8fa3c4;letter-spacing:0;margin-top:2px}
.nav{padding:10px 0;flex:1}
.nav .grp{padding:14px 20px 6px;font-size:10.5px;text-transform:uppercase;letter-spacing:1px;color:#7f93b5}
.nav a{display:block;padding:9px 20px;color:#cfd8e8;border-left:3px solid transparent}
.nav a:hover{background:rgba(255,255,255,.06);text-decoration:none}
.nav a.on{background:rgba(255,255,255,.1);border-left-color:#5aa9f0;color:#fff}
.nav .soon{display:block;padding:9px 20px;color:#6f84a8;cursor:default}
.nav .soon em{font-size:10px;font-style:normal;background:rgba(255,255,255,.1);padding:1px 6px;border-radius:8px;margin-left:6px}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.top{height:54px;background:var(--card);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 24px}
.top .who{color:var(--muted)} .top .who b{color:var(--text)}
.top form{display:inline;margin-left:14px}
.content{padding:24px;max-width:1280px;width:100%}
h1{font-size:22px;margin:0 0 4px;color:var(--head)}
.sub{color:var(--muted);margin:0 0 20px}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:10px;margin-bottom:16px;align-items:stretch}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px 18px}
.kpi{border-left:4px solid var(--accent)}
.kpi .l{font-size:11px;letter-spacing:.8px;text-transform:uppercase;color:var(--muted);font-weight:600}
.kpi .v{font-size:24px;font-weight:700;color:var(--head);margin-top:2px;line-height:1.2;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}
.kpi .s{font-size:12px;color:var(--muted);margin-top:1px;line-height:1.25}
.cards .card.kpi{padding:10px 14px}
.cards .kpi .l{font-size:10.5px}
.panel{background:var(--card);border:1px solid var(--line);border-radius:10px;margin-bottom:22px;overflow-x:auto;overflow-y:hidden}
.panel h2{margin:0;padding:12px 18px;font-size:14px;background:var(--soft);color:var(--head);border-bottom:1px solid var(--line)}
.panel .body{padding:16px 18px}
table{border-collapse:collapse;width:100%}
th{background:var(--module);color:var(--onmod);text-align:left;padding:9px 12px;font-weight:600;font-size:13px}
td{padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
tbody tr:nth-child(even){background:var(--stripe)}
td.n,th.n{text-align:right}
.tag{display:inline-block;padding:2px 9px;border-radius:10px;font-size:11.5px;font-weight:600}
.tag.admin{background:var(--tagbg);color:var(--blue)} .tag.user{background:var(--soft2);color:var(--muted)} .tag.moderator{background:#fff1d6;color:#8a5a00}html[data-theme=dark] .tag.moderator{background:#4a3a14;color:#f2c97a}
.tag.viewer{background:#e0f2f1;color:#00695c}html[data-theme=dark] .tag.viewer{background:#14403c;color:#7fd8cf}
.tag.on{background:#dff3ec;color:var(--ok)} .tag.off{background:#fbe4e2;color:var(--err)}
label{display:block;font-weight:600;margin:12px 0 5px;font-size:13px}
input[type=text],input[type=password],input[type=date],input[type=number],select{width:100%;padding:9px 11px;border:1px solid var(--ibd);border-radius:7px;font:inherit;background:var(--card)}
input:focus,select:focus{outline:2px solid #b9d6f5;border-color:var(--accent)}
.btn{display:inline-block;background:var(--module);color:var(--onmod);border:0;border-radius:7px;padding:9px 18px;font:inherit;font-weight:600;cursor:pointer}
.btn:hover{filter:brightness(.9);text-decoration:none}
.btn.sec{background:var(--soft2);color:var(--head)} .btn.sec:hover{background:var(--soft3)}
.btn.sm{padding:5px 11px;font-size:12.5px}
.btn.red{background:var(--card);color:var(--err);border:1px solid #e6b8b4} .btn.red:hover{background:#fbe4e2}
.row{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;align-items:end}
.flash{padding:10px 14px;border-radius:8px;margin-bottom:14px;border:1px solid}
.flash.ok{background:var(--okbg);border-color:var(--okbd);color:var(--oktx)}
.flash.error{background:var(--errbg);border-color:var(--errbd);color:var(--err)}
.empty{text-align:center;color:var(--muted);padding:34px 10px}
.inline{display:inline-flex;gap:6px;align-items:center}
.inline input[type=password]{width:150px;padding:5px 8px}
.authwrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.authbox{background:var(--card);border:1px solid var(--line);border-radius:14px;width:100%;max-width:400px;padding:30px;box-shadow:0 10px 30px rgba(24,43,77,.08)}
.authbox h1{text-align:center;margin-bottom:2px} .authbox .sub{text-align:center}
.authbox .btn{width:100%;margin-top:18px;padding:11px}
.muted{color:var(--muted)}
.drop{border:2px dashed #9db4d6;border-radius:12px;background:var(--soft);padding:34px 20px;text-align:center}
.drop.hot{background:var(--soft3);border-color:var(--accent)}
.drop input{display:none}
.drop .big{font-size:16px;font-weight:600;color:var(--head);margin-bottom:6px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;justify-content:center;max-height:140px;overflow:auto}
.chip{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:3px 10px;font-size:12px}
.tag.queued{background:var(--soft2);color:var(--muted)}.tag.processing{background:#fff1e0;color:var(--warn)}
.tag.done{background:#dff3ec;color:var(--ok)}.tag.failed{background:#fbe4e2;color:var(--err)}
.bar{display:flex;gap:10px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.bar form{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.bar input[type=text]{width:260px}
.pager{display:flex;gap:6px;justify-content:center;margin:14px 0}
.pager a,.pager span{padding:5px 11px;border:1px solid var(--line);border-radius:6px;background:var(--card)}
.pager span.cur{background:var(--accent);color:#fff;border-color:var(--accent)}
.scroll{overflow:auto;max-height:430px}
.scroll table th{position:sticky;top:0}
.small td,.small th{padding:6px 9px;font-size:12.5px;white-space:nowrap}
.kv{display:grid;grid-template-columns:150px 1fr;gap:6px 14px}
.kv div:nth-child(odd){color:var(--muted);font-weight:600}
.warn{background:#fff6e5;border:1px solid #f1d7a1;color:#7a4a00;padding:9px 13px;border-radius:8px;margin-bottom:12px}
.mapgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.mapgrid label{margin:0 0 3px;font-size:12px}
.mapgrid input{text-transform:uppercase}

/* ---------- analysis workspace ---------- */
.content.wide{max-width:none}
.ws{display:flex;gap:18px;align-items:flex-start}
.wsside{width:262px;flex:none;position:sticky;top:12px;max-height:calc(100vh - 80px);overflow:auto}
.wsmain{flex:1;min-width:0}
.wsbox{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:12px}
.wsh{font-weight:700;color:var(--head);margin-bottom:6px;font-size:13.5px}
.wsg{font-size:10.5px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin:12px 0 3px}
.wsrow{margin-bottom:2px}
label.pick{display:flex;gap:8px;align-items:center;font-weight:400;margin:0;padding:5px 6px;border-radius:6px;cursor:pointer;font-size:13.5px}
label.pick:hover{background:var(--soft)}
label.sml{font-size:12px;margin:8px 0 3px;color:var(--muted);font-weight:600}
.wsbox input[type=date],.wsbox input[type=number]{width:100%;padding:6px 8px;border:1px solid var(--ibd);border-radius:6px;font:inherit}
.secpanel{background:var(--card);border:1px solid var(--line);border-radius:10px;margin-bottom:20px;overflow:hidden}
.secpanel>h2{margin:0;padding:11px 16px;font-size:15px;background:var(--navy);color:#fff;display:flex;justify-content:space-between;align-items:center}
.secpanel>h2 .x{background:none;border:0;color:#b9c7e0;font-size:20px;cursor:pointer;line-height:1}
.secpanel>h2 .x:hover{color:#fff}
.sbody{padding:16px}
.loading{color:var(--muted);padding:20px;text-align:center}
.cards .kpi .v.sm{font-size:18px;padding-top:3px}
.cards .kpi .v.xs{font-size:14px;padding-top:4px}
.note{background:var(--note);border:1px solid var(--noteb);border-radius:8px;padding:10px 14px;margin:0 0 16px;color:var(--notet)}
.note ul{margin:0;padding-left:20px}
.chartbox{border:1px solid var(--line);border-radius:10px;padding:10px 14px 8px;margin-bottom:16px;background:var(--card)}
.chartbox .ct{font-weight:700;color:var(--head);font-size:13px;margin-bottom:4px}
.chart{width:100%;overflow-x:auto}
.chart svg{display:block;max-width:100%}
/* the layout of the charts and tables of a report (.flow) is in ONE place: "v1.29 report layout" near the end of this file */
.tblbox{margin-bottom:18px}
.tblbox .tt{display:flex;gap:12px;align-items:center;margin-bottom:4px;flex-wrap:wrap}
.tblbox .tt b{color:var(--head);font-size:14px}
.tblbox .tfilter{margin-left:auto;width:220px;padding:5px 9px;border:1px solid var(--ibd);border-radius:6px;font:inherit}
.tblbox .tn{font-size:12.5px;margin-bottom:4px}
.tscroll{max-height:520px;overflow:auto;border:1px solid var(--line);border-radius:8px}
table.data th{position:sticky;top:0;white-space:nowrap;font-size:12.5px;padding:7px 10px;user-select:none}
table.data td{padding:6px 10px;font-size:13px;white-space:nowrap;max-width:560px;overflow:hidden;text-overflow:ellipsis}
table.data th[data-dir=asc]::after{content:" \25B2";font-size:9px}
table.data th[data-dir=desc]::after{content:" \25BC";font-size:9px}
.muted{color:var(--muted)}

/* tabs */
.tabs{flex:1;min-width:0;display:flex;flex-wrap:nowrap;gap:4px;overflow-x:auto;scrollbar-width:none;scroll-behavior:smooth}
.tabs::-webkit-scrollbar{display:none}
.tab{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--soft2);color:var(--head);border-radius:8px;cursor:pointer;font-weight:600;font-size:13px;white-space:nowrap}
.tab:hover{background:var(--soft3)}
.tab.on{background:var(--navy);color:#fff}
.tab button{background:none;border:0;color:inherit;opacity:.6;cursor:pointer;font-size:16px;line-height:1;padding:0}
.tab button:hover{opacity:1}
a.pick{display:block;padding:7px 10px;border-radius:6px;color:var(--text);font-size:13.5px;text-decoration:none;margin:1px 0}
a.pick:hover{background:var(--soft);text-decoration:none}
a.pick.isopen{color:var(--blue);font-weight:600}
a.pick.on{background:var(--navy);color:#fff}
.secpanel{border:0;background:transparent;margin-bottom:0;overflow:visible}
.sbody{padding:0}
h3.sech{margin:22px 0 10px;padding-bottom:5px;font-size:15px;color:var(--head);border-bottom:2px solid #dbe6f5}
h3.sech:first-child{margin-top:0}
.mapbox,.graphbox{width:100%;min-height:120px}

/* top report bar (replaces the left list) */
.wsbar{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 14px;margin-bottom:12px}
.wsgroups{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:center}
.wsgrp{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.wsgrp .gl{font-size:10.5px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin-right:2px}
a.chip{display:inline-block;padding:6px 12px;border-radius:16px;background:var(--soft);color:var(--head);font-size:13px;font-weight:600;text-decoration:none;border:1px solid transparent}
a.chip:hover{background:var(--soft3);text-decoration:none}
a.chip.isopen{border-color:#9db8e0}
a.chip.on{background:var(--navy);color:#fff}
.wsctl{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:flex-end;margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.wsctl label{margin:0 0 3px;font-size:11.5px;color:var(--muted)}
.wsctl input[type=date]{padding:5px 8px;border:1px solid var(--ibd);border-radius:6px;font:inherit}
.wsctl .sp{flex:1}
.wsset{display:none;margin-top:10px;padding-top:10px;border-top:1px solid var(--line);grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:8px 14px}
.wsset.open{display:grid}
.wsset label{font-size:11.5px;color:var(--muted);margin:0 0 3px}
.wsset input{width:100%;padding:5px 8px;border:1px solid var(--ibd);border-radius:6px;font:inherit}
details.menu{position:relative;display:inline-block}
details.menu>summary{list-style:none;cursor:pointer}
details.menu>summary::-webkit-details-marker{display:none}
details.menu .mbox{position:absolute;right:0;top:36px;background:var(--card);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px rgba(24,43,77,.15);min-width:230px;z-index:20;padding:6px}
details.menu .mbox a{display:block;padding:7px 10px;border-radius:5px;color:var(--text);font-size:13.5px}
details.menu .mbox a:hover{background:var(--soft);text-decoration:none}
details.menu .mbox .mh{font-size:10.5px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);padding:6px 10px 2px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:18px;align-items:start}
.psum{padding:12px 18px;cursor:pointer;font-weight:700;color:var(--head);background:var(--soft)}
details.panel[open]>.psum{border-bottom:1px solid var(--line)}

h4.fh{margin:14px 0 2px;font-size:12px;text-transform:uppercase;letter-spacing:1px;color:var(--blue)}
img.thumb{width:36px;height:36px;border-radius:50%;object-fit:cover;border:1px solid var(--line)}
.phead{display:flex;gap:18px;align-items:flex-start;margin-bottom:14px}
img.photo{width:110px;height:130px;object-fit:cover;border-radius:10px;border:1px solid var(--line)}

label.chk{display:flex;gap:6px;align-items:center;font-weight:400;font-size:12px;margin:5px 0 0;color:var(--muted)}
.hint{display:block;font-size:12px;margin-top:3px;min-height:15px;color:var(--muted)}
.hint.ok{color:var(--ok)} .hint.bad{color:var(--err);font-weight:600}

#cdrpanel.hl-off .flagtag,#cdrpanel.hl-off .flagcol{display:none}
#cdrpanel:not(.hl-off) tr.flagrow{background:#fff3f2 !important}
.flagtag{margin:1px 0}
td .nm-crim{background:#fbe4e2;color:var(--err);font-weight:700;padding:1px 6px;border-radius:6px;font-size:11.5px}
td .nm-susp{background:#fff0d8;color:#8a4b00;font-weight:700;padding:1px 6px;border-radius:6px;font-size:11.5px}

.topsearch{flex:1;max-width:420px;margin:0 auto 0 16px} .topsearch input{width:100%;padding:7px 12px;border:1px solid var(--line);border-radius:20px;font-size:13px}
.bell{position:relative;text-decoration:none;font-size:20px;margin-right:14px;color:var(--head)}
.bell .badge{position:absolute;top:-6px;right:-8px;background:#c0392b;color:#fff;border-radius:10px;font-size:11px;font-weight:700;padding:1px 6px}
.notif{display:block;padding:10px 14px;border-bottom:1px solid var(--line);text-decoration:none;color:var(--text);border-left:4px solid #2f5496}
.notif.red{border-left-color:#c0392b;background:#fdf3f2} .notif.amber{border-left-color:#e08e0b;background:#fff8ec}
.tabgrid{display:flex;flex-wrap:wrap;gap:6px 16px;padding:8px 0}
.tabgrid label{margin:0;font-weight:400;font-size:13px}

.related{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 8px;padding:6px 8px;background:var(--soft);border:1px solid var(--line);border-radius:8px}
.related .gl{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);font-weight:600}
.related .chip.on{background:var(--navy);color:#fff}
.related .chip small{opacity:.7;font-size:10px}
.related .rel{display:inline-flex} .related .plus{padding:2px 7px;border:1px solid var(--line);border-left:0;border-radius:0 14px 14px 0;text-decoration:none;color:var(--head);background:var(--card);font-weight:700}
.related .rel .chip{border-radius:14px 0 0 14px}

.mapbox,.leaflet-container,.graphbox{position:relative;z-index:0;isolation:isolate}
.top{position:relative;z-index:50}
a.gm{color:inherit;text-decoration:underline dotted;text-underline-offset:3px}
a.gm:hover{color:var(--accent,#2f5496);text-decoration:underline}
/* round 1: dashboard filters, profile page, tower map */
.dashfilters{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;background:var(--card);border:1px solid var(--line,#d5deea);border-radius:8px;padding:10px 12px;margin-bottom:12px}
.dashfilters label{margin:0;font-size:12px;display:flex;flex-direction:column;gap:2px}.dashfilters input{width:auto;min-width:130px}
.dashfilters .slicers{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.slicer{border:1px solid var(--line,#c5d0e0);background:var(--card);border-radius:16px;padding:4px 11px;font-size:12px;cursor:pointer}
.slicer i{font-style:normal;color:var(--muted);margin-left:4px}.slicer.on{background:var(--module);color:var(--onmod);border-color:var(--module)}.slicer.on i{color:#dbe6ff}
.profbox .profpage{border:1px solid #cfd8e6;max-width:820px;margin:6px auto;background:var(--card);box-shadow:0 1px 6px rgba(0,0,0,.08)}
.towerbox .tm-bar{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;margin-bottom:8px;font-size:12px}
.towerbox .tm-bar label{margin:0}.towerbox .tm-bar select,.towerbox .tm-bar input[type=number]{width:auto}
.towerbox .tm-two{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:10px}
@media(max-width:900px){.towerbox .tm-two{grid-template-columns:1fr}}
.towerbox .tm-list{max-height:340px;overflow:auto;border:1px solid var(--line,#d5deea);border-radius:6px}
.towerbox .tm-list table{width:100%;border-collapse:collapse;font-size:12px}.towerbox .tm-list td,.towerbox .tm-list th{padding:3px 6px;border-bottom:1px solid var(--line);text-align:left}
.towerbox .tm-list th{position:sticky;top:0;background:var(--soft)}
.tm-badge{display:inline-block;min-width:18px;padding:0 4px;border-radius:9px;color:#fff;font:700 10px/16px Arial;text-align:center;border:1px solid #fff;box-shadow:0 0 2px #000}
.tm-tech{display:inline-block;border-radius:3px;color:#fff;font-size:10px;padding:0 4px}
.tm-leg{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:11.5px;color:var(--muted);margin-top:6px}.tm-leg i{display:inline-block;width:11px;height:11px;border-radius:2px;margin-right:4px;vertical-align:-1px}
.towerbox .tm-bar label{display:inline-flex;align-items:center;gap:4px;margin:0}.towerbox .tm-bar input[type=radio],.towerbox .tm-bar input[type=checkbox]{width:auto;margin:0}
.towerbox .tm-list th{color:#2a3a55}.towerbox .tm-leg em{font-style:italic}
html[data-theme=dark] .chart path{stroke:var(--card)}

.bkpick{border:1px solid var(--line);border-radius:8px;margin-top:10px;background:var(--card)}
.bkpick .bkhead{padding:8px 12px;border-bottom:1px solid var(--line);word-break:break-all}
.bkpick .bklist{max-height:260px;overflow:auto;padding:4px 0}
.bkpick .bklist a{display:block;padding:6px 14px;color:var(--text)}
.bkpick .bklist a:hover{background:var(--soft);text-decoration:none}
.bkpick .bkfoot{display:flex;gap:8px;align-items:center;padding:8px 12px;border-top:1px solid var(--line);flex-wrap:wrap}
.bkpick .bkfoot .sp{flex:1}

/* report picker + one-row tab strip */
.wstabs{position:sticky;top:0;z-index:45;display:flex;align-items:center;gap:6px;background:var(--bg);padding:6px 0;margin-bottom:8px;border-bottom:1px solid var(--line)}
.rmenu{position:relative;flex:none}
.rpanel{position:absolute;left:0;top:38px;z-index:60;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 36px rgba(0,0,0,.22);padding:12px 16px;display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 24px;width:min(980px,92vw);max-height:80vh;overflow:auto}
.rpanel[hidden]{display:none}
.rgrp .gl{font-size:10.5px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin:2px 0 4px;font-weight:700}
a.rpick{display:block;padding:5px 9px;border-radius:6px;color:var(--text);font-size:13.5px;text-decoration:none}
a.rpick:hover{background:var(--soft);text-decoration:none}
a.rpick.isopen{color:var(--accent);font-weight:600}a.rpick.isopen::after{content:" \2022";font-size:11px}
a.rpick.on{background:var(--navy);color:#fff}
.tarrow{flex:none;border:1px solid var(--line);background:var(--card);color:var(--head);border-radius:8px;width:26px;height:30px;font-size:18px;line-height:1;cursor:pointer;padding:0}
.tarrow:hover{background:var(--soft)}
.tabsall{flex:none}.tabsall .mbox{right:0;max-height:70vh;overflow:auto;min-width:260px}
.tabsall .mbox a.cur{background:var(--soft);font-weight:700}
.tabsall .mbox .closeo{border-top:1px solid var(--line);margin-top:4px;padding-top:4px;color:var(--err)}
.wsbar{padding:8px 12px;margin-bottom:10px}
.wsbar .wsctl{margin-top:0;padding-top:0;border-top:0}
.cdrsel-row{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.cdrsel-row .gl{font-size:10.5px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);font-weight:700}
label.cdrpick{display:inline-flex;gap:5px;align-items:center;margin:0;padding:3px 9px;border:1px solid var(--line);border-radius:14px;font-weight:600;font-size:12.5px;background:var(--soft);cursor:pointer}
label.cdrpick input{width:auto;margin:0}label.cdrpick small{color:var(--muted);font-weight:400}
/* compact live filters */
.dashfilters{padding:6px 10px;gap:6px 10px;margin-bottom:10px;align-items:center}
.dashfilters label{font-size:11px;color:var(--muted)}
.dashfilters input{padding:3px 6px;font-size:12.5px;min-width:0;width:128px}
.dashfilters .dfrow{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.dashfilters .dfrow b{color:var(--head);font-size:12.5px;margin-right:4px}
.dashfilters .dfrow .sp{flex:1}
.dashfilters .dfbody{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:6px 10px;align-items:flex-end}
.dashfilters.collapsed .dfbody{display:none}
.dashfilters .slicers{flex:0 1 auto;display:flex;flex-wrap:wrap;gap:5px;align-items:center}
.slicer{padding:2px 9px;font-size:11.5px;background:var(--card);color:var(--text)}
.optbar{padding:6px 12px}.optbar label.optchk{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;color:var(--text);font-weight:600}.optbar input{width:auto}

/* leads (compare) */
.leads{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:12px;margin:6px 0 14px}
.lead{background:var(--card);border:1px solid var(--line);border-left:5px solid var(--muted);border-radius:8px;padding:10px 14px}
.lead.high{border-left-color:#c62828}.lead.medium{border-left-color:#ef8f00}.lead.low{border-left-color:#2e8b57}
.lead .lh{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:baseline;margin-bottom:6px}
.lead .sev{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:1px 7px;border-radius:9px;color:#fff;background:var(--muted)}
.lead.high .sev{background:#c62828}.lead.medium .sev{background:#ef8f00}.lead.low .sev{background:#2e8b57}
.lead .rule{font-size:11.5px;color:var(--muted);border:1px solid var(--line);border-radius:9px;padding:0 7px}
.lead dl{display:grid;grid-template-columns:92px 1fr;gap:3px 10px;margin:0;font-size:12.5px}
.lead dt{color:var(--muted);font-weight:600}.lead dd{margin:0;overflow-wrap:anywhere}

/* parts inside one tab */
.subnav{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px;padding:8px 10px;background:var(--soft);border:1px solid var(--line);border-radius:10px}
.subtab{border:1px solid var(--ibd);background:var(--card);color:var(--text);border-radius:16px;padding:5px 13px;font-size:12.5px;cursor:pointer}
.subtab:hover{background:var(--soft2)}
.subtab.on{background:var(--blue);border-color:var(--blue);color:var(--onmod);font-weight:600}

.gslicers{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:6px 2px 2px}
.gslicers b{font-size:12px;color:var(--muted);margin-right:4px}
.gfstate{font-size:12px;margin-left:8px;color:var(--accent)}
.wsctl input.gf{width:150px;padding:5px 8px;border:1px solid var(--ibd);border-radius:6px;font:inherit;background:var(--card);color:var(--text)}
.wsctl input[type=time].gf{width:110px}

.pst{display:inline-block;color:#fff;border-radius:12px;padding:2px 10px;font-size:12px;font-weight:600;white-space:nowrap}
.pst.big{font-size:13px;padding:3px 12px;vertical-align:middle;margin-left:6px}
.tracedrow .tag{margin-right:4px}

/* ---------- print (Ctrl+P): only the open report, compact, charts side by side, nothing cut in half ---------- */
@media print{
  @page{size:A4 landscape;margin:10mm}
  html,body{background:#fff!important;color:#000}
  .top,.nav,.topbar,header,nav,.sidebar,.flash,.wstabs,.rtabs,.wsbar,.related,.cdrsel-row,.subnav,.tarrow,.dashfilters,.gslicers,.tblbox .tfilter,
  .tm-bar,.towerbox .tm-two,.mapbox .leaflet-control,#empty,.printprofile,.btn,button,.back,p>a[href*="cdrs"]{display:none!important}
  .content,.wide{max-width:none!important;padding:0!important;margin:0!important}
  .secpanel{border:0!important;box-shadow:none!important;margin:0!important}
  .sbody{padding:0!important}
  h1{font-size:18px}
  .sech{break-after:avoid;margin:10px 0 4px}
  .chartbox,.tblbox,.note,.card,.lead{break-inside:avoid;page-break-inside:avoid;box-shadow:none!important}
  .chartbox{padding:6px 8px;margin-bottom:6px}
  .chart svg{max-width:100%;height:auto}
  .cards{gap:6px;margin-bottom:8px}
  .cards .card.kpi{padding:5px 9px}
  .kpi .v{font-size:17px}.cards .kpi .v.sm{font-size:13px}
  .tscroll{max-height:none!important;overflow:visible!important;border:1px solid #ccd5e3}
  table.data{font-size:10px}
  table.data th,table.data td{padding:3px 6px;font-size:10px;max-width:260px}
  table.data thead{display:table-header-group}
  table.data tr{break-inside:avoid}
  a{color:inherit;text-decoration:none}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

.verlabel{padding:14px 20px;font-size:11px;color:#7f93b5;letter-spacing:.5px}
.authbox .verlabel{color:var(--muted)}
.tag.ok{background:#e1f3e6;color:#1d6b35}.tag.warn{background:#fff3d6;color:#8a5a00}
.lostx{border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:var(--soft);margin-top:10px}
.lostx .row>div{min-width:170px}
/* ---- brand, grouped menu, Ctrl+K ---- */
.side .brand{display:flex;gap:10px;align-items:center;text-decoration:none;color:#fff;padding:14px 18px}
.side .brand:hover{text-decoration:none;background:rgba(255,255,255,.06)}
.side .brand span{display:flex;flex-direction:column;line-height:1.15}
.side .brand b{font-size:19px;letter-spacing:2px}
.side .brand small{font-size:9.5px;color:#9fb2d4;letter-spacing:.3px;margin-top:2px}
.topbrand{display:inline-flex;align-items:center;gap:8px;font-weight:700;letter-spacing:2px;color:var(--head)}
.topbrand:hover{text-decoration:none}
details.ng{border-bottom:1px solid rgba(255,255,255,.06)}
details.ng>summary{list-style:none;cursor:pointer;padding:11px 20px 7px;font-size:10.5px;text-transform:uppercase;letter-spacing:1px;color:#7f93b5;display:flex;justify-content:space-between;user-select:none}
details.ng>summary::-webkit-details-marker{display:none}
details.ng>summary::after{content:"\25B8";font-size:11px;transition:transform .15s}
details.ng[open]>summary::after{transform:rotate(90deg)}
details.ng>summary:hover{color:#cfd8e8}
details.ng[open]{padding-bottom:6px}
.nav a.ncase{padding:6px 20px;font-size:12.5px}
.nav a.ncase small{color:#8aa0c4;margin-left:4px}
.kpal{position:fixed;inset:0;background:rgba(10,20,40,.45);z-index:6000;display:flex;align-items:flex-start;justify-content:center;padding-top:12vh}
.kpal[hidden]{display:none}
.kbox{background:var(--card);border:1px solid var(--line);border-radius:12px;width:min(640px,92vw);box-shadow:0 20px 60px rgba(0,0,0,.35);overflow:hidden}
.kbox input{width:100%;border:0;border-bottom:1px solid var(--line);padding:15px 18px;font-size:16px;background:transparent;color:var(--text);outline:none}
#kres{max-height:52vh;overflow:auto}
.kitem{display:flex;gap:10px;align-items:baseline;padding:9px 18px;color:var(--text);text-decoration:none;border-left:3px solid transparent}
.kitem:hover,.kitem.on{background:var(--soft);border-left-color:var(--accent);text-decoration:none}
.kitem .ktag{font-size:10.5px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);width:78px;flex:none}
.kitem small{color:var(--muted);margin-left:auto}
.khint{padding:7px 18px;font-size:11.5px;border-top:1px solid var(--line)}
/* ---- fluid width, pager, auto tables ---- */
.content{max-width:1760px;margin:0 auto}
.content.wide{max-width:none}
@media(min-width:1500px){.cards{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}}
.pager{flex-wrap:wrap;align-items:center}
.pager .gap{border:0;background:none;padding:5px 2px;color:var(--muted)}
.pager .pgjump{display:inline-flex;gap:6px;align-items:center;margin:0 0 0 12px}
.pager .pgjump input[type=number]{width:78px;padding:5px 8px}
.tscroll{max-height:max(380px,calc(100vh - 240px))}
table[data-at] td{overflow:visible;text-overflow:clip}
table[data-at] th{white-space:nowrap}
.tscroll table{min-width:100%;width:max-content;max-width:none}
.tscroll table[data-at]{width:auto}

.cstbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 8px}
.cstitem{display:inline-flex;gap:6px;align-items:center;padding:3px 8px;border-radius:14px;border:1px solid var(--line);background:var(--panel);font-size:12.5px}
.cstitem select{padding:1px 4px;font-size:12.5px;width:auto}
.cstitem.off{border-color:#d9534f;background:rgba(217,83,79,.12)}.cstitem.on{border-color:#3c9d5d;background:rgba(60,157,93,.12)}
.cstitem.admin{border-color:#5b8def;background:rgba(91,141,239,.12)}.cstitem.processing{border-color:#e0a030;background:rgba(224,160,48,.14)}
.cstitem .cstok{font-style:normal;color:var(--muted);font-size:11px}

/* ---- v1.19 profile page ---- */
.pcard{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin-bottom:12px}
.pcard .pmain{flex:1 1 380px;min-width:0}.pcard h1{margin:0 0 4px}
.pcard .pactions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end;margin-left:auto}
.pcard .pactions form.inline{display:flex;gap:6px;align-items:center}
.photo.ph{display:flex;align-items:center;justify-content:center;font-size:44px;font-weight:700;color:#fff;background:linear-gradient(135deg,#1f3864,#2f5496)}
.pbar{position:relative;height:24px;border-radius:12px;background:var(--soft);border:1px solid var(--line);margin-bottom:14px;overflow:hidden}
.pbarfill{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,#6aa5e6,#2f7fd1);opacity:.5}
.pbar span{position:relative;display:block;padding:3px 14px;font-size:12.5px;color:var(--text)}
.ptabs{display:flex;gap:2px;flex-wrap:wrap;border-bottom:2px solid var(--line);margin-bottom:16px}
.ptabs button{border:0;background:none;padding:9px 14px;font:inherit;font-weight:600;color:var(--muted);cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px}
.ptabs button i{font-style:normal;background:var(--soft);border-radius:9px;padding:0 7px;font-size:11.5px;margin-left:4px}
.ptabs button.on{color:var(--head);border-bottom-color:#2f7fd1}
.tabpane{display:none}
.masonry{column-count:2;column-gap:18px}
.masonry>*{break-inside:avoid;-webkit-column-break-inside:avoid;page-break-inside:avoid}
.masonry>.panel,.masonry>.tblbox{display:block;width:100%}
.masonry>.span{column-span:all}
@media(max-width:1100px){.masonry{column-count:1}}
@media(min-width:2300px){.masonry{column-count:3}}
.dl{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 16px;margin:0}
.dl dt{font-weight:600;color:var(--muted)}.dl dd{margin:0;word-break:break-word}
.gallery{display:flex;gap:12px;flex-wrap:wrap}.gallery figure{margin:0;width:120px}
.gallery img{width:120px;height:140px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
.gallery figcaption{font-size:11.5px;color:var(--muted);margin-top:3px}
details.addbox{margin:10px 18px 14px;border:1px dashed var(--line);border-radius:8px;background:var(--stripe)}
details.addbox>summary{padding:8px 12px;cursor:pointer;font-weight:600;color:var(--head)}
details.addbox>form{padding:6px 12px 12px}
details.addbox.mini{margin:6px 0 0}details.addbox.mini>summary{padding:3px 8px;font-size:12px}
details.addbox.mini select[multiple]{width:100%}
.cf{display:inline-block;border-radius:9px;padding:0 7px;font-size:11px;font-weight:600}
.cf.ok{background:rgba(46,125,50,.15);color:#2e7d32}.cf.un{background:rgba(178,106,0,.15);color:#b26a00}
.sm{font-size:12px}
.fsec{margin:18px 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--head);border-bottom:1px solid var(--line);padding-bottom:4px}
.twocol{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}
label.chk{display:flex;gap:6px;align-items:center;font-weight:400;margin:4px 0}
.panel .lazy>.panel{border:0;margin:0}
.dgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px 26px}
.dlab{font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:2px}
.dval{white-space:pre-wrap;word-break:break-word}
.tblbox{overflow-x:auto}
.uact{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.uboxes{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;align-items:flex-start}
details.ubox{border:1px solid var(--line);border-radius:8px;background:var(--stripe);min-width:170px}
details.ubox>summary{padding:5px 10px;cursor:pointer;font-size:12px;font-weight:600;color:var(--head)}
details.ubox[open]{min-width:260px;flex:1 1 260px}
details.ubox>form,details.ubox>span{display:block;padding:4px 10px 10px}

/* two forms in one panel, with a thin line between them */
.split{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:18px 34px}
@media(min-width:900px){.split>*+*{border-left:1px solid var(--line);padding-left:34px}}
.split h3{margin:0 0 4px;font-size:14px;color:var(--head)}
.split>div>label:first-of-type,.split>form>label:first-of-type{margin-top:0}
.row label.chk{margin:3px 0 0;min-height:19px;white-space:nowrap}
.row .hint{min-height:19px}
/* tables inside half-width panels: a little less padding so they fit without sideways scrolling */
.masonry .panel table td,.masonry .panel table th,.grid2 .panel table td,.grid2 .panel table th{padding-left:8px;padding-right:8px}

/* v1.20: names next to numbers and the "+ name" quick-add */
.nm{color:var(--head);font-weight:600}
a.addname{font-size:11.5px;font-weight:600;color:var(--accent);border:1px dashed var(--ibd);border-radius:10px;padding:0 7px;text-decoration:none;white-space:nowrap}
a.addname:hover{background:var(--soft);border-style:solid}
.namepop{position:absolute;z-index:80;width:290px;background:var(--card);border:1px solid var(--ibd);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.22);padding:10px 12px}
.namepop .nph{font-size:13px;margin-bottom:6px}
.namepop input{width:100%;margin:3px 0}
.namepop .npb{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:6px}
.namepop .npmsg{font-size:12px;color:var(--muted)}

/* v1.20: "+ New" text box that replaces a list box */
.newopt-box{display:inline-flex;gap:6px;align-items:center}
.newopt-box[hidden]{display:none}
.newopt-box input{min-width:150px}
.insightbox{border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--card)}

/* v1.20: dashboard */
.hero{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;background:linear-gradient(135deg,var(--navy),var(--blue) 70%,var(--accent));color:#fff;border-radius:14px;padding:18px 22px;margin-bottom:16px;box-shadow:0 4px 18px rgba(24,43,77,.18)}
.hero h1{color:#fff;margin:0;font-size:24px}
.hero .hello{font-size:13px;opacity:.85;margin-bottom:2px}
.hero .hsub{font-size:12.5px;opacity:.8;margin-top:2px}
.qa{display:flex;gap:8px;flex-wrap:wrap}
.qa a{background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.38);border-radius:9px;padding:8px 13px;font-weight:600;font-size:13.5px;text-decoration:none;white-space:nowrap}
.qa a:hover{background:rgba(255,255,255,.28)}
a.card.kpi{display:block;text-decoration:none;color:inherit;transition:transform .12s,box-shadow .12s}
a.card.kpi:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(24,43,77,.14)}
.dgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;align-items:start;margin-bottom:14px}
.dgrid .panel{margin-bottom:0}
@media(min-width:1100px){
  .dcards.n6,.dcards.n9{grid-template-columns:repeat(6,1fr)}
  .dcards.n9 .kpi:nth-child(n+7){grid-column:span 2}      /* administrator: 6 cards, then 3 wide cards - two even rows */
  .dcards.n4{grid-template-columns:repeat(4,1fr)}
}
@media(max-width:700px){.hero{padding:14px 16px}.hero h1{font-size:20px}.dgrid{grid-template-columns:1fr}}

/* related CDRs: numbers in the first row, the rest behind "+ N more" */
.rl2{position:relative;z-index:80;flex-wrap:nowrap;gap:8px}
.rl2 .rlrow{display:flex;flex-wrap:nowrap;gap:6px;overflow:hidden;flex:1;min-width:0}
.rl2 .rlc{white-space:nowrap;flex:0 0 auto}
.rl2 .rlc small{opacity:1;color:#1b4f9c;margin-left:6px;font-size:11px;font-weight:600}
.rl2 .rlc.on small{color:#cfe0ff}
.rl2 .rlmore{margin-left:auto;flex:0 0 auto;white-space:nowrap;border:1px solid #9db8e0;background:var(--card);color:#1b4f9c;border-radius:16px;padding:6px 12px;font-size:13px;font-weight:700;cursor:pointer}
.rl2 .rlmore[aria-expanded=true]{background:#1b4f9c;color:#fff}
.rlpanel{position:absolute;left:0;right:0;top:100%;margin-top:6px;background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 28px rgba(24,43,77,.2);padding:10px 12px;z-index:30}
.rlpanel[hidden]{display:none}
.rltop{display:flex;gap:10px;align-items:center;margin-bottom:8px}.rltop input{max-width:230px;margin:0}
.rlgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:2px 14px;max-height:300px;overflow:auto;border-top:1px solid var(--line);padding-top:6px}
.rlit{display:flex;gap:7px;align-items:center;padding:5px 4px;border-radius:6px;font-size:13px;font-weight:600;cursor:default;white-space:nowrap;overflow:hidden}
.rlit:hover{background:var(--soft)}.rlit input{width:auto;margin:0;flex:0 0 auto}
.rlit .rln{color:var(--head);text-decoration:none}.rlit .rln:hover{text-decoration:underline}
.rlnm{color:#1b4f9c;font-size:11px;font-weight:600;overflow:hidden;text-overflow:ellipsis}
.rlfoot{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:8px;border-top:1px solid var(--line);padding-top:8px}
@media(max-width:1000px){.rlgrid{grid-template-columns:repeat(2,1fr)}}

/* two panels side by side (stack on narrow screens) */
.split2{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.split2>.panel{margin-bottom:0}
@media (max-width:1100px){.split2{grid-template-columns:1fr}}
.sm{font-size:12.5px}

/* ---------- v1.21: Hide / Show buttons on the sections and short scrolling boxes for long tables ---------- */
.panel>h2.fold-h{position:relative;padding-right:96px;cursor:pointer}
.foldbtn{position:absolute;right:12px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;gap:5px;padding:3px 11px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--head);font:inherit;font-size:12px;font-weight:600;line-height:1.35;cursor:pointer}
.foldbtn:hover{border-color:var(--blue);color:var(--blue)}
.foldbtn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.foldbtn .fi{display:inline-block;font-size:10px;transition:transform .15s}
.panel.folded>h2.fold-h .fi{transform:rotate(-90deg)}
.panel.folded>:not(.fold-h){display:none}
.panel.folded>h2.fold-h{border-bottom-color:transparent}
.panel.folded{margin-bottom:14px}
.foldall{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}
/* a short box with its own scroll bar; the column titles stay in view while the rows move */
.scrollbox{overflow:auto;max-height:min(var(--sbh,420px),72vh);border-bottom:1px solid var(--line)}
.scrollbox>table,.scrollbox>form>table{margin:0}
.scrollbox thead th{position:sticky;top:0;z-index:3}
.sbnote{font-size:12px;padding:5px 16px 8px}
.cdrfind{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 16px 8px}
.cdrfind input[type=text]{width:290px;max-width:100%}
.cdrfind select{width:auto}
@media print{
  .foldbtn,.foldall,.sbnote,.cdrfind{display:none!important}
  .scrollbox{max-height:none!important;overflow:visible!important}
}

/* ---- v1.22 lost mobiles: status chips, priority rows, status drop-down, traced pop-up ---- */
.lchips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}
.lchips a{display:inline-flex;gap:6px;align-items:center;padding:4px 11px;border:1px solid var(--line);border-radius:14px;background:var(--card);color:var(--text);font-size:12.5px;text-decoration:none}
.lchips a:hover{border-color:var(--blue)}
.lchips a b{font-weight:700;color:var(--muted)}
.lchips a.on{background:var(--tagbg);border-color:var(--blue);color:var(--blue)}
.lchips a.on b{color:var(--blue)}
.lchips a.red b{color:var(--err)}
table tr.lprio>td{background:var(--redsoft)}
table tr.lprio>td:first-child{box-shadow:inset 4px 0 0 var(--err)}
.prionote{color:var(--err);font-size:12px;font-weight:600}
select.stsel{width:auto;padding:3px 6px;font-size:12.5px}
.stsel.saving{opacity:.5}
.stnote{margin-left:6px;font-size:12px;font-weight:600}.stnote.ok{color:var(--ok)}.stnote.bad{color:var(--err)}
dialog.ltdlg{border:1px solid var(--line);border-radius:12px;padding:0;max-width:780px;width:94vw;background:var(--card);color:var(--text);box-shadow:0 12px 40px rgba(0,0,0,.35)}
dialog.ltdlg::backdrop{background:rgba(10,18,32,.55)}
.ltdlg .lthead{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 18px;background:var(--soft);border-bottom:1px solid var(--line);font-weight:700;color:var(--head)}
.ltdlg .ltbody{padding:14px 18px;max-height:78vh;overflow:auto}
table.kvt{width:auto}table.kvt th{background:none;text-align:left;color:var(--muted);font-weight:600;padding:5px 18px 5px 0;white-space:nowrap}table.kvt td{padding:5px 0}table.kvt tbody tr td{background:none}

/* v1.22 dashboard: "Needs attention" is a compact panel with its own scroll */
.panel.attn.hot{border-color:#f1d7a1}
.panel.attn.hot>h2{background:var(--amber);color:var(--warn)}
.panel.attn>h2{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.panel.attn .attncnt{display:inline-flex;gap:5px;flex-wrap:wrap;font-weight:400}
.panel.attn>h2 form{margin-left:auto}
.attnbody{max-height:208px;overflow-y:auto}
.attnbody table{width:100%}
.attnbody td{padding:5px 10px;vertical-align:middle;font-size:13px}
.attnbody td.k{width:128px;white-space:nowrap}.attnbody td.x{width:30px;text-align:right}
.attnbody tr.attnsec{background:var(--soft)}
.xbtn{border:0;background:transparent;color:var(--muted);font-size:20px;line-height:1;cursor:pointer;padding:0 6px}.xbtn:hover{color:var(--err)}
.attnfoot{padding:6px 14px;border-top:1px solid var(--line);font-size:13px}
/* v1.22: the lost-mobile list must fit a 1366 px screen (the Status drop-down is used from here) */
.nw{white-space:nowrap}
table.lostlist th,table.lostlist td{padding:8px 9px}
table.lostlist td{vertical-align:top}
table.lostlist td .stsel{margin-bottom:2px}
table.lostlist .prionote{white-space:normal;max-width:230px}
.bar label.chk{display:inline-flex;gap:4px;align-items:center;margin:0;font-weight:400;white-space:nowrap}
html[data-theme=dark] .lchips a.on,html[data-theme=dark] .lchips a.on b{color:var(--accent)}html[data-theme=dark] .lchips a.on{border-color:var(--accent)}

/* v1.23 photo buttons */
.pickbox{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:6px 0}.pickbox .pickname{flex:1 1 100%}.pickprev{max-height:96px;max-width:100%;border-radius:8px;border:1px solid var(--line,#ddd)}

/* v1.23 - duplicate-profile box (dupcheck.js) */
.dupmodal{position:fixed;inset:0;z-index:2000;background:rgba(10,18,32,.55);display:flex;align-items:center;justify-content:center;padding:16px}
.dupbox{background:var(--card,#fff);color:var(--text);border:1px solid var(--line);border-radius:14px;max-width:520px;width:100%;max-height:86vh;overflow:auto;padding:16px 18px;box-shadow:0 12px 40px rgba(0,0,0,.35)}
.dupbox h3{margin:0 0 10px;font-size:18px}
.dupitem{border-radius:10px;padding:9px 11px;margin:0 0 9px;border:1px solid var(--line);font-size:14px}
.dupitem.warn{background:var(--amber,#fff6e5);border-color:var(--warn,#efd8a4)}
.dupitem.bad{background:var(--errbg,#fdeceb);border-color:var(--errbd,#f3c3c0)}
.dupitem ul{margin:6px 0 0 18px;padding:0}
.dupbtns{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.dupbtns .btn{flex:1 1 140px}

/* v1.25 - CDR analysis: every report is a button (no closable tabs); the colour says where it stands */
.rtabs{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px;background:var(--bg);padding:6px 0 8px;margin-bottom:8px;border-bottom:1px solid var(--line)}
@media (min-height:900px){.rtabs{position:sticky;top:0;z-index:45}}
.rtg{display:flex;flex-wrap:wrap;align-items:center;gap:4px}
.rtg .gl{font-size:10.5px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);font-weight:700;margin-right:2px}
.rtab{border:1px solid transparent;background:var(--soft2);color:var(--head);border-radius:8px;padding:5px 10px;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap}
.rtab:hover{background:var(--soft3)}
.rtab.done{background:#dcefe3;color:#1d5a35;border-color:#b7dcc5}
.rtab.done::after{content:" \2022";font-size:11px}
.rtab.busy{background:#fff1d6;color:#8a5a00;border-color:#f0d9a3;animation:rtpulse 1.1s ease-in-out infinite}
.rtab.err{background:#fde3e1;color:#a12622;border-color:#f3b8b4}
.rtab.on{background:var(--navy);color:#fff;border-color:var(--navy)}
.rtab:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
@keyframes rtpulse{50%{opacity:.55}}
.rtkey{margin-left:auto;font-size:11.5px;display:flex;gap:12px;align-items:center;white-space:nowrap}
.rtkey i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.rtkey .k0{background:var(--soft2)}.rtkey .k1{background:#cfe9d9}.rtkey .k2{background:var(--navy)}
html[data-theme=dark] .rtab.done{background:#1c3d2b;color:#bfe8cf;border-color:#2d6a49}
html[data-theme=dark] .rtab.busy{background:#3a2c12;color:#f2c27a;border-color:#6b5420}
html[data-theme=dark] .rtab.err{background:#3a1d1f;color:#f0a8a4;border-color:#6b2f33}
html[data-theme=dark] .rtab.on{background:var(--module);color:var(--onmod);border-color:var(--module)}
html[data-theme=dark] .rtkey .k1{background:#1c3d2b}html[data-theme=dark] .rtkey .k2{background:var(--module)}
/* export dialog with a check box for every report */
dialog.expdlg{border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--text);padding:0;width:min(780px,94vw);box-shadow:0 20px 60px rgba(0,0,0,.35)}
dialog.expdlg::backdrop{background:rgba(10,20,40,.45)}
.expdlg .exph{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line)}
.expdlg .exph b{font-size:16px;color:var(--head)}
.expdlg .sp{flex:1}
.expdlg .expx{border:0;background:none;color:var(--muted);font-size:24px;line-height:1;cursor:pointer;padding:0 4px}
.expdlg .expx:hover{color:var(--text)}
.expdlg .expsel{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;padding:10px 16px;background:var(--soft)}
.expdlg label{display:flex;gap:7px;align-items:center;margin:0;font-weight:400;font-size:13.5px;cursor:pointer;color:var(--text)}
.expdlg input[type=checkbox]{width:auto;margin:0}
.expdlg .expgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px 22px;padding:12px 16px;max-height:46vh;overflow:auto}
.expdlg .expgh{font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);margin-bottom:3px}
.expdlg .expit{padding:3px 0}
.expdlg .expfoot{padding:12px 16px;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:10px 12px;align-items:center;justify-content:flex-end}
.expdlg .expopt{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center}
.expdlg .expbtns{display:flex;gap:8px;align-items:center}
.expdlg .expfoot select,.expdlg .expfoot input[type=text]{padding:4px 7px;font:inherit;font-size:13px}
.expdlg .experr{font-size:12.5px;font-weight:600}
.expdlg .expnote{padding:0 16px 12px}

/* v1.25 - Names / Ownership lists: filter by source, tick rows, delete the ticked ones */
.bulkbar{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;background:var(--soft);border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin:0 0 10px}
.bulkbar .sp{flex:1}.bulkbar .bkinfo{font-size:12.5px}
.bar .srcf{display:inline-flex;gap:6px;align-items:center;margin-left:10px}.bar .srcf label{margin:0;font-size:12px;color:var(--muted)}.bar .srcf select{max-width:260px}
td.bkc,th.bkc{width:26px;text-align:center}td.bkc input,th.bkc input{width:auto;margin:0;cursor:pointer}

/* v1.26: "Hide from moderator" check box (administrator only) */
.modbox { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 500; color: var(--muted); cursor: pointer; margin: 0; white-space: nowrap; }
.modbox input { width: 15px; height: 15px; margin: 0; }
.modbox.on { color: #b26a00; }
.modbox.on span { font-weight: 700; }

/* v1.29 report layout (Analysis, Compare, Dashboard, Case links): ONE rule set for the charts and tables of a report.
   .flow is a grid with as many equal columns as fit, so a lone chart is never stretched over the whole page; the blocks fill the empty places
   (dense). static/masonry.js measures every block and gives it a number of small rows (class .pk, grid-row-end:span N), so a short block
   leaves the space under it to the next block ("bricks"); a table that needs more room takes two or three columns (data-span) or the whole row. */
.flow{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,400px),1fr));grid-auto-flow:dense;gap:12px 16px;align-items:start;margin:0 0 10px}
.flow.pk{grid-auto-rows:4px;row-gap:0}
.flow>*,.flow>.chartbox,.flow>.tblbox{min-width:0;max-width:100%;margin:0}
.flow>.tblbox{overflow:visible}
.flow:not(.pk)>.tblbox.tb-wide{grid-column:1/-1}
.flow>[data-span="2"]{grid-column:span 2}
.flow>[data-span="3"]{grid-column:span 3}
.flow>[data-span="4"]{grid-column:span 4}
.flow>[data-span="all"]{grid-column:1/-1}
.flow>.fl-all,.flow>[data-solo]{grid-column:1/-1}                /* maps, graphs, a table that would stand alone next to an empty half */
.flow>.tblbox .tscroll table.data{width:100%;min-width:100%}
.tscroll table.data td{max-width:22em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tscroll table.data td.n,.tscroll table.data th.n{text-align:right;font-variant-numeric:tabular-nums}
.tscroll table.data th{position:relative}
.tscroll table.data th .rz{position:absolute;right:0;top:0;bottom:0;width:6px;cursor:col-resize;user-select:none}
.tscroll table.data th .rz:hover{background:rgba(47,84,150,.35)}
body.dense .tscroll table.data td,body.dense .tscroll table.data th{padding-top:2px;padding-bottom:2px;font-size:12px}
.dnsbtn{border:1px solid var(--line);background:var(--panel);border-radius:14px;padding:2px 10px;font-size:12px;cursor:pointer}
@media(max-width:700px){.flow{grid-template-columns:1fr}.tscroll table.data td{max-width:14em}}
@media print{                                                   /* paper: two plain columns, no "bricks", tables across the page */
  .flow,.flow.pk{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:auto;gap:6px 10px}
  .flow>*{grid-row-end:auto!important}
  .flow>[data-span],.flow>[data-solo],.flow>.fl-all,.flow>.tblbox.tb-wide{grid-column:1/-1}
  .chartbox{padding:6px 8px;margin-bottom:0}
}

/* ---- v1.28 theme: dark top bar with a line in the colour of the part you are in ---- */
.top{background:var(--navy);border-bottom:3px solid var(--module);color:#e9efe9}
.top .who{color:#b6c4bd}.top .who b{color:#fff}
.topbrand,.topbrand:hover{color:#fff}
.top .burger,.top .themebtn{color:#e9efe9;border-color:rgba(255,255,255,.28);background:none}
.top .burger:hover,.top .themebtn:hover{background:rgba(255,255,255,.12)}
.top .bell{color:#e9efe9}
.top .topsearch input{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.22);color:#fff}
.top .topsearch input::placeholder{color:#aebdb6}
.top .btn.sec{background:rgba(255,255,255,.14);color:#fff}.top .btn.sec:hover{background:rgba(255,255,255,.24)}
.side{background:var(--navy)}
html[data-theme=dark] .side{background:#0a0d1a}
.nav a.on{border-left-color:var(--module)}
.kpi{border-left-color:var(--module)}
.hero{background:linear-gradient(135deg,var(--navy),var(--module))}

/* ---- v1.28 CDR analysis + CDR compare: the report list is a rail on the left (Layout "Side rail") ---- */
.awrap{display:grid;grid-template-columns:218px minmax(0,1fr);gap:14px;align-items:start}
.arail{position:sticky;top:8px;max-height:calc(100vh - 24px);overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:6px 6px 10px}
.arail .rtabs{display:block;position:static;background:none;border:0;padding:0;margin:0}
.arail .rtg{display:block;margin:0 0 4px}
.arail .rtg .gl{display:block;padding:9px 10px 3px;font-size:10.5px;color:var(--module);border-top:1px solid var(--line);margin:4px 0 0}
.arail .rtg:first-child .gl{border-top:0;margin-top:0}
.arail .rtab{display:block;width:100%;text-align:left;background:transparent;border:0;border-left:3px solid transparent;border-radius:0 6px 6px 0;padding:6px 10px;font-size:13px;font-weight:600;color:var(--text);white-space:normal}
.arail .rtab:hover{background:var(--soft)}
.arail .rtab.done{background:transparent;color:var(--text);border-color:transparent}
.arail .rtab.done::after{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--ok);margin-left:7px;vertical-align:1px}
.arail .rtab.busy{background:var(--amber);color:var(--warn)}
.arail .rtab.on,html[data-theme=dark] .arail .rtab.on{background:var(--module);color:var(--onmod);border-color:var(--module)}
.arail .rtab.on.done::after{background:var(--onmod)}
.arail .rtkey{display:flex;flex-direction:column;align-items:flex-start;gap:3px;margin:10px 10px 0;padding-top:8px;border-top:1px solid var(--line)}
.amain{min-width:0}
.amain .wsbar{border-top:3px solid var(--module)}
@media (max-width:900px){
  .awrap{grid-template-columns:1fr}
  .arail{position:static;max-height:none}
  .arail .rtabs{display:flex;flex-wrap:wrap;gap:4px 10px}
  .arail .rtg{display:flex;flex-wrap:wrap;gap:3px;align-items:center}
  .arail .rtg .gl{border:0;padding:3px 4px;margin:0}
  .arail .rtab{width:auto;border:1px solid var(--line);border-radius:7px;padding:5px 9px}
}
@media print{.awrap{display:block}.arail{display:none}}

.lk-bar{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin:0 0 8px;font-size:12.5px}
.lk-bar label{margin:0;display:inline-flex;gap:6px;align-items:center;font-weight:600}.lk-bar select{width:auto;padding:5px 8px}

.pb-bar{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin:0 0 8px;font-size:12.5px}.pb-bar label{margin:0;display:inline-flex;gap:5px;align-items:center;font-weight:600}.pb-bar select{width:auto;padding:5px 8px}
.pb-time{font-weight:700;color:var(--module);margin-left:auto}.pb-info{margin:8px 0 2px;font-size:12.5px}.pb-leg{font-size:12px;margin:2px 0 6px}
.pb-pin{width:22px;height:22px;border-radius:50%;color:#fff;font-weight:700;font-size:12px;display:flex;align-items:center;justify-content:center;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.5)}.pb-a{background:#2e7d32}.pb-b{background:#c62828;width:24px;height:24px}

/* v1.28 relay chain cards */
.rchain{display:flex;align-items:center;gap:6px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-left:4px solid var(--module);border-radius:9px;padding:9px 12px;margin:0 0 8px}
.rchain .rn,.rchain .rm{display:flex;flex-direction:column;border:1px solid var(--module);border-radius:8px;padding:5px 10px;min-width:150px;text-align:center}
.rchain .rm{border-style:dashed;background:var(--soft)}
.rchain small{color:var(--muted);font-size:11px}.rchain em{font-size:10.5px;color:var(--warn);font-style:normal}
.rchain .ra{display:flex;flex-direction:column;align-items:center;font-size:20px;color:var(--module);line-height:1}
.rchain .rg{margin-left:auto;font-size:12px;color:var(--muted);text-align:right}

/* v1.29: the moderator opens something another user made: look, don't touch */
.rolock{background:var(--warnbg,#fff4d6);color:var(--warnfg,#6b4a00);border:1px solid var(--warnbd,#e8c766);border-radius:8px;padding:8px 12px;margin:0 0 12px;font-size:13px}
html[data-theme=dark] .rolock{background:#3a2f12;color:#f1d58a;border-color:#6d5a24}
form.ro-off{opacity:.62}
form.ro-off :is(input,select,textarea,button):disabled{cursor:not-allowed}

/* v1.29 Un-reported crime: a work list (cards that are shortcuts, filters, follow-up badges, the follow-up log) */
.ucards a.card.kpi.on{background:var(--soft);box-shadow:inset 0 0 0 2px var(--module)}
.ucards .kpi.bad .v{color:var(--err)}
.ufilter{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.ufilter input[type=text]{width:310px;max-width:100%}
.ufilter select,.ufilter input[type=date]{width:auto;padding:7px 9px}
.ufilter label{margin:0;font-weight:400;display:inline-flex;gap:5px;align-items:center;white-space:nowrap;font-size:13px}
.ufilter label input[type=checkbox]{width:auto}
.fchips{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:0 0 10px}
.fchips>b{font-size:12px;color:var(--muted);margin-right:2px}
.fchips a.chip{padding:4px 11px;font-size:12.5px}
.fchips a.chip small{opacity:.8;font-weight:700;margin-left:5px}
.fu{display:inline-block;padding:2px 9px;border-radius:10px;font-size:11.5px;font-weight:700;white-space:nowrap;vertical-align:middle}
.fu.over{background:var(--redsoft);color:var(--err)}
.fu.today{background:#ffe3b0;color:#7a4a00;box-shadow:inset 0 0 0 1px #e0a43a}
.fu.soon{background:#fff3d6;color:#8a5a00}
.fu.later{background:var(--soft2);color:var(--muted)}
html[data-theme=dark] .fu.today{background:#5a4416;color:#ffd78a;box-shadow:inset 0 0 0 1px #9b7a2c}
html[data-theme=dark] .fu.soon{background:#4a3a14;color:#f2c97a}
h1 .fu{font-size:13px;margin-left:8px}
table.utable td{vertical-align:top}
table.utable tr.urover>td{background:var(--redrow)}
table.utable tr.urover>td:first-child{box-shadow:inset 3px 0 0 var(--err)}
table.utable tr.urtoday>td:first-child{box-shadow:inset 3px 0 0 var(--warn)}
th a.sortlink{color:inherit;text-decoration:none;white-space:nowrap}
th a.sortlink:hover{text-decoration:underline}
th a.sortlink.cur{text-decoration:underline}
button.mini{padding:2px 8px;border:1px solid var(--ibd);border-radius:6px;background:var(--card);color:var(--head);font:inherit;font-size:12px;font-weight:600;cursor:pointer;line-height:1.5}
button.mini:hover{background:var(--soft2)}
button.mini.ok{border-color:var(--okbd);color:var(--oktx);background:var(--okbg)}
button.mini.ok:hover{filter:brightness(.96)}
button.btn.ok{background:var(--okbg);color:var(--oktx);border:1px solid var(--okbd)}
form.qa{display:flex;gap:4px;margin:4px 0 0;flex-wrap:nowrap}
.unr h3.fsec,.uright h3.fsec{margin:18px 0 6px;font-size:12.5px;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line);padding-bottom:3px}
.unr h3.fsec:first-child{margin-top:0}
.unr textarea,.fuform textarea{width:100%;padding:9px 11px;border:1px solid var(--ibd);border-radius:7px;font:inherit;background:var(--card);color:var(--text);resize:vertical}
.unrf .row{align-items:start}
.dfield{display:flex;gap:5px;align-items:center;flex-wrap:wrap}
.dfield input[type=date]{width:auto;min-width:150px}
.uview{display:grid;grid-template-columns:minmax(0,3fr) minmax(300px,2fr);gap:16px;align-items:start}
.uview .uleft>.panel,.uview .uright>.panel{margin-bottom:16px}
table.kv2{table-layout:fixed}
table.kv2 td{overflow-wrap:anywhere}
table.kv2 th{background:transparent;color:var(--muted);width:150px;font-weight:600;font-size:12.5px;padding:7px 10px 7px 0;vertical-align:top;text-align:left}
table.kv2 tbody tr:nth-child(even){background:transparent}
table.kv2 td{padding:7px 0;border-bottom:1px solid var(--line)}
table.utable .mob+.mob{margin-top:4px}
table.kv2 tr:last-child td{border-bottom:0}
td.pre{white-space:pre-wrap}
.fucur{margin:0 0 10px;font-size:14px}
.fuform .fubtns{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:8px 0 0}
.fuform .fubtns input[type=date]{width:auto;padding:5px 8px}
.ulog{list-style:none;margin:6px 0 0;padding:0}
.ulog li{border-left:3px solid var(--line);padding:4px 0 6px 10px;margin:0 0 8px}
.ulog li.k-done{border-left-color:var(--ok)}
.ulog li.k-snooze,.ulog li.k-followup{border-left-color:var(--warn)}
.ulog .lh{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ulog .lt{margin-top:2px;white-space:pre-wrap;word-break:break-word}
@media(max-width:900px){.uview{grid-template-columns:minmax(0,1fr)}}
@media(max-width:600px){table.kv2 th{width:112px;white-space:normal;overflow-wrap:anywhere}}
@media print{.ufilter,.fchips,form.qa,.uadd,.fuform,.uview details.panel{display:none!important}.uview{display:block}}
/* v1.29 Names / Number lookup: search bar, status bar (found / not found) and the table */
.lkform{margin:0 0 16px}
.lkbar{display:flex;gap:8px;align-items:flex-start;background:var(--card);border:1px solid var(--ibd);border-radius:12px;padding:8px 8px 8px 14px}
.lkbar:focus-within{border-color:var(--module);box-shadow:0 0 0 3px var(--soft3)}
.lkbar textarea{flex:1;min-width:0;border:0!important;outline:0;resize:none;background:transparent!important;color:var(--text);font:inherit;font-size:15px;padding:6px 0;min-height:32px;max-height:180px;line-height:1.45;box-shadow:none!important}
.lkbar .btn{white-space:nowrap;align-self:flex-start}
.lkfile{cursor:pointer;display:inline-flex;align-items:center;margin:0}
.lkhint{margin:6px 4px 0}
.lkstat{margin:0 0 12px}
.lkmeter{height:10px;border-radius:6px;background:var(--soft3);overflow:hidden;margin:2px 0 10px}
.lkmeter .f{display:block;height:100%;background:var(--ok)}
.lkchips{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.lkchip{border:1px solid var(--line);background:var(--soft);color:var(--head);border-radius:16px;padding:5px 13px;font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.lkchip:hover{background:var(--soft3)}
.lkchip b{margin-left:6px}
.lkchip.ok b{color:var(--ok)}
.lkchip.no b{color:var(--err)}
.lkchip.on{background:var(--navy);border-color:var(--navy);color:#fff}
.lkchip.on b{color:inherit}
html[data-theme=dark] .lkchip.on{background:var(--module);border-color:var(--module);color:var(--onmod)}
.lkchips input[type=search]{margin-left:auto;width:240px;max-width:100%;padding:6px 12px;border:1px solid var(--ibd);border-radius:16px;font:inherit}
.lkact{margin:0 0 10px;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.lkact .btn{margin:0}
table.lkt td.n{text-align:right;width:1%}
table.lkt td.lkname .lkoth{font-size:12px;color:var(--muted);margin-top:1px}
table.lkt tr.lkmiss td{color:var(--muted)}
table.lkt td{vertical-align:top}
@media(max-width:700px){.lkbar{flex-wrap:wrap}.lkbar textarea{flex-basis:100%}.lkchips input[type=search]{margin-left:0;width:100%}}
@media print{.lkform,.lkchips input,.lkact{display:none!important}}

/* ---------- v1.29 Analysis helpers: number profile, saved filters, notes under the reports, case summary ---------- */
td.npcell{cursor:pointer}
td.npcell:hover{color:var(--accent);text-decoration:underline dotted;text-underline-offset:3px}
.namepop{z-index:1000}
.npbox{position:fixed;right:14px;top:70px;width:min(430px,94vw);max-height:calc(100vh - 90px);overflow:auto;background:var(--card);color:var(--text);border:1px solid var(--ibd);border-radius:12px;box-shadow:0 14px 40px rgba(0,0,0,.28);padding:12px 14px;z-index:900;font-size:13px}
.npbox[hidden]{display:none}
.npf-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:6px}
.npf-title{font-size:15px;line-height:1.4}
.npf-num{font-weight:700;color:var(--head);font-size:17px;letter-spacing:.2px}
.npf-x{border:0;background:none;color:var(--muted);font-size:24px;line-height:1;cursor:pointer;padding:0 4px}
.npf-x:hover{color:var(--text)}
.npf-own{background:var(--note);border:1px solid var(--noteb);color:var(--notet);border-radius:8px;padding:6px 10px;font-size:12.5px;margin:4px 0 8px}
.npf-who{margin:6px 0 10px}
table.npf-kv{width:100%;border-collapse:collapse}
table.npf-kv th{width:36%;text-align:left;font-weight:600;color:var(--muted);font-size:12px;padding:3px 8px 3px 0;vertical-align:top;background:none;border:0}
table.npf-kv td{padding:3px 0;vertical-align:top;word-break:break-word;border:0}
.npf-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(78px,1fr));gap:6px;margin:8px 0}
.npf-stats>div{background:var(--soft);border-radius:8px;padding:6px 8px;text-align:center}
.npf-stats b{display:block;font-size:15px;color:var(--head)}
.npf-stats span{font-size:11px;color:var(--muted)}
.npf-line{margin:4px 0}
.npf-hist{display:flex;align-items:flex-end;gap:2px;height:46px;margin-top:8px;border-bottom:1px solid var(--line)}
.npf-hist i{flex:1;background:var(--accent);border-radius:2px 2px 0 0;min-height:2px}
.npf-hist i.z{background:var(--soft3)}
.npf-hl{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-bottom:6px}
.npf-sub{font-weight:700;color:var(--head);margin:10px 0 4px;font-size:12.5px}
ul.npf-list{list-style:none;margin:0;padding:0}
ul.npf-list li{display:flex;justify-content:space-between;gap:10px;padding:3px 0;border-bottom:1px solid var(--line)}
ul.npf-list li span{min-width:0;word-break:break-word}
.npf-others{display:flex;flex-wrap:wrap;gap:6px}
.npf-others a.chip{font-size:12px;padding:3px 10px}
.npf-empty{background:var(--amber);border-radius:8px;padding:8px 10px;margin:8px 0}
.npf-load{padding:18px 6px;text-align:center;color:var(--muted)}
.npf-load.bad{color:var(--err)}
.npf-act{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
@media (max-width:700px){.npbox{left:8px;right:8px;top:auto;bottom:8px;width:auto;max-height:70vh}}
@media print{.npbox{display:none!important}}

.sfrow{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin:6px 0 0;padding:6px 2px 0;border-top:1px dashed var(--line)}
.sfrow>b{font-size:12px;color:var(--muted)}
.sfrow select,.sfrow input[type=text]{padding:5px 8px;border:1px solid var(--ibd);border-radius:6px;font:inherit;background:var(--card);color:var(--text)}
.sfrow select{max-width:210px}
.sfrow input[type=text]{width:170px}
.sfrow .sfnew{display:inline-flex;gap:6px;align-items:center}
.sfrow .sfnew[hidden],.sfrow button[hidden]{display:none}
.sfmsg{font-size:12px;color:var(--muted)}
.sfmsg.bad{color:var(--err)}
@media print{.sfrow{display:none!important}}

details.repnote{margin:0 0 10px;padding:6px 12px;border:1px dashed var(--ibd);border-radius:10px;background:var(--stripe)}
details.repnote.has{border-style:solid;border-color:var(--noteb);background:var(--note)}
details.repnote>summary{cursor:pointer;color:var(--head);list-style:none;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}
details.repnote>summary::-webkit-details-marker{display:none}
details.repnote>summary::before{content:"\270E";color:var(--muted)}
details.repnote textarea{width:100%;min-height:58px;resize:vertical;margin-top:8px;padding:7px 9px;border:1px solid var(--ibd);border-radius:8px;font:inherit;background:var(--card);color:var(--text)}
.rnst{font-size:12px;color:var(--muted)}
.rnst.ok{color:var(--ok)}
.rnst.bad{color:var(--err)}
@media print{details.repnote:not(.has){display:none}details.repnote .muted{display:none}details.repnote textarea{border:0;background:none;resize:none}}

.csum-cards{margin-bottom:10px}
.csum-act{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 14px}
.csum-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 12px}
.csum-chips a.chip small{color:var(--muted);font-weight:400}
h2.csum-h{margin:20px 0 8px;font-size:17px;color:var(--head)}

/* ---------------------------------------------------------------- v1.30 calendar of boxes (Missing dates report) */
.calbox{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:0 0 12px}
.calbox .ct{font-weight:700;margin-bottom:6px}
.callegend{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:var(--muted);margin-bottom:8px}
.callegend span{display:inline-flex;align-items:center;gap:4px}.callegend i{width:14px;height:14px;border-radius:3px;display:inline-block;border:1px solid rgba(0,0,0,.08)}
.calgrid{display:flex;flex-wrap:wrap;gap:14px}
table.calm{border-collapse:separate;border-spacing:3px;width:auto;margin:0}
table.calm caption{font-weight:700;font-size:12.5px;text-align:left;padding:0 0 2px 3px}
table.calm th{font-size:10px;color:var(--muted);font-weight:600;padding:0;text-align:center;background:none;border:0}
table.calm td{width:26px;height:24px;padding:0;text-align:center;font-size:11px;border-radius:4px;border:0;cursor:default}
table.calm td.cd.have{color:#0d2a52}table.calm td.cd.miss{color:#fff;font-weight:700}table.calm td.cd.out{color:#aaa}
html[data-theme=dark] table.calm td.cd.out{background:#2a2f36 !important;color:#666}
@media print{.calbox{break-inside:avoid}}
/* ---------------------------------------------------------------- v1.30 companion finder */
.cmpbar{height:7px;width:80px;background:var(--line);border-radius:4px;overflow:hidden;margin-top:3px}.cmpbar i{display:block;height:100%;background:#a3271f}
.cmpscore{display:inline-block;margin-left:10px;color:#a3271f;font-size:18px}
.tag.cmp0{background:#fde2df;color:#a3271f}.tag.cmp1{background:#e3eefc;color:#1d4f9a}.tag.cmp2{background:#e6f4ea;color:#1f7a3f}.tag.cmp3{background:#fff1d6;color:#8a5a00}
.cmpgrid{display:grid;grid-template-columns:1.2fr 1fr;gap:12px}@media(max-width:900px){.cmpgrid{grid-template-columns:1fr}}
.dchecks{display:flex;flex-wrap:wrap;gap:6px 18px}.dchecks .dgrp{min-width:200px}.dchecks .dgrp b{display:block;font-size:12px;color:var(--muted);margin:4px 0 2px}.dchecks label{display:block;font-weight:400;margin:1px 0}
.refbox .refpart{margin-top:6px}.refbox textarea{width:100%;max-width:640px}.refbox select{max-width:520px}.tag.refchip{max-width:340px;white-space:normal}
/* v1.30: Un-reported crime import */
.uimp{margin:0 0 8px;text-align:right}
.cletters{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:6px 14px;margin:8px 0}
.cletters label{display:flex;justify-content:space-between;align-items:center;gap:8px;font-weight:400;margin:0;font-size:13px}
.cletters input[type=text]{width:52px;text-transform:uppercase;text-align:center;flex:none}
/* v1.30: dashboard = sample A + the side menu of sample B */
.dwrap{display:grid;grid-template-columns:196px minmax(0,1fr);gap:16px;align-items:start}
.dside{position:sticky;top:12px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:8px;display:flex;flex-direction:column;gap:1px;max-height:calc(100vh - 90px);overflow:auto}
.dside a{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;color:var(--text);text-decoration:none;font-weight:600;font-size:13.5px;line-height:1.2}
.dside a i{font-style:normal;width:20px;text-align:center;flex:none;font-size:15px}
.dside a:hover{background:var(--soft);text-decoration:none}
.dside a.on{background:var(--tagbg);color:var(--module)}
.dside .sbadge{margin-left:auto;background:var(--module);color:#fff;border-radius:9px;padding:1px 7px;font-size:11px;font-weight:700}
.dside .sbadge.red{background:#a3271f}.dside .sbadge.amber{background:#d98a0b}
.dmain{min-width:0}
.dcards2{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin-bottom:14px}
.dcards2.n5{grid-template-columns:repeat(5,minmax(0,1fr))}.dcards2.n4{grid-template-columns:repeat(4,minmax(0,1fr))}
.dcards2.n3,.dcards2.n2,.dcards2.n1{grid-template-columns:repeat(3,minmax(0,1fr))}
.dcards2 .card.kpi.dk{border-left-width:4px;padding:10px 14px}
.dcards2 .kpi .v{font-size:25px;font-weight:800}
.dcards2 .s .up{color:#1f7a3f;font-weight:700}.dcards2 .s .dn{color:#a3271f;font-weight:700}
html[data-theme=dark] .dcards2 .s .up{color:#6fcf97}html[data-theme=dark] .dcards2 .s .dn{color:#ff8a80}
.drow{display:grid;gap:14px;align-items:start;margin-bottom:14px}
.drow .panel{margin-bottom:0;min-width:0}
.drow.d2{grid-template-columns:minmax(0,1.3fr) minmax(0,1fr)}
.drow.d3{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.drow.d2b{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}
.drow .panel>h2 small{font-weight:400;font-size:12px}
.attnwork{padding:2px 14px 4px}
.witem{display:flex;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line)}
.witem:last-child{border-bottom:0}
.witem .wt{flex:1;min-width:0}.witem .wt b{display:block;font-size:13.5px}.witem .wt span{color:var(--muted);font-size:12px}
.witem .btn{flex:none}
.dot{width:10px;height:10px;border-radius:50%;flex:none;display:inline-block}
.dot.r{background:#c0392b}.dot.o{background:#e08e0b}.dot.b{background:#0b5cad}.dot.g{background:#1f9d55}
.dbchip{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11.5px;font-weight:700;text-decoration:none;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.dbchip.c0{background:#ececec;color:#4a4a4a}.dbchip.c1{background:#fde2df;color:#a3271f}.dbchip.c2{background:#e3eefc;color:#1d4f9a}
.dbchip.c3{background:#e6f4ea;color:#1f7a3f}.dbchip.c4{background:#fff1d6;color:#8a5a00}.dbchip.c5{background:#ece6f7;color:#5a3d99}
a.dbchip.c1:hover{text-decoration:underline}
html[data-theme=dark] .dbchip{filter:brightness(.85) saturate(1.2)}
.vbars{display:flex;align-items:flex-end;gap:5px;height:130px;padding-top:4px}
.vbars .vb{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;min-width:0}
.vbars .vb i{display:block;width:100%;background:var(--module);border-radius:3px 3px 0 0;opacity:.85;min-height:0}
.vbars .vb em{font-style:normal;font-size:10px;color:var(--muted);line-height:1.3}
.vbars .vb:hover i{opacity:1}
.vlab{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;margin-top:3px}
.hbr{display:grid;grid-template-columns:96px minmax(0,1fr) 46px;align-items:center;gap:8px;margin:7px 0;font-size:12.5px}
.hbr span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hbr div{background:var(--soft);border-radius:3px;height:12px}
.hbr i{display:block;height:12px;border-radius:3px;background:var(--module)}
.hbr em{font-style:normal;color:var(--muted);text-align:right}
@media(max-width:1250px){.dcards2{grid-template-columns:repeat(3,minmax(0,1fr))!important}}
@media(max-width:1100px){.dwrap{grid-template-columns:1fr}.dside{display:none}.drow.d2,.drow.d2b{grid-template-columns:1fr}}
@media(max-width:640px){.dcards2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
.drow.d21{grid-template-columns:minmax(0,1.7fr) minmax(0,1fr)}
.dstack{display:flex;flex-direction:column;gap:14px;min-width:0}.dstack .panel{margin:0}
table.dtight td,table.dtight th{padding:6px 9px}
@media(max-width:1100px){.drow.d21{grid-template-columns:1fr}}
/* v1.31: heatmap block (routine, raid planner) */
table.heatm{border-collapse:separate;border-spacing:3px;width:auto;margin-top:4px}
table.heatm th{font-size:11px;color:var(--muted);font-weight:600;padding:0 5px;border:0;background:none;text-align:center;white-space:nowrap}
table.heatm tbody th{text-align:right}
table.heatm td{min-width:27px;height:22px;border-radius:4px;border:0;text-align:center;font-size:10.5px;padding:0 2px;font-weight:600}
table.heatm td.tot,table.heatm th.tot{background:none;color:var(--muted);font-weight:600;padding-left:8px;text-align:right}
html[data-theme=dark] table.heatm td[style*="#eceff3"]{background:#2a3140!important;color:#6b7686!important}
.tag.vsame{background:#ece6f7;color:#5a3d99;margin-top:3px;display:inline-block}.tag.vcomp{background:#fde2df;color:#a3271f;margin-top:3px;display:inline-block}
/* v1.32: background name lookup */
.lkjob{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;margin-bottom:10px;border:1px solid var(--line);border-radius:8px;background:var(--soft)}
.lkjob .spin{width:14px;height:14px;border:2px solid var(--module);border-top-color:transparent;border-radius:50%;display:inline-block;animation:lkspin .8s linear infinite}
@keyframes lkspin{to{transform:rotate(360deg)}}
.lksplit{display:inline-flex;align-items:center;gap:6px;font-weight:400;margin:0 10px 0 0}.lksplit input{width:auto}
.instbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 12px}
