:root{
  --navy:#16243b; --navy2:#1f3357; --blue:#2563c9; --blue-d:#1b4fa8;
  --ink:#1a2230; --mut:#6b7686; --line:#dde3ec; --bg:#f4f6fa; --card:#fff;
  --ok:#127a3e; --ok-bg:#e4f5ea; --warn:#9a6b00; --warn-bg:#fcf3da; --err:#b3261e; --err-bg:#fbe7e6;
  --rad:7px;
}
*{box-sizing:border-box}
body{margin:0;font:14px/1.45 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:var(--ink);background:var(--bg)}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3{margin:0 0 .5rem}
h1{font-size:1.35rem}h2{font-size:1.05rem}

/* top bar */
.topbar{display:flex;align-items:center;gap:1.2rem;background:var(--navy);color:#fff;padding:0 1rem;height:52px;position:sticky;top:0;z-index:20;box-shadow:0 1px 0 rgba(0,0,0,.15)}
.brand a{color:#fff;font-weight:800;letter-spacing:.5px;font-size:1.05rem}
.brand span{display:block;font-size:.6rem;font-weight:500;color:#9fb3d6;letter-spacing:1px;text-transform:uppercase;margin-top:-2px}
.mainnav{display:flex;gap:.15rem;flex:1;flex-wrap:wrap}
.mainnav a{color:#cdd8ea;padding:.45rem .7rem;border-radius:5px;font-weight:500;font-size:.86rem}
.mainnav a:hover{background:var(--navy2);text-decoration:none;color:#fff}
.mainnav a.on{background:var(--blue);color:#fff}
.userbox{display:flex;align-items:center;gap:.6rem;font-size:.8rem}
.userbox .uname{font-weight:600}
.userbox .urole{color:#9fb3d6;font-size:.72rem;border:1px solid #3a4d70;padding:.1rem .4rem;border-radius:20px}
.userbox .logout{color:#cdd8ea}

main.app{max-width:1280px;margin:0 auto;padding:1.1rem}
main.auth{min-height:100vh;display:grid;place-items:center;padding:1rem}
.foot{text-align:center;color:var(--mut);font-size:.75rem;padding:1.5rem}

/* flash */
.flash{padding:.6rem .9rem;border-radius:var(--rad);margin-bottom:1rem;border:1px solid}
.flash.ok{background:var(--ok-bg);color:var(--ok);border-color:#bfe6cd}
.flash.warn{background:var(--warn-bg);color:var(--warn);border-color:#f0e0a8}
.flash.err{background:var(--err-bg);color:var(--err);border-color:#f1c4c1}

/* cards */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--rad);box-shadow:0 1px 2px rgba(20,30,50,.04)}
.card .hd{padding:.7rem 1rem;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:.8rem;justify-content:space-between}
.card .hd h2{margin:0}
.card .bd{padding:1rem}
.grid{display:grid;gap:1rem}
.cols-2{grid-template-columns:1fr 1fr}
.cols-3{grid-template-columns:repeat(3,1fr)}
.cols-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:900px){.cols-2,.cols-3,.cols-4{grid-template-columns:1fr}}

/* page head */
.pagehd{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}
.pagehd .sub{color:var(--mut);font-size:.85rem}
.crumbs{font-size:.8rem;color:var(--mut);margin-bottom:.3rem}

/* stat tiles */
.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--rad);padding:.9rem 1rem}
.stat .k{color:var(--mut);font-size:.72rem;text-transform:uppercase;letter-spacing:.6px}
.stat .v{font-size:1.5rem;font-weight:700;margin-top:.2rem}
.stat .v small{font-size:.8rem;color:var(--mut);font-weight:500}

/* tables */
table.tbl{width:100%;border-collapse:collapse;font-size:.85rem;background:#fff}
table.tbl th,table.tbl td{padding:.42rem .6rem;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
table.tbl th{background:#eef2f8;color:#374;font-weight:700;position:sticky;top:0;z-index:2;font-size:.74rem;text-transform:uppercase;letter-spacing:.4px;box-shadow:inset 0 -1px 0 var(--line)}
table.tbl tbody tr:hover{background:#f7faff}
table.tbl td.num,table.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}
.tblwrap{overflow:auto;border:1px solid var(--line);border-radius:var(--rad);max-height:72vh}
/* sortable headers */
th.sortable-th{cursor:pointer;user-select:none;-webkit-user-select:none}
th.sortable-th:hover{background:#e2e9f4}
th .sarrow{color:var(--blue);font-size:.7rem}
.muted{color:var(--mut)}
.r{text-align:right}.c{text-align:center}

/* badges */
.badge{display:inline-block;padding:.1rem .45rem;border-radius:20px;font-size:.72rem;font-weight:600;border:1px solid}
.badge.green{background:var(--ok-bg);color:var(--ok);border-color:#bfe6cd}
.badge.gray{background:#eef1f6;color:#5a6675;border-color:#dde3ec}
.badge.amber{background:var(--warn-bg);color:var(--warn);border-color:#f0e0a8}
.badge.red{background:var(--err-bg);color:var(--err);border-color:#f1c4c1}

/* forms */
.field{margin-bottom:.7rem}
.field label{display:block;font-size:.74rem;color:var(--mut);text-transform:uppercase;letter-spacing:.4px;margin-bottom:.2rem}
.field input,.field select,.field textarea{width:100%;padding:.45rem .55rem;border:1px solid var(--line);border-radius:6px;font:inherit;background:#fff}
.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid #b9d0f5;border-color:var(--blue)}
.field input[readonly]{background:#f5f7fa;color:#667}
.formgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:0 1rem}
.formgrid.c3{grid-template-columns:repeat(3,1fr)}
@media(max-width:760px){.formgrid,.formgrid.c3{grid-template-columns:1fr}}
.checkrow{display:flex;align-items:center;gap:.4rem;margin:.3rem 0}
.checkrow input{width:auto}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem .9rem;border-radius:6px;border:1px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-weight:600;cursor:pointer;font-size:.85rem}
.btn:hover{background:#f3f6fb;text-decoration:none}
.btn.primary{background:var(--blue);border-color:var(--blue-d);color:#fff}
.btn.primary:hover{background:var(--blue-d)}
.btn.sm{padding:.3rem .6rem;font-size:.78rem}
.btn-busy{pointer-events:none;opacity:.9}
.ldbar{display:inline-block;width:64px;height:7px;background:#d9e2f0;border-radius:4px;overflow:hidden;vertical-align:middle}
.ldbar>span{display:block;width:40%;height:100%;background:var(--blue);border-radius:4px;animation:ldslide 1s ease-in-out infinite}
@keyframes ldslide{0%{margin-left:-42%}100%{margin-left:102%}}
.btn.danger{color:var(--err);border-color:#f1c4c1}
.btn.danger:hover{background:var(--err-bg)}
.toolbar{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.toolbar input[type=search]{padding:.45rem .6rem;border:1px solid var(--line);border-radius:6px;min-width:240px;font:inherit}

/* login */
.loginbox{width:360px;max-width:92vw;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 40px rgba(20,30,60,.12);overflow:hidden}
.loginbox .top{background:var(--navy);color:#fff;padding:1.4rem;text-align:center}
.loginbox .top b{font-size:1.2rem;letter-spacing:.5px}
.loginbox .top div{font-size:.7rem;color:#9fb3d6;text-transform:uppercase;letter-spacing:1.5px;margin-top:.2rem}
.loginbox form{padding:1.3rem}
.tabs{display:flex;gap:.3rem;border-bottom:1px solid var(--line);margin-bottom:1rem}
.tabs a{padding:.5rem .8rem;color:var(--mut);font-weight:600;border-bottom:2px solid transparent}
.tabs a.on{color:var(--blue);border-color:var(--blue)}
.kv{display:grid;grid-template-columns:130px 1fr;gap:.25rem .8rem;font-size:.86rem}
.kv dt{color:var(--mut)}.kv dd{margin:0}
.section-title{font-size:.75rem;text-transform:uppercase;letter-spacing:.6px;color:var(--blue);font-weight:700;margin:1.1rem 0 .5rem;border-bottom:1px solid var(--line);padding-bottom:.3rem}

/* route sheet — matches the office landscape loader sheet */
.rs-print-head{margin-bottom:.4rem}
.rs-loader{color:#1b3a8f;font-weight:700;font-size:1.7rem;font-style:italic;line-height:1;font-family:"Times New Roman","Liberation Serif",Georgia,serif}
/* serif body to match the original software's Times look */
table.rs-table,.rs-runhead,.rs-formfields{font-family:"Times New Roman","Liberation Serif",Georgia,serif}
.rs-dark{color:#c1121f;font-size:.85em}
table.rs-table td.mk{white-space:nowrap}   /* keep "GN ONYX-EMV" etc. on one line */
/* dark/error machines: the message takes the place of ONLY the Reject cell (one line, clipped to the column) */
table.rs-table td.rs-statusinline{text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:0;font-size:.9em;color:#000;font-weight:600}
table.rs-table td.mk,table.rs-table th.mkh,table.rs-table td.rt,table.rs-table th.rt{text-align:right}   /* Machine Make + Business Hours right-aligned */
table.rs-table .wl.filled i.rs-darkload{color:#c1121f;font-weight:700;font-style:italic}   /* "Dark" sits ON the Load write-in line for non-communicating machines */
table.rs-table input.wi.rs-darkwi::placeholder{color:#c1121f;font-weight:700;font-style:italic;opacity:1}   /* dark machines are still loadable: red "Dark" hint until a load is typed */
/* clip long text cells to one line (matches original truncation; stops orphan-fragment wraps) */
table.rs-table td.loc,table.rs-table td.lc{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:0}
.rs-formfields{border:0;font-size:.85rem;margin:.3rem 0}
.rs-formfields td{border:0;padding:.12rem .45rem;white-space:nowrap}
.rs-formfields td.ln{border-bottom:1px solid #000;min-width:130px}
.rs-formfields td.ln.sm{min-width:55px}
.rs-date{font-size:.78rem;font-weight:600;margin-top:.2rem}
/* editable write-in fields (loader fills Load / Time / New Balance) */
.wi{width:100%;box-sizing:border-box;border:0;border-bottom:1px solid #000;background:#fffbe6;font:inherit;font-size:.82rem;color:#000;padding:1px 3px;text-align:center}
.wi:focus{outline:2px solid #1f6feb;outline-offset:-1px;background:#fff}
.rs-loadtot,.rs-grandload{font-weight:700}
.rs-loadlbl{font-weight:600;color:#555}
/* Route-sheet table: fixed layout so all 13 columns fit the screen (no sideways scroll) */
table.rs-table{table-layout:fixed;width:100%}
table.rs-table th{text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal}
table.rs-table td{white-space:normal;word-break:normal;overflow-wrap:normal;vertical-align:top}
table.rs-table td.termid,table.rs-table td.num{white-space:nowrap}
table.rs-table th,table.rs-table td{padding:.45rem .4rem}                 /* roomier rows */
table.rs-table thead th{padding-bottom:.5rem}                             /* space under the header line */
table.rs-table thead .rs-hgap td{padding:0;border:0;height:.35rem;background:none}   /* thin header spacer (repeats each print page) */
table.rs-table tbody tr:first-child td{padding-top:.5rem}                 /* space below header line before first row */
table.rs-table td.lc{text-transform:lowercase}
/* mobile: fall back to horizontal scroll so columns aren't crushed */
@media(max-width:680px){
  table.rs-table{table-layout:auto}
  table.rs-table td{white-space:nowrap}
}
table.rs-table td.writein{border-left:0;background:none;min-width:0;text-align:center}
table.rs-table th.writein{background:#eef6ee;color:#2e7d32}
table.rs-table .wl{display:inline-block;width:88%;min-width:40px;border-bottom:1px solid #555;height:.85em}
/* a filled-in value rests ON TOP of the line (number above the underline, like handwriting) */
/* a filled-in value: the underline sits on the SAME baseline as the empty lines (height:0), and the number rests on top of it */
table.rs-table .wl.filled{position:relative;height:0;border-bottom:1px solid #000;vertical-align:baseline;padding:0}
table.rs-table .wl.filled i{position:absolute;left:0;right:0;bottom:1px;font-style:normal;font-size:.82rem;line-height:1;text-align:center;color:#000;white-space:nowrap}
.rs-section td{font-weight:800;letter-spacing:.5px;border-bottom:1px solid #333;background:#fff !important;padding-top:.45rem}
.rs-total td{color:#c1121f;font-weight:700;border-top:1px solid #333;border-bottom:0;padding-top:.3rem}
.rs-note td{font-size:.78rem;font-style:italic;color:#555;border-bottom:0;padding:0 .6rem .3rem}
.rs-star{color:#c1121f;font-weight:800}
.rs-grand{margin-top:1rem;border:2px solid #333}
.rs-grandtotal td{font-size:1.05em;border-top:2px solid #333;background:#f0f3f8;padding-top:.5rem;padding-bottom:.5rem}
@media print{ .rs-grand{break-before:auto;page-break-before:auto;border:0} .rs-grandtotal td{background:#eee !important} }
.rs-runhead{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin:.1rem 0 .5rem}
.rs-runhead .rs-loader{margin:0}
.rs-errline{font-size:.92em;padding-top:0 !important}
.rs-dark{background:#fbe7e6}.rs-err{background:#fcf3da}.rs-closed{background:#eef1f6}
@media print{
  @page{size:landscape;margin:.3in}   /* matches the server PDF (bin/print_pdf.js) so on-screen Print looks the same */
  html,body{background:#fff !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  main.app,.card,.card .bd,.tblwrap,table.rs-table{background:#fff !important}
  /* Unwrap the card/scroll containers so each route's table flows directly on the page —
     this is what lets the <thead> repeat on every printed page in Chrome. */
  .rs-route-page, .rs-route-page .bd, .rs-route-page .tblwrap{
    display:block !important;overflow:visible !important;max-height:none !important;
    border:0 !important;margin:0 !important;padding:0 !important;box-shadow:none !important;border-radius:0 !important}
  .rs-route-page{break-inside:auto;break-before:page;page-break-before:always}   /* each route starts a new page */
  .rs-runhead + .rs-route-page{break-before:auto;page-break-before:auto}         /* …except the first, which shares page 1 with the form fields */
  table.rs-table{table-layout:fixed;font-size:11px;width:100%}
  table.rs-table thead{display:table-header-group}             /* repeat header every page */
  table.rs-table tfoot{display:table-row-group}
  /* wrap only at spaces (never cut a letter), never clip; tall, well-spaced rows */
  table.rs-table th,table.rs-table td{padding:.5rem .25rem;white-space:normal;word-break:normal;overflow-wrap:normal;overflow:visible;vertical-align:top;line-height:1.3}
  table.rs-table thead th{padding-top:.2rem;padding-bottom:.2rem;border-bottom:1px solid #000}
  /* spacer row inside the repeating header → consistent gap under the header line on EVERY page (page-break-proof) */
  table.rs-table thead .rs-hgap td{padding:0 !important;border:0 !important;height:.5rem;background:none !important}
  table.rs-table .wl:not(.filled){height:0;vertical-align:baseline}   /* sit the blank write-in line on the data baseline so bottoms align across the row */
  /* today's date, bottom-left of every printed page */
  .rs-footer{position:fixed;bottom:0;left:0;font-size:8px;color:#000}
  table.rs-table td.termid,table.rs-table td.num{white-space:nowrap}
  table.rs-table td{border:0 !important}                       /* clean: no grid lines */
  table.rs-table thead th{background:none !important;color:#000;border-top:1px solid #000;border-bottom:1px solid #000;white-space:normal}   /* bracket the column header with a rule above & below, like the original */
  table.rs-table th.writein{color:#000}
  /* route sheet prints in black & white — no red/green */
  .rs-star,.rs-total td,.rs-grandtotal td,.rs-table th,.rs-table td,.rs-table a{color:#000 !important}
  .rs-loader{color:#1b3a8f !important}   /* keep the blue italic title in the printed/PDF sheet, like the original */
  table.rs-table tr{break-inside:avoid;page-break-inside:avoid}
  .rs-dark,.rs-err,.rs-closed{background:none !important}
  .rs-total td{border-top:1px solid #000}
}

/* route-sheet write-in columns (loader fills these by hand) */
table.tbl th.writein{background:#eef6ee;color:#3a5}
table.tbl td.writein{min-width:78px;border-left:1px dashed #c4ccd6;background:#fcfdfc}
@media print{
  table.tbl td.writein{border-left:1px solid #999;min-width:64px}
}

/* responsive split (e.g. Routes page) */
.split{display:grid;grid-template-columns:300px 1fr;gap:1rem}
.split-wide{display:grid;grid-template-columns:2.6fr 1fr;gap:1rem}
.split-wide>*{min-width:0}            /* let grid cells shrink so the fr ratio is honored */
@media(max-width:1000px){.split-wide{grid-template-columns:1fr}}

/* ---------------- mobile / responsive ---------------- */
.navtoggle{display:none;background:none;border:0;color:#fff;font-size:1.6rem;line-height:1;cursor:pointer;padding:.1rem .4rem}

@media(max-width:1040px){
  .mainnav a{padding:.4rem .5rem;font-size:.8rem}
}
@media(max-width:900px){
  .cols-4{grid-template-columns:1fr 1fr}
}
@media(max-width:860px){
  .navtoggle{display:block}
  .topbar{flex-wrap:wrap;height:auto;min-height:52px;padding:.45rem .7rem;gap:.5rem}
  .brand{flex:1;order:1}
  .navtoggle{order:0}
  .userbox{order:2}
  .mainnav{order:3;flex-basis:100%;display:none;flex-direction:column;gap:.1rem;
           background:var(--navy2);margin:.3rem -.7rem -.45rem;padding:.4rem .5rem}
  body.nav-open .mainnav{display:flex}
  .mainnav a{font-size:.95rem;padding:.6rem .6rem;border-radius:5px}
  .userbox .urole{display:none}
  main.app{padding:.7rem}
}
@media(max-width:680px){
  .cols-3{grid-template-columns:1fr 1fr}
  .pagehd h1{font-size:1.15rem}
  .pagehd .btn{font-size:.8rem;padding:.45rem .7rem}
  .toolbar{width:100%}
  .toolbar input[type=search],.toolbar > input,.toolbar > select{min-width:0 !important;flex:1 1 100%;width:100%}
  .card .hd{flex-wrap:wrap;gap:.5rem}
  .card .hd .toolbar,.card .hd form{width:100%}
  .split{grid-template-columns:1fr}
  table.tbl{font-size:.82rem}
  table.tbl th,table.tbl td{padding:.38rem .45rem}
  .formgrid,.formgrid.c3{grid-template-columns:1fr}
  .card .bd{overflow-x:auto}            /* any bare table scrolls inside its card, never the page */
  .crumbs{font-size:.75rem}
  /* dense per-row edit forms (Parts / Loaders / Colby setup) stack their fields instead of crushing them */
  table.tbl td > form.toolbar{flex-wrap:wrap !important;gap:.4rem !important}
  table.tbl td > form.toolbar > input,table.tbl td > form.toolbar > select{flex:1 1 100% !important;min-width:0 !important;width:100%}
  table.tbl td > form.toolbar > .btn,table.tbl td > form.toolbar > label{flex:0 0 auto !important;width:auto}
}
html,body{max-width:100%;overflow-x:hidden}
@media(max-width:440px){
  .cols-4,.cols-3{grid-template-columns:1fr 1fr}
  .stat .v{font-size:1.25rem}
  .brand a{font-size:.95rem}
  .userbox .uname{max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}

/* print (route sheets etc.) */
.print-only{display:none}
@media print{
  .topbar,.foot,.no-print,.pagehd .toolbar,.print-hide{display:none !important}
  main.app{max-width:none;padding:0;margin:0}
  .print-only{display:block}
  .rs-runhead.print-only{display:flex}            /* keep loader-name left + form-fields right on one row */
  .rs-formfields{margin:0}
  /* write-in inputs print as a plain underline sitting on the data baseline (bottoms align across the row) */
  .wi{background:transparent !important;border:0 !important;border-bottom:1px solid #000 !important;height:1em;padding:0;line-height:1.3;vertical-align:top;box-sizing:content-box}
  .card{border:1px solid #999;box-shadow:none;border-radius:0;margin-bottom:.4rem}
  .card .hd{padding:.3rem .5rem;background:#eee !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .rs-route{page-break-inside:auto}
  /* general tables only — the route sheet (.rs-table) has its own print rules above */
  table.tbl:not(.rs-table){font-size:10px}
  table.tbl:not(.rs-table) th{position:static;background:#ddd !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  table.tbl:not(.rs-table) th,table.tbl:not(.rs-table) td{padding:.18rem .3rem;white-space:normal}
  .tblwrap{overflow:visible;border:0;max-height:none}
  .badge{border:1px solid #999}
  a{color:#000;text-decoration:none}
  tr{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* ---- Custom Report Builder ---- */
.rb-h{display:block;font-weight:700;font-size:.82rem;text-transform:uppercase;letter-spacing:.03em;color:#3a4a63;margin-bottom:.45rem}
.rb-inline{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.rb-form select,.rb-form input[type=number],.rb-form input[type=text],.rb-frow select,.rb-frow input{padding:.4rem .5rem;border:1px solid var(--line);border-radius:6px;background:#fff;font:inherit}
.rb-cols2{display:grid;grid-template-columns:1fr 1fr;gap:1.1rem}
.rb-chips{display:flex;flex-wrap:wrap;gap:.4rem}
.rb-chip{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .55rem;border:1px solid var(--line);border-radius:999px;background:#fafbfd;font-size:.85rem;cursor:pointer;user-select:none}
.rb-chip:hover{background:#eef3fb}
.rb-chip input{margin:0}
.rb-chip:has(input:checked){background:#e6f0ff;border-color:#9cbff8;color:#103a7a;font-weight:600}
.rb-chip.alt:has(input:checked){background:#eafaf0;border-color:#8fd6a8;color:#155f37}
.rb-frow{margin-bottom:.45rem}
.rb-frow .fv{width:9rem}
.rb-saved{display:inline-flex;align-items:center;gap:.15rem;border:1px solid var(--line);border-radius:6px;padding:.05rem .1rem .05rem 0;background:#fff}
.rb-saved .btn.sm{border:0;background:transparent}
.lk-x{border:0;background:transparent;color:#b13b3b;font-size:1.1rem;line-height:1;cursor:pointer;padding:0 .35rem}
.lk-x:hover{color:#7a1f1f}
@media (max-width:680px){
  .rb-cols2{grid-template-columns:1fr}
  .rb-frow{flex-wrap:wrap}
  .rb-frow .fv,.rb-frow .ff,.rb-frow .fo{flex:1 1 100%;width:100%}
}
@media print{ .rb-form,.rb-saved,#rbFilters,.no-print{display:none !important} }

/* ---- Compact report tables (fit wide reports on screen, no horizontal scroll) ---- */
.tbl.compact{font-size:.78rem;width:100%;table-layout:fixed}
.tbl.compact th,.tbl.compact td{padding:.3rem .4rem;line-height:1.2;overflow:hidden;text-overflow:ellipsis}
.tbl.compact th{white-space:normal;vertical-align:bottom}
.tbl.compact td.num,.tbl.compact th.num{white-space:nowrap}
.tbl.compact td:not(.num){white-space:nowrap;text-overflow:ellipsis}
.tbl.compact td.locw{white-space:normal;text-overflow:clip;overflow:visible}   /* let location names wrap & show fully */
.tblwrap.fit{overflow-x:hidden}
@media (max-width:760px){ .tbl.compact{font-size:.7rem} .tbl.compact th,.tbl.compact td{padding:.2rem .25rem} }

/* ABSI true-up section summary cards */
.absi-cards{display:grid;grid-template-columns:repeat(5,1fr);gap:.75rem;margin:1rem 0}
.absi-card.combine{background:#f0fbf4;border-color:#93d6ab}
.absi-card.combine .ttl{border-bottom-color:#93d6ab}
.absi-card.combine.active{border-color:#1e9e5a;box-shadow:0 0 0 1px #1e9e5a inset}
.absi-card .kv.calc span{color:#2b6cb0}
.absi-card.combine .kv.calc span{color:#1e7a45}
.absi-card{display:block;border:1px solid var(--line);border-radius:8px;padding:.7rem .8rem;background:#fff;text-decoration:none;color:inherit;transition:box-shadow .12s,border-color .12s}
.absi-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.1);border-color:#9cbff8}
.absi-card.active{border-color:#2b6cb0;background:#f4f8ff;box-shadow:0 0 0 1px #2b6cb0 inset}
.absi-card .ttl{font-size:1rem;margin-bottom:.4rem;border-bottom:1px solid var(--line);padding-bottom:.3rem}
.absi-card .ttl .muted{font-size:.72rem;font-weight:400}
.absi-card .kv{display:flex;justify-content:space-between;font-size:.8rem;padding:.12rem 0}
.absi-card .kv span{color:#667}
.absi-card .open{margin-top:.45rem;font-size:.78rem;color:#2b6cb0;font-weight:600;text-align:right}
.absi-card.active .open{visibility:hidden}
@media (max-width:1100px){ .absi-cards{grid-template-columns:repeat(3,1fr)} }
@media (max-width:720px){ .absi-cards{grid-template-columns:repeat(2,1fr)} }
@media (max-width:480px){ .absi-cards{grid-template-columns:1fr} }
