:root{
  --surface:#fcfcfb; --plane:#f4f3f0; --ink:#0b0b0b; --ink2:#52514e; --muted:#898781;
  --rule:#e1e0d9; --head:#1f3a5f; --blue:#2a78d6; --orange:#eb6834;
  --crit:#d03b3b; --good:#0ca30c;
  --font:system-ui,-apple-system,"Segoe UI",sans-serif;
}
*{box-sizing:border-box}
body{margin:0;font-family:var(--font);font-size:14px;color:var(--ink2);background:var(--plane)}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}

.top{display:flex;align-items:center;justify-content:space-between;gap:16px;
  background:var(--head);color:#fff;padding:10px 18px}
.brand{color:#fff;font-weight:700;font-size:15px}
.brand:hover{text-decoration:none}
.top-nav a{color:#cfe0f5;margin-left:18px;font-size:13px}
.top-nav a.on{color:#fff;font-weight:600}

.shell{display:flex;min-height:calc(100vh - 84px);align-items:stretch}
.side{width:210px;flex:0 0 210px;background:var(--surface);border-right:1px solid var(--rule);padding:10px 0}
.side a{display:block;padding:5px 16px;color:var(--ink2);font-size:13px}
.side a.on{background:#eef4fc;color:var(--blue);font-weight:600;
  box-shadow:inset 3px 0 0 var(--blue)}
.side-home{font-weight:600}
.side-group{padding:12px 16px 4px;font-size:10.5px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted)}
.main{flex:1;padding:18px 22px;min-width:0;background:var(--surface)}

h1{font-size:19px;color:var(--ink);margin:0 0 4px}
h2{font-size:14.5px;color:var(--ink);margin:22px 0 8px}
.sub{color:var(--muted);font-size:12.5px;margin:0 0 16px}

.tiles{display:flex;flex-wrap:wrap;gap:1px;background:var(--rule);
  border:1px solid var(--rule);margin:0 0 18px}
.tile{flex:1 1 150px;background:var(--plane);padding:9px 12px}
.tile .k{font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.tile .v{font-size:19px;font-weight:700;color:var(--ink);margin-top:2px}
.tile .v.crit{color:var(--crit)}
.tile .v.blue{color:var(--blue)}
.tile .v.orange{color:var(--orange)}

table{border-collapse:collapse;width:100%;font-size:12.5px}
th{background:var(--head);color:#fff;text-align:left;padding:5px 8px;font-weight:600;
  font-size:11px;letter-spacing:.03em;white-space:nowrap}
td{padding:4px 8px;border-bottom:1px solid var(--rule);vertical-align:top}
tr:hover td{background:#f7f9fc}
td.n,th.n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
th a.sort{color:#cfe0f5;text-decoration:none;white-space:nowrap}
th a.sort:hover{color:#fff;text-decoration:none}
th a.sort.on{color:#fff}
td.crit{color:var(--crit);font-weight:600}
td.mut{color:var(--muted)}
/* Subtotal band — the VAT base, ruled off from the lines it is charged on. */
tr.sum td{background:#eef4fc;border-top:1px solid var(--head);border-bottom:1px solid var(--head);
  color:var(--head);font-weight:700}
tr.sum td.mut{color:var(--ink2);font-weight:400}
tr.sum:hover td{background:#eef4fc}
.del td{background:#fdf3f3;color:var(--muted)}
.wrap{overflow-x:auto}

.bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:0 0 12px}
input[type=search],input[type=text]{padding:5px 9px;border:1px solid var(--rule);
  border-radius:3px;font:inherit;font-size:13px;min-width:240px;background:#fff}
button{padding:5px 13px;border:1px solid var(--head);background:var(--head);color:#fff;
  border-radius:3px;font:inherit;font-size:13px;cursor:pointer}
button.ghost{background:#fff;color:var(--ink2);border-color:var(--rule)}
.count{color:var(--muted);font-size:12.5px}
.count.crit{color:var(--crit);font-weight:600}

.pager{display:flex;gap:6px;align-items:center;margin:12px 0;font-size:12.5px}
.pager a,.pager span{padding:3px 9px;border:1px solid var(--rule);border-radius:3px;background:#fff}
.pager span.cur{background:var(--head);color:#fff;border-color:var(--head)}

.kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:9px 18px;
  margin:0 0 16px;padding:11px 13px;background:var(--plane);border:1px solid var(--rule)}
.kv div span{display:block;font-size:10.5px;color:var(--muted);text-transform:uppercase;
  letter-spacing:.04em}
.kv div b{font-size:13.5px;color:var(--ink);font-weight:600}

.pill{display:inline-block;padding:1px 7px;border-radius:9px;font-size:11px;font-weight:600}
.pill.ok{background:#e6f6e6;color:#0a7a0a}
.pill.no{background:#fbe9e9;color:var(--crit)}
.pill.mut{background:#eee;color:var(--muted)}
/* Which system a row came from, on the lists that cover both. */
.pill.sea{background:#eef4fc;color:var(--head)}
.pill.air{background:#fdf0e6;color:#a2481c}

.note{background:var(--plane);border-left:3px solid var(--blue);padding:9px 12px;
  font-size:12.5px;margin:0 0 16px}
.note.warn{border-left-color:var(--crit)}

.foot{padding:10px 18px;color:var(--muted);font-size:11.5px;border-top:1px solid var(--rule);
  background:var(--surface)}
/* ---- data entry ---- */
.fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px 18px;
  padding:14px;background:var(--plane);border:1px solid var(--rule)}
.field label{display:block;font-size:11px;color:var(--muted);text-transform:uppercase;
  letter-spacing:.04em;margin-bottom:3px}
.field input,.field select{width:100%;padding:5px 8px;border:1px solid var(--rule);
  border-radius:3px;font:inherit;font-size:13px;background:#fff;min-width:0}
.field input.n{text-align:right;font-variant-numeric:tabular-nums}
.field.bad input{border-color:var(--crit);background:#fdf6f6}
.field .err{display:block;color:var(--crit);font-size:11.5px;font-style:normal;margin-top:3px}
.field .hint{display:block;color:var(--muted);font-size:11px;font-style:normal;margin-top:3px}
.req{color:var(--crit)}
select{padding:5px 9px;border:1px solid var(--rule);border-radius:3px;font:inherit;
  font-size:13px;background:#fff}
label{font-size:12.5px;color:var(--ink2)}
.bar label input[type=date]{margin-left:5px}
a.btn{display:inline-block;padding:5px 13px;background:var(--head);color:#fff;border-radius:3px;
  font-size:13px}
a.btn:hover{text-decoration:none;opacity:.9}
td.acts a{margin-right:9px}
.who{color:#9fbde0;margin-left:18px;font-size:12px}
a.who:hover{color:#fff;text-decoration:underline}
a.who.on{color:#fff;font-weight:600}
.flash{padding:8px 12px;border-radius:3px;font-size:13px;margin:0 0 14px;
  background:#e8f4e8;border-left:3px solid var(--good);color:#0a5d0a}
.flash.warn{background:#fbeaea;border-left-color:var(--crit);color:#8d1f1f}
.login{max-width:380px;margin:40px auto}
.login .field{margin-bottom:10px}
.main.solo{background:var(--surface);min-height:calc(100vh - 84px)}
table input[type=checkbox]{margin:0}

@media print{
  .top,.side,.foot,.bar,.pager,.flash,.note{display:none !important}
  body{background:#fff}
  .shell{display:block}
  .main{padding:0;background:#fff}
  table{font-size:11px}
  th{background:#1f3a5f !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  tr.sum td{background:#eef4fc !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  h1{font-size:16px}
  a{color:#000;text-decoration:none}
}

.cols{display:flex;gap:22px;flex-wrap:wrap}
.cols>div{flex:1 1 340px;min-width:0}
.spark{display:flex;align-items:flex-end;gap:2px;height:44px;margin-top:6px}
.spark i{flex:1;background:var(--blue);min-height:1px;border-radius:1px 1px 0 0}
