
:root{--bg:#221F20;--card:#2c2829;--line:#3a3536;--red:#CF2031;--dred:#771C1B;
      --txt:#f2efe9;--muted:#9a9390;--amber:#e08a1e;}
*{box-sizing:border-box;}
/* The hidden attribute has to beat every class rule below, or anything with a
   display of its own (the modals, the file inputs) shows up on page load. */
[hidden]{display:none !important;}
body{margin:0;background:var(--bg);color:var(--txt);
     font-family:'Inter',Arial,system-ui,sans-serif;}
header{padding:16px 22px;border-bottom:3px solid var(--red);
       display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;}
h1{font-family:'Montserrat',Arial,sans-serif;font-weight:700;font-size:20px;margin:0;
   letter-spacing:.5px;text-transform:uppercase;}
.sub{color:var(--muted);font-size:13px;}
.wrap{padding:18px 22px;}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(415px,1fr));
      gap:14px;align-items:start;}
.card{background:var(--card);border:1px solid var(--line);border-left:5px solid var(--dred);
      border-radius:8px;padding:13px 15px;}
.card.wildcad{border-left-color:var(--red);}
.card.manual{border-left-color:#7fb2ff;}
.card.orora{border-left-color:#e8b825;}
.otsrc{color:#e8b825;font-weight:600;}
/* Two-column dashboard: OroraTech left, WildCAD/Manual right */
.dash-split{display:grid;grid-template-columns:minmax(415px,1fr) 3fr;gap:18px;align-items:start;}
.dash-split .dashcol-head{font-family:'Montserrat',Arial,sans-serif;font-size:13px;
  font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);
  border-bottom:2px solid var(--line);padding-bottom:6px;margin-bottom:10px;}
.dash-split .dashcol-head.ot{color:#e8b825;border-bottom-color:#e8b825;}
.dash-split .dashcol:not(.wc){display:flex;flex-direction:column;gap:14px;}
.dash-split .dashcol-head.wc{color:var(--red);border-bottom-color:var(--red);}
.dash-split .dashcol.wc .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(415px,1fr));gap:14px;align-items:start;}
@media(max-width:900px){.dash-split{grid-template-columns:1fr;}}
/* High-visibility "the fire is closing out" banner, full-bleed across the top
   of the card. Negative margins cancel the card's own padding so it reads as a
   bar rather than an inset chip. */
.statusbanner{margin:-13px -15px 11px -15px;padding:8px 14px;
      background:var(--red);color:#fff;font-family:'Montserrat',Arial,sans-serif;
      font-weight:700;font-size:12.5px;letter-spacing:.7px;text-transform:uppercase;
      border-radius:7px 7px 0 0;border-bottom:2px solid #f0655f;}
/* Analyst-raised watch banner. Same shape and weight as the WildCAD status
   banner so the two read as one family, in amber with dark text -- white on
   amber is unreadable at this size. */
.statusbanner.monitoring{background:var(--amber);color:#221f20;
      border-bottom-color:#ffc457;display:flex;align-items:center;
      justify-content:space-between;gap:10px;}
.statusbanner.monitoring .montimer{font-variant-numeric:tabular-nums;
      letter-spacing:.5px;white-space:nowrap;}
/* Two banners on one card butt together instead of overlapping: the second
   cancels the first's bottom margin and drops its rounded top. */
.statusbanner + .statusbanner{margin-top:-11px;border-radius:0;}
/* Correlation match banner. Sits above status/monitoring banners and stacks
   when a card correlates with multiple cards from different sources. */
.matchbanner{display:flex;align-items:center;justify-content:space-between;
      margin:-13px -15px 11px -15px;padding:6px 14px;
      background:#b8960f;color:#1a1a1a;
      font-family:'Montserrat',Arial,sans-serif;font-weight:700;
      font-size:12px;letter-spacing:.4px;text-transform:uppercase;
      border-radius:7px 7px 0 0;border-bottom:2px solid #9a7e0d;}
.matchbanner + .matchbanner,
.matchbanner + .statusbanner{margin-top:-11px;border-radius:0;}
.matchbtns{display:flex;gap:6px;align-items:center;flex-shrink:0;}
.btn.matchcompare{background:#1a1a1a;color:#f0d050;border:1px solid #f0d050;
      padding:2px 10px;font-size:11px;text-decoration:none;border-radius:3px;
      font-weight:700;letter-spacing:.5px;}
.btn.matchcompare:hover{background:#333;}
.btn.matchdismiss{background:transparent;color:#1a1a1a;
      border:1px solid rgba(26,26,26,.27);padding:2px 6px;font-size:11px;
      cursor:pointer;border-radius:3px;line-height:1;}
.btn.matchdismiss:hover{background:#9a7e0d;}
/* Red up-arrow: fire size changed since original report. */
.acres-chg{color:var(--red);font-size:21px;line-height:0;margin-right:2px;
      cursor:default;}
/* Red vehicle: resources arrived on a previously-blank card. */
.res-new{color:var(--red);font-size:19px;line-height:0;margin-right:2px;
      cursor:default;}
/* The watching toggle. Quiet until it is on, then it carries the banner's
   amber so the button and the banner obviously belong to each other. */
.eyebtn{display:inline-flex;align-items:center;justify-content:center;
      padding:3px 6px;border:1px solid var(--line);border-radius:6px;
      background:transparent;color:var(--muted);cursor:pointer;line-height:0;
      transition:.12s;}
.eyebtn:hover{color:var(--txt);border-color:var(--muted);}
.eyebtn.on{background:var(--amber);border-color:var(--amber);color:#221f20;}
.eyebtn.on:hover{filter:brightness(1.1);}
.eyebtn:focus-visible{outline:2px solid var(--red);outline-offset:2px;}
.badge{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:12px;
       text-transform:uppercase;letter-spacing:.5px;}
.badge.manual{background:#2b4a72;color:#dceaff;border:1px solid #7fb2ff;}
.cardhead{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;}
.headleft{display:flex;align-items:center;gap:7px;min-width:0;}
.headright{display:flex;align-items:center;gap:6px;flex:none;}
.prio{font-family:'Montserrat',Arial,sans-serif;font-weight:700;font-size:10px;
      letter-spacing:.5px;text-transform:uppercase;padding:2px 7px;border-radius:10px;
      white-space:nowrap;flex:none;}
.prio1{background:var(--red);color:#fff;}
.prio2{background:#d9822b;color:#241a0d;}
.prio3{background:#3f6fae;color:#fff;}
.prio4{background:#4a4446;color:#d3cdc9;}
.name{font-weight:700;font-size:15px;}
.meta{color:var(--muted);font-size:12px;line-height:1.5;}
/* Dispatch's Inc#. Tabular figures and a touch more contrast than the rest of
   the meta line, because this is the string an analyst reads back over a
   radio and transcribes into Ignis. */
/* Dispatch centre code, linked to that centre's WildWeb log. Underlined only
   on hover so the meta line stays quiet at rest. */
.dclink{color:inherit;text-decoration:none;border-bottom:1px dotted var(--muted);}
.dclink:hover{color:var(--txt);border-bottom-color:var(--red);}
.dclink:focus-visible{outline:2px solid var(--red);outline-offset:2px;}
.incno{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
       font-size:11.5px;letter-spacing:.02em;color:var(--txt);opacity:.85;
       white-space:nowrap;}
.comment{margin:8px 0;font-size:13px;}
a{color:#7fb2ff;text-decoration:none;}
a:hover{text-decoration:underline;}
.health{font-size:12px;color:var(--muted);margin-top:6px;}
.healthbar{margin:2px 0 14px;line-height:2;}
.appfoot{margin-top:22px;padding-top:12px;border-top:1px solid var(--line);
  font-size:12px;color:var(--muted);text-align:center;}
.appfoot .buildstamp{opacity:.65;}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:4px;}
.ok{background:#3fae5a;} .bad{background:var(--red);}
.empty{color:var(--muted);padding:30px;text-align:center;}
.coord{font-family:ui-monospace,'Consolas',monospace;font-size:12px;color:#cdc7c3;
       background:#1b1819;border:1px solid var(--line);border-radius:5px;
       padding:4px 7px 5px;margin-top:6px;}
.coord b{color:var(--muted);font-weight:600;font-family:'Inter',Arial,sans-serif;}
.crow{display:flex;align-items:center;gap:8px;padding:2px 0;}
.crow + .crow{margin-top:3px;}
.crow b{color:var(--muted);font-weight:600;font-family:'Inter',Arial,sans-serif;
        min-width:34px;}
.cval{flex:1;font-family:ui-monospace,'Consolas',monospace;}
.copy{cursor:pointer;border:1px solid var(--line);background:#332e2f;color:#cdc7c3;
      border-radius:5px;padding:2px 8px;font-size:11px;font-weight:700;
      font-family:'Inter',Arial,sans-serif;text-transform:uppercase;
      letter-spacing:.5px;min-width:56px;transition:.12s;}
.copy:hover{background:var(--dred);border-color:var(--red);color:#fff;}
.copy.done{background:#2f5d3a;border-color:#3fae5a;color:#d8f5e0;}
.copy.fail{background:var(--dred);border-color:var(--red);color:#ffb3b0;}
.copy:focus-visible,.btn:focus-visible,.annot:focus-visible{outline:2px solid var(--red);
      outline-offset:2px;}
.annots{margin-top:11px;display:flex;flex-direction:column;gap:9px;}
.annots .fld{display:flex;flex-direction:column;min-width:0;}
.alab{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;
      font-weight:700;margin-bottom:3px;display:flex;align-items:center;gap:6px;}
.annot{width:100%;background:#1b1819;border:1px solid var(--line);border-radius:5px;
       color:var(--txt);padding:6px 8px;font-size:12.5px;font-family:inherit;
       resize:none;overflow:hidden;overflow-wrap:anywhere;line-height:1.4;}
.annot:focus{outline:none;border-color:var(--red);}
.annot.dirty{border-color:var(--amber);}
.annot.saved{border-color:#3fae5a;}
.annot.failed{border-color:var(--red);background:#2a1817;}
.astate{font-weight:600;letter-spacing:0;text-transform:none;font-size:10px;}
.actions{display:flex;gap:8px;margin-top:11px;}
.btn{flex:1;cursor:pointer;border:1px solid var(--line);border-radius:6px;
     padding:7px 10px;font-size:12px;font-weight:700;text-transform:uppercase;
     letter-spacing:.5px;background:#332e2f;color:var(--txt);transition:.12s;}
.btn:hover{filter:brightness(1.25);}
.btn.model:hover{background:#2f5d3a;border-color:#3fae5a;}
.btn.discard:hover{background:var(--dred);border-color:var(--red);}
.card.modelled{opacity:.55;border-left-color:#3fae5a;}
.card.modelled .btn.model{background:#2f5d3a;border-color:#3fae5a;cursor:default;}
.tag-modelled{display:none;font-size:11px;font-weight:700;color:#5ecb78;
              letter-spacing:.5px;}
.card.modelled .tag-modelled{display:inline;}

/* --- nav bar / auth / forms / user table --- */
header{align-items:center;}
.spacer{flex:1;}
.navgroup{display:flex;align-items:center;gap:9px;flex-wrap:wrap;
      justify-content:flex-end;margin-left:auto;}
.navlink{color:#cdc7c3;font-size:12px;font-weight:600;text-transform:uppercase;
         letter-spacing:.5px;padding:5px 10px;border:1px solid var(--line);
         border-radius:6px;}
.navlink:hover{background:#332e2f;text-decoration:none;}
.statusline{color:var(--muted);font-size:13px;margin-bottom:14px;}
.panel{background:var(--card);border:1px solid var(--line);border-radius:8px;
       padding:16px 18px;margin-bottom:16px;max-width:960px;}
.panel h2{font-family:'Montserrat',Arial,sans-serif;font-size:15px;margin:0 0 12px;
          text-transform:uppercase;letter-spacing:.5px;}
label{display:block;font-size:12px;color:var(--muted);margin:10px 0 4px;
      text-transform:uppercase;letter-spacing:.5px;}
input,select{background:#1b1819;border:1px solid var(--line);border-radius:6px;
     color:var(--txt);padding:8px 10px;font-size:14px;font-family:inherit;}
input:focus,select:focus{outline:none;border-color:var(--red);}
.btn.primary{background:var(--red);border-color:var(--red);color:#fff;margin-top:14px;flex:none;}
.btn.primary:hover{filter:brightness(1.12);}
form.inline{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;}
form.inline label{margin:0;}
form.inline .btn.primary{margin-top:0;}
form.mini{display:inline-flex;gap:5px;margin:0 6px 6px 0;vertical-align:middle;}
form.mini input{min-width:130px;padding:5px 7px;font-size:12px;}
form.mini .btn{flex:none;padding:5px 9px;}
.utable{width:100%;border-collapse:collapse;font-size:13px;}
.utable th{text-align:left;color:var(--muted);font-size:11px;text-transform:uppercase;
           letter-spacing:.5px;border-bottom:1px solid var(--line);padding:7px 8px;}
.utable td{border-bottom:1px solid var(--line);padding:8px;vertical-align:middle;}
.utable tr.inactive{opacity:.5;}
.rowacts{white-space:nowrap;}
/* --- analytics --- */
.anwrap{max-width:1100px;}
.statgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));
      gap:12px;}
.statcard{background:#1b1819;border:1px solid var(--line);border-radius:8px;
      padding:14px 16px;border-left:4px solid var(--dred);}
.statcard .leg{color:var(--muted);font-size:12px;text-transform:uppercase;
      letter-spacing:.5px;margin-bottom:9px;}
.statcard .statbig{font-family:'Montserrat',Arial,sans-serif;font-size:26px;
      font-weight:700;color:var(--txt);line-height:1;}
.statcard .statsub{color:var(--muted);font-size:12px;margin-top:8px;line-height:1.6;}
.statcard.na{border-left-color:var(--line);}
.statcard.na .statbig{color:var(--muted);font-size:17px;font-weight:600;}
.utable td.dur{font-family:ui-monospace,'Consolas',monospace;white-space:nowrap;
      text-align:right;}
.utable th.dur{text-align:right;}
.err{background:#3a1514;border:1px solid var(--red);color:#ffb3b0;
     padding:9px 12px;border-radius:6px;font-size:13px;margin:10px 0;}
.notice{background:#14301c;border:1px solid #2f5d3a;color:#9fe0b0;
        padding:9px 12px;border-radius:6px;font-size:13px;margin:10px 0;}
.hint{color:var(--muted);font-size:12px;margin:10px 0 0;}
.authwrap{min-height:100vh;display:flex;align-items:center;justify-content:center;}
.authcard{background:var(--card);border:1px solid var(--line);border-top:4px solid var(--red);
          border-radius:10px;padding:28px 30px;width:340px;}
.authtitle{font-family:'Montserrat',Arial,sans-serif;font-size:16px;margin:0;
           text-transform:uppercase;letter-spacing:.5px;}
.authsub{color:var(--muted);font-size:13px;margin:6px 0 4px;}
.authcard input{width:100%;}
.authcard .btn{width:100%;}
.navlink.active{background:var(--dred);border-color:var(--red);color:#fff;}
.dot.pending{background:#6a6564;}
.chips{margin:2px 0 14px;font-size:13px;color:var(--muted);line-height:2;}
.chiplabel{color:var(--muted);font-weight:600;margin-right:4px;}
.chip{display:inline-block;background:#332e2f;border:1px solid var(--line);
      border-radius:12px;padding:2px 10px;margin:0 4px 4px 0;color:#e6e1dc;font-size:12px;}
.chip.warn{background:#3a1514;border-color:var(--red);color:#ffb3b0;}
.attrib{color:#9fe0b0;margin-top:8px;}
.prior{margin-top:6px;color:var(--amber);}
.prior b{color:var(--amber);}
.prior ul{margin:3px 0 0;padding-left:18px;}
.prior li{margin:1px 0;}
.prior .oldwhen{color:var(--muted);font-size:11px;}
code{background:#1b1819;border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:12px;}
.shuttle{display:flex;gap:14px;align-items:stretch;flex-wrap:wrap;}
.shuttle .col{flex:1;min-width:250px;display:flex;flex-direction:column;}
.shuttle h3{font-family:'Montserrat',Arial,sans-serif;font-size:13px;text-transform:uppercase;
            letter-spacing:.5px;margin:0 0 8px;}
.shuttle h3 span{color:var(--muted);font-weight:400;text-transform:none;letter-spacing:0;font-size:12px;}
.filter{width:100%;margin-bottom:8px;}
select[multiple]{width:100%;min-height:380px;background:#1b1819;border:1px solid var(--line);
     border-radius:6px;color:var(--txt);padding:4px;font-size:13px;font-family:inherit;}
select[multiple] option{padding:4px 7px;border-radius:4px;}
select[multiple] option:checked{background:var(--red);color:#fff;}
.arrows{display:flex;flex-direction:column;justify-content:center;gap:12px;padding:0 2px;}
.arrows .btn.arrow{flex:none;font-size:20px;line-height:1;padding:12px 16px;}
.arrows .btn.arrow:hover{background:var(--dred);border-color:var(--red);}

/* --- modelling board (kanban) ------------------------------------------- */
.kanban{display:flex;gap:13px;align-items:flex-start;overflow-x:auto;padding-bottom:8px;}
.kcol{flex:1 1 0;min-width:296px;background:#262223;border:1px solid var(--line);
      border-radius:9px;display:flex;flex-direction:column;
      max-height:calc(100vh - 200px);}
.khead{font-family:'Montserrat',Arial,sans-serif;font-size:12.5px;font-weight:700;
       text-transform:uppercase;letter-spacing:.7px;margin:0;padding:11px 13px;
       border-bottom:1px solid var(--line);display:flex;align-items:center;gap:9px;}
.khead .kdot{width:9px;height:9px;border-radius:50%;background:var(--muted);flex:none;}
.kcol[data-stage="IN_PROCESS"] .kdot{background:var(--amber);}
.kcol[data-stage="READY"] .kdot{background:#7fb2ff;}
.kcol[data-stage="COMPLETED"] .kdot{background:#3fae5a;}
.khead .kcount{margin-left:auto;background:#332e2f;border:1px solid var(--line);
       border-radius:11px;padding:1px 9px;font-size:11px;color:#e6e1dc;}
.kbody{flex:1;min-height:110px;padding:11px;display:flex;flex-direction:column;
       gap:11px;overflow-y:auto;}
.kbody.over{background:#31292a;box-shadow:inset 0 0 0 2px var(--red);border-radius:0 0 8px 8px;}
.kempty{color:var(--muted);font-size:12px;line-height:1.5;text-align:center;
        padding:16px 10px;border:1px dashed var(--line);border-radius:7px;}
.kcol .card{cursor:grab;}
.kcol .card:active{cursor:grabbing;}
.kcol .card.dragging{opacity:.35;}
.kcol .card .coord{font-size:11.5px;}
.kcol .card .crow b{min-width:30px;}
.stagenav{display:flex;align-items:center;gap:8px;margin-top:11px;}
.stagenav .btn{flex:none;padding:6px 12px;font-size:13px;line-height:1.1;}
.stagenav .kstage{flex:1;text-align:center;font-size:10.5px;font-weight:700;
        color:var(--muted);text-transform:uppercase;letter-spacing:.6px;}
.btn:disabled{opacity:.3;cursor:not-allowed;filter:none;}
.subactions{display:flex;gap:8px;margin-top:7px;}
.subactions .btn{flex:1;padding:5px 8px;font-size:10.5px;background:transparent;
        color:var(--muted);}
.subactions .btn:hover{color:var(--txt);}
.stagemeta{margin-top:8px;font-size:11px;line-height:1.5;}
/* A finished card offers no Return-to-dashboard or Discard: it is done and
   only moves backward a column (via the arrows) or on to the Archive. Hidden
   rather than omitted so dragging it out of Completed restores the buttons
   without a reload. */
.card[data-stage="COMPLETED"] .subactions .kback,
.card[data-stage="COMPLETED"] .subactions .kdiscard{display:none;}
.ordnav{margin-left:auto;display:flex;gap:3px;flex:none;}
.ordmove{background:transparent;border:1px solid var(--line);color:var(--muted);
      border-radius:4px;font-size:9px;line-height:1;padding:3px 6px;cursor:pointer;}
.ordmove:hover:not(:disabled){color:#fff;background:var(--dred);border-color:var(--red);}
.ordmove:disabled{opacity:.25;cursor:default;}
.kbody .card.dropbefore{box-shadow:0 -3px 0 -1px var(--red);}
.kbody .card.dropafter{box-shadow:0 3px 0 -1px var(--red);}
.knote{color:var(--muted);font-size:11px;line-height:1.5;text-align:center;padding:8px 4px;}
.mergedtag{color:#7fb2ff;margin-top:4px;}
.discardtag{color:var(--amber);margin-top:8px;}
.discardgroup{border-color:var(--amber);}
.discardgroup > legend{color:var(--amber);}
.discard-card{width:min(440px,100%);text-align:left;}
.discard-card .prio-title,.discard-card .prio-sub{text-align:center;}
.discard-card .fld{margin:10px 0;}
.discard-card .alab{display:block;margin-bottom:4px;font-size:12px;color:var(--muted);}
.discardsel,.discardnotes{width:100%;box-sizing:border-box;background:var(--card);
  color:var(--txt);border:1px solid var(--line);border-radius:6px;padding:8px;
  font-family:inherit;font-size:13px;}
.discardsel:focus,.discardnotes:focus{outline:none;border-color:var(--red);}
.discard-btns{display:flex;gap:10px;margin-top:6px;}
.discard-btns .btn.discard,.discard-btns .prio-cancel{flex:1;}
.discard-err{color:var(--red);min-height:1.1em;font-size:13px;margin-top:2px;}
.btn.merge{flex:none;text-align:center;color:var(--txt);text-decoration:none;}
.btn.merge:hover{background:#2b4a72;border-color:#7fb2ff;text-decoration:none;}
.actions .btn.merge{flex:1;}
.navlink.newcard{background:var(--dred);border-color:var(--red);color:#fff;
       margin-right:10px;display:inline-block;}
.navlink.newcard:hover{background:var(--red);}

/* --- manual entry form --- */
.mgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
       gap:12px 16px;margin-top:6px;}
.mfield{display:flex;flex-direction:column;min-width:0;}
.mfield label{margin:0 0 4px;}
.mfield .wide{width:100%;}
.mfield textarea{background:#1b1819;border:1px solid var(--line);border-radius:6px;
       color:var(--txt);padding:8px 10px;font-size:14px;font-family:inherit;resize:vertical;}
.mfield textarea:focus{outline:none;border-color:var(--red);}

/* --- merge --- */
.picklist{display:flex;flex-direction:column;gap:2px;margin:10px 0 16px;
       max-height:420px;overflow-y:auto;}
.pickrow{display:flex;align-items:baseline;gap:10px;padding:8px 10px;border-radius:6px;
       cursor:pointer;border:1px solid transparent;}
.pickrow:hover{background:#332e2f;border-color:var(--line);}
.pickname{font-weight:700;font-size:14px;}
.pickmeta{color:var(--muted);font-size:12px;}
.mtable{width:100%;border-collapse:collapse;font-size:13px;margin:12px 0;}
.mtable th{text-align:left;color:var(--muted);font-size:11px;text-transform:uppercase;
       letter-spacing:.5px;border-bottom:1px solid var(--line);padding:8px;
       vertical-align:top;}
.mtable thead th{color:var(--txt);font-size:12px;width:38%;}
.mtable .colsrc{display:block;color:var(--muted);font-size:10.5px;font-weight:400;
       text-transform:none;letter-spacing:0;margin-top:3px;}
.mtable td{border-bottom:1px solid var(--line);padding:8px;vertical-align:top;}
.mtable tr.same td{color:var(--muted);}
.mtable .samenote{color:var(--muted);font-size:10.5px;text-transform:uppercase;
       letter-spacing:.5px;margin-left:8px;}
.mtable td.pick label{display:flex;gap:8px;align-items:flex-start;margin:0;
       cursor:pointer;text-transform:none;letter-spacing:0;font-size:13px;
       color:var(--txt);overflow-wrap:anywhere;}
.mtable tr.diff th{border-left:3px solid var(--amber);padding-left:9px;}
.mtable tr.empty-risk{background:rgba(255,170,0,.06);}
.mtable tr.empty-risk th{border-left-color:var(--warn,#e65100);}
.merge-empty{color:var(--warn,#e65100);font-style:normal;font-size:12px;}

/* --- data button on the card --- */
/* The Data row is the whole bottom of a card that has nothing entered yet, so
   its height is pinned rather than left to font metrics: an explicit button
   height and matching line-height mean the row is exactly 27px whatever the
   count text says, and it can never open up a band of dead space. */
.metarow{display:flex;align-items:flex-end;gap:12px;}
.metacol{flex:1;min-width:0;}
.databtn{flex:none;display:flex;align-items:center;gap:7px;}
.databtn .hasimg{color:#7fb2ff;display:flex;align-items:center;}
.btn.data{flex:none;height:24px;padding:0 13px;font-size:11px;line-height:22px;}
.locmoved{color:var(--amber);}
.priorlist{font-family:ui-monospace,'Consolas',monospace;font-size:11.5px;
      color:#cdc7c3;background:#1b1819;border:1px solid var(--line);
      border-radius:5px;padding:6px 8px;line-height:1.6;max-height:110px;
      overflow-y:auto;}
.locsec{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));
      gap:14px;padding-bottom:16px;margin-bottom:16px;
      border-bottom:1px solid var(--line);}
.locsec .priorloc{grid-column:1/-1;}
.locsec .fld{display:flex;flex-direction:column;min-width:0;}
textarea.annot.coord{font-family:ui-monospace,'Consolas',monospace;}
.btn.data:hover{background:#2b4a72;border-color:#7fb2ff;}
.datacount{font-size:11px;color:#cdc7c3;font-family:'Inter',Arial,sans-serif;
      min-width:0;}
.datacount.empty{color:var(--muted);font-style:italic;}
.navlink.alerts{cursor:pointer;font-family:inherit;}
/* On = light green, Off = light red. Dark text keeps both readable against the
   pale fills, which is what makes the state legible at a glance. */
.navlink.alerts.on{background:#d8f3df;border-color:#3f8f57;color:#123a20;}
.navlink.alerts.on:hover{background:#c6ecd0;}
.navlink.alerts.off{background:#f6d5d3;border-color:#cf6b68;color:#5a1414;}
.navlink.alerts.off:hover{background:#f0c4c1;}

/* --- hamburger "more" menu (native <details>, so it needs no JS and works on
   every page, board or admin) --- */
.menu{position:relative;display:inline-block;}
.menu>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;
      justify-content:center;gap:0;width:34px;height:29px;padding:0;}
.menu>summary::-webkit-details-marker{display:none;}
.menu>summary::marker{content:'';}
/* Three stacked lines drawn in CSS so they render crisply everywhere rather
   than depending on a font glyph. */
.menu .ham,.menu .ham::before,.menu .ham::after{display:block;width:16px;height:2px;
      background:currentColor;border-radius:2px;}
.menu .ham{position:relative;}
.menu .ham::before,.menu .ham::after{content:'';position:absolute;left:0;}
.menu .ham::before{top:-5px;}
.menu .ham::after{top:5px;}
.menu[open]>summary,.menu.menu-here>summary{background:var(--dred);
      border-color:var(--red);color:#fff;}
.menupanel{position:absolute;right:0;top:calc(100% + 6px);z-index:70;min-width:200px;
      background:var(--card);border:1px solid var(--line);border-radius:8px;padding:6px;
      display:flex;flex-direction:column;gap:2px;box-shadow:0 10px 28px rgba(0,0,0,.45);}
.menuitem{color:#cdc7c3;font-size:12px;font-weight:600;text-transform:uppercase;
      letter-spacing:.5px;padding:9px 11px;border-radius:6px;white-space:nowrap;}
.menuitem:hover{background:#332e2f;text-decoration:none;}
.menuitem.active{background:var(--dred);color:#fff;}
.menuitem.danger{color:#ffb3b0;}
.menuitem.danger:hover{background:#3a1514;}
.menusep{height:1px;background:var(--line);margin:5px 3px;}
.menucount{opacity:.7;font-weight:600;}

/* --- modal --- */
body.modal-open{overflow:hidden;}
.modal{position:fixed;inset:0;z-index:50;display:flex;align-items:center;
       justify-content:center;padding:24px;}
.modal.img{z-index:60;}
.modalback{position:absolute;inset:0;background:rgba(10,8,9,.78);}
.modalcard{position:relative;background:var(--card);border:1px solid var(--line);
       border-top:4px solid var(--red);border-radius:10px;width:min(760px,100%);
       max-height:calc(100vh - 48px);display:flex;flex-direction:column;
       box-shadow:0 18px 50px rgba(0,0,0,.55);}
.modalcard.wide{width:min(1400px,100%);}
/* Small priority chooser shown when a card is sent to On Deck. */
.prio-card{width:min(360px,100%);text-align:center;padding:20px 20px 18px;}
.prio-title{font-family:'Montserrat',Arial,sans-serif;font-weight:700;font-size:16px;
       margin-bottom:4px;}
.prio-sub{color:var(--muted);font-size:12.5px;margin-bottom:15px;}
.prio-btns{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:12px;}
.prio-pick{font-family:'Montserrat',Arial,sans-serif;font-weight:700;font-size:13px;
       letter-spacing:.5px;text-transform:uppercase;padding:13px;border-radius:8px;
       border:1px solid transparent;cursor:pointer;color:#fff;}
.prio-pick.prio1{background:var(--red);}
.prio-pick.prio2{background:#d9822b;color:#241a0d;}
.prio-pick.prio3{background:#3f6fae;}
.prio-pick.prio4{background:#4a4446;color:#d3cdc9;}
.prio-pick:hover{filter:brightness(1.12);}
.prio-pick:disabled{opacity:.5;cursor:default;}
.prio-cancel{background:transparent;border:1px solid var(--line);color:var(--muted);
       font-family:inherit;font-size:12px;padding:8px 16px;border-radius:6px;
       cursor:pointer;}
.prio-cancel:hover{color:#fff;border-color:var(--muted);}
.modalhead{display:flex;align-items:center;gap:12px;padding:14px 18px;
       border-bottom:1px solid var(--line);}
.modalhead h2{font-family:'Montserrat',Arial,sans-serif;font-size:15px;margin:0;
       text-transform:uppercase;letter-spacing:.5px;overflow-wrap:anywhere;
       flex:0 1 auto;min-width:0;}
/* Report Builder sits on the title line, hard right beside the close button --
   it is the thing you reach for after reading the card, not after scrolling
   past it. flex:none keeps it at its natural width so a long fire name wraps
   instead of squeezing the button, and the auto margin pushes the pair right.
   The adjacent-sibling rule cancels .modalx's own auto margin so the two stay
   together rather than splitting the free space between them; it only matches
   here, leaving the image modal's lone close button untouched. */
.modalhead .btn.report{margin-left:auto;flex:none;background:transparent;
       white-space:nowrap;}
.modalhead .btn.report:hover{background:var(--dred);border-color:var(--red);}
.modalhead .btn.report + .modalx{margin-left:8px;}
.modalx{margin-left:auto;background:transparent;border:1px solid var(--line);
       color:var(--muted);border-radius:6px;font-size:18px;line-height:1;
       padding:2px 10px;cursor:pointer;}
.modalx:hover{color:#fff;background:var(--dred);border-color:var(--red);}
.modalbody{padding:16px 18px;overflow-y:auto;}
.modalbody.imgbody{padding:0;display:flex;align-items:center;justify-content:center;
       background:#141112;}
.modalbody.imgbody img{max-width:100%;max-height:calc(100vh - 150px);display:block;}
.modalfoot{display:flex;align-items:center;gap:12px;padding:12px 18px;
       border-top:1px solid var(--line);}
.modalfoot .btn.primary{margin:0;margin-left:auto;}
.modalfoot .hint{margin:0;}

/* --- fields inside the modal --- */
/* Selects are short and pair up happily; everything you type into gets a row
   of its own, so a long detection name or a pasted URL has the full width to
   grow into instead of wrapping into a narrow column. */
.panelfields{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));
       gap:14px;}
.panelfields .fld.text,
.panelfields .fld.url,
.panelfields .fld.datetime,
.panelfields .fld.textarea{grid-column:1/-1;}
.panelfields .fld{display:flex;flex-direction:column;min-width:0;}
/* The analyst-owned fields, boxed and labelled so they stand out. */
.analystgroup{border:1.5px solid #4f9d69;border-radius:9px;min-width:0;
       margin:16px 0 4px;padding:12px 14px 4px;}
.analystgroup>legend{color:#8fd6a6;font-family:'Montserrat',Arial,sans-serif;
       font-weight:700;font-size:12px;letter-spacing:.7px;text-transform:uppercase;
       padding:0 8px;}
.fhint{display:block;color:var(--muted);font-size:10.5px;font-weight:400;
       text-transform:none;letter-spacing:0;margin:-1px 0 4px;}
.annot.grow{min-height:78px;}
/* Opt out of the three-row floor (see "rows" in ANNOTATION_FIELDS). autosize()
   still sets an explicit height from scrollHeight, so the box opens at one line
   and grows the moment the content needs a second. */
.annot.grow.oneline{min-height:0;}
select.annot{background:#1b1819;border:1px solid var(--line);border-radius:5px;
       color:var(--txt);padding:7px 8px;font-size:13px;font-family:inherit;}
select.annot:focus{outline:none;border-color:var(--red);}
select.annot.saved{border-color:#3fae5a;}
select.annot.failed{border-color:var(--red);}
/* === Card page (full-page data editor at /card/<id>) === */
.cardpage{max-width:1100px;margin:0 auto;padding:20px 24px;}
.cp-header{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;
       margin-bottom:14px;}
.cp-header .name-edit{flex:1 1 250px;font-size:22px;font-weight:700;
       font-family:'Montserrat',Arial,sans-serif;color:var(--txt);
       background:transparent;border:1px solid transparent;border-radius:5px;
       padding:4px 8px;resize:none;overflow:hidden;min-height:0;
       line-height:1.3;}
.cp-header .name-edit:focus{border-color:var(--line);background:#1b1819;}
.cp-hdr-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px;}
.cp-lbl{font-weight:600;font-size:13px;color:var(--muted);white-space:nowrap;}
.cp-fld-inline{display:flex;align-items:center;gap:6px;}
.cp-fld-inline.cp-wide{flex:1 1 300px;}
.cp-select{font-size:13px;padding:5px 7px;background:#1b1819;
       border:1px solid var(--line);border-radius:5px;color:var(--txt);
       font-family:inherit;}
.cp-text{font-size:13px;padding:5px 8px;background:#1b1819;
       border:1px solid var(--line);border-radius:5px;color:var(--txt);
       font-family:inherit;resize:none;overflow:hidden;min-height:0;
       min-width:80px;flex:1;}
.cp-loc{font-size:13px;padding:5px 8px;background:#1b1819;
       border:1px solid var(--line);border-radius:5px;color:var(--txt);
       font-family:inherit;resize:none;overflow:hidden;min-height:0;
       min-width:180px;max-width:300px;}
.cp-ro{font-size:13px;color:var(--txt);padding:5px 0;}
.cp-btn{font-size:13px;padding:6px 12px;white-space:nowrap;}
.cp-close{font-size:18px;font-weight:700;padding:4px 10px;line-height:1;
       text-decoration:none;}
.cp-copybtn{font-size:11px;padding:3px 8px;}
.cp-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 20px;
       margin-bottom:10px;}
.cp-divider{border:none;border-top:1px solid var(--line);margin:18px 0 14px;}
/* Sources toggle row */
.cp-sources-row{margin-bottom:14px;}
.cp-sources{display:flex;flex-wrap:wrap;gap:6px;}
.srcbtn{font-size:12px;font-weight:600;font-family:inherit;padding:6px 14px;
       border-radius:5px;border:1.5px solid var(--line);cursor:pointer;
       background:#555;color:#eee;text-transform:uppercase;letter-spacing:.3px;
       transition:background .15s,border-color .15s;}
.srcbtn:hover{background:#666;}
.srcbtn.on{background:#2e7d42;border-color:#3fae5a;color:#fff;}
/* Source Score */
.cp-score-wrap{display:flex;align-items:center;gap:6px;margin-left:auto;}
.cp-score{font-size:20px;font-weight:700;font-family:'Montserrat',Arial,sans-serif;
       color:var(--txt);min-width:28px;text-align:center;
       background:#1b1819;border:1.5px solid var(--line);border-radius:6px;
       padding:2px 8px;}
.score-info-btn,.remoteness-info-btn,.sdi-info-btn,.vars-info-btn,.concern-info-btn{background:none;border:none;color:var(--muted);font-size:16px;
       cursor:pointer;padding:0 2px;line-height:1;vertical-align:middle;}
.score-info-btn:hover,.remoteness-info-btn:hover,.sdi-info-btn:hover,.vars-info-btn:hover,.concern-info-btn:hover{color:var(--txt);}
/* Narrow dropdown for single-digit scoring fields */
.cp-narrow{width:54px;min-width:54px;text-align:center;padding-left:4px;padding-right:4px;}
/* Concern field: inline in the Scoring row, right-justified next to VARs.
   Styled the same as the Terrain/Remoteness fields (not oversized). */
.cp-concern-wrap{display:flex;align-items:center;gap:8px;}
.cp-concern-wrap .cp-lbl{font-family:'Montserrat',Arial,sans-serif;font-weight:700;}
/* VARs + Concern pushed right on the scoring metrics row */
.cp-scoring-right{display:flex;align-items:center;gap:16px;margin-left:auto;}
/* Unfilled field highlight -- subtle amber border for empty fields the
   analyst should fill. Applied by JS on page load and removed on save. */
.annot.unfilled{border-color:#b87a2a !important;border-width:3px !important;background:#231a0e !important;}
select.annot.unfilled{border-color:#b87a2a !important;border-width:3px !important;background:#231a0e !important;}
/* Saved FIST report link in the Files group */
.report-file{padding:8px 0 4px;}
.report-file a{color:#6cb4ee;font-size:13px;font-weight:600;text-decoration:none;}
.report-file a:hover{text-decoration:underline;}
/* Score info modal */
.score-info-overlay{position:fixed;top:0;left:0;right:0;bottom:0;
       background:rgba(0,0,0,.55);z-index:1000;display:flex;
       align-items:center;justify-content:center;}
.score-info-card{background:var(--bg);border:1.5px solid var(--line);
       border-radius:10px;padding:20px 28px;max-width:420px;width:90%;
       box-shadow:0 8px 32px rgba(0,0,0,.4);}
.score-info-card h3{margin:0 0 12px;font-family:'Montserrat',Arial,sans-serif;
       font-size:16px;color:var(--txt);}
.score-info-card table{width:100%;border-collapse:collapse;font-size:13px;}
.score-info-card td{padding:5px 8px;border-bottom:1px solid var(--line);}
.score-info-card td:first-child{font-weight:700;width:36px;text-align:center;}
.score-info-card .score-close{float:right;background:none;border:none;
       color:var(--muted);font-size:20px;cursor:pointer;line-height:1;}

/* --- images --- */
.attsec{margin-top:20px;border-top:1px solid var(--line);padding-top:14px;}
.attslots{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
       gap:12px;margin-top:9px;}
.attslot{border:1px dashed var(--line);border-radius:8px;padding:10px;
       display:flex;flex-direction:column;gap:8px;min-height:120px;}
.attslot.filled{border-style:solid;}
.attadd{display:flex;align-items:center;justify-content:center;flex:1;margin:0;
       cursor:pointer;color:var(--muted);font-size:12px;text-transform:none;
       letter-spacing:0;border-radius:6px;padding:18px 8px;}
.attadd:hover{background:#332e2f;color:var(--txt);}
.attthumb{max-width:100%;max-height:170px;border-radius:5px;cursor:zoom-in;
       align-self:flex-start;background:#141112;}
.attthumb.none{display:flex;align-items:center;justify-content:center;height:80px;
       width:100%;color:var(--muted);font-size:11px;border:1px solid var(--line);
       cursor:default;}
.attthumb.none.pending{color:#7fb2ff;border-color:#2b4a72;}
.attthumb.stack{display:block;max-height:170px;overflow:hidden;cursor:zoom-in;
       font-size:0;line-height:0;background:#141112;border-radius:5px;}
.attthumb.stack img{display:block;width:100%;}
.imgstack{max-height:calc(100vh - 150px);overflow:auto;font-size:0;line-height:0;}
.imgstack img{display:block;width:100%;}
.attinfo{color:var(--muted);font-size:10.5px;}
.fieldlink{display:inline-block;margin-top:5px;font-size:11.5px;color:#7fb2ff;
      overflow-wrap:anywhere;}
.fieldlink:hover{color:#fff;}
input.simtime{background:#1b1819;border:1px solid var(--line);border-radius:5px;
      color:var(--txt);padding:7px 8px;font-size:13px;font-family:inherit;
      width:100%;max-width:280px;color-scheme:dark;}
input.simtime:focus{outline:none;border-color:var(--red);}
input.simtime.saved{border-color:#3fae5a;}
input.simtime.failed{border-color:var(--red);}
.simzulu{margin-top:6px;font-family:ui-monospace,'Consolas',monospace;font-size:14px;
      font-weight:700;color:var(--amber);letter-spacing:.5px;}
.tzhint{display:block;margin-top:3px;color:var(--muted);font-size:10.5px;}
.btn.filename{flex:none;height:24px;padding:0 13px;font-size:11px;line-height:22px;}
.btn.filename:hover{background:var(--dred);border-color:var(--red);}
.attmeta{display:flex;flex-direction:column;gap:2px;font-size:11px;
       color:var(--muted);overflow-wrap:anywhere;}
.attmeta b{color:var(--txt);font-size:12px;}
.attnote{color:var(--amber);font-size:11px;line-height:1.45;}
.attbusy{color:var(--muted);font-size:12px;padding:22px 6px;text-align:center;}
.linkbtn{background:none;border:0;color:#7fb2ff;font:inherit;font-size:11px;
       padding:0;cursor:pointer;}
.linkbtn:hover{text-decoration:underline;}
/* GIS file list */
.gissec{margin-top:20px;border-top:1px solid var(--line);padding-top:14px;}
.gislist{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;}
.gisfile{display:flex;align-items:center;gap:10px;padding:6px 10px;
      border:1px solid var(--line);border-radius:6px;background:#1e1b1c;
      flex-wrap:wrap;}
.gisicon{font-size:18px;flex-shrink:0;}
.gisname{color:var(--txt);font-size:12px;font-weight:600;
      word-break:break-all;min-width:0;}
.gismeta{color:var(--muted);font-size:11px;white-space:nowrap;}
.gislinks{font-size:11px;margin-left:auto;white-space:nowrap;}
.gislinks a{color:#7fb2ff;text-decoration:none;}
.gislinks a:hover{text-decoration:underline;}
.gisadd{display:inline-flex;align-items:center;justify-content:center;
      padding:6px 14px;border:1px dashed var(--line);border-radius:6px;
      color:var(--muted);font-size:12px;cursor:pointer;transition:background .15s;}
.gisadd:hover{background:#332e2f;color:var(--txt);}
.gisbusy{color:var(--muted);font-size:12px;padding:6px;text-align:center;}
