/* ================================================================
   PayCore ERP — Payroll & Employee Management
   Design system: institutional ledger. Public Sans + IBM Plex Mono,
   Newsreader for printed bill documents.
   ================================================================ */

:root{
  --bg:#eceff4;
  --paper:#ffffff;
  --paper-2:#f7f9fb;
  --paper-3:#eff2f7;
  --line:#d5dbe4;
  --line-2:#e5e9f0;
  --ink:#101620;
  --ink-2:#48546a;
  --ink-3:#78859a;
  --accent:#1b3a6b;
  --accent-2:#2b5fae;
  --accent-soft:#e6ecf7;
  --seal:#9c2b2b;
  --ok:#1a6b3c;
  --ok-soft:#e2f2e8;
  --warn:#93590a;
  --warn-soft:#fbf0dc;
  --dang:#a32020;
  --dang-soft:#fbe6e6;
  --info:#1d4ed8;
  --info-soft:#e6ecfd;
  --shadow:0 1px 2px rgba(16,22,32,.06),0 8px 24px -18px rgba(16,22,32,.35);
  --r:6px;
  --side:238px;
  --top:52px;
  --ff:"Public Sans","Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --fm:"IBM Plex Mono","SFMono-Regular",Consolas,monospace;
  --fd:"Newsreader",Georgia,"Times New Roman",serif;
}
[data-theme="dark"]{
  --bg:#0d1117;
  --paper:#141a22;
  --paper-2:#181f28;
  --paper-3:#1d2530;
  --line:#28313d;
  --line-2:#222a35;
  --ink:#e4e9f0;
  --ink-2:#a3aec0;
  --ink-3:#78859a;
  --accent:#8fb3ff;
  --accent-2:#a9c5ff;
  --accent-soft:#1a2436;
  --seal:#e08585;
  --ok:#5fc98a;
  --ok-soft:#12291d;
  --warn:#e0ac5c;
  --warn-soft:#2b2113;
  --dang:#f28b8b;
  --dang-soft:#2d1618;
  --info:#8fb3ff;
  --info-soft:#151f33;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 10px 30px -20px rgba(0,0,0,.8);
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg);color:var(--ink);
  font-family:var(--ff);font-size:13px;line-height:1.45;
  -webkit-font-smoothing:antialiased;
}
a{color:var(--accent-2);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.01em}
p{margin:0 0 8px}
:focus-visible{outline:2px solid var(--accent-2);outline-offset:2px;border-radius:3px}
::selection{background:var(--accent-soft);color:var(--ink)}

/* ---------------- shell ---------------- */
.app{display:grid;grid-template-columns:var(--side) minmax(0,1fr);min-height:100vh}

.side{
  background:var(--paper);border-right:1px solid var(--line);
  position:sticky;top:0;height:100vh;overflow-y:auto;z-index:40;
  scrollbar-width:thin;
}
.side::-webkit-scrollbar{width:7px}
.side::-webkit-scrollbar-thumb{background:var(--line);border-radius:4px}
.brand{
  display:flex;gap:9px;align-items:center;padding:11px 14px;
  border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--paper);z-index:2;
  height:var(--top);
}
.brand .mark{
  width:26px;height:26px;flex:none;border-radius:5px;background:var(--accent);
  color:#fff;display:grid;place-items:center;font-family:var(--fm);
  font-size:12px;font-weight:600;letter-spacing:-.5px;
}
[data-theme="dark"] .brand .mark{background:var(--accent);color:#0d1117}
.brand b{font-size:13.5px;letter-spacing:-.02em;display:block;line-height:1.1}
.brand small{font-size:9.5px;color:var(--ink-3);letter-spacing:.09em;text-transform:uppercase}

.navgroup{padding:9px 0 2px}
.navgroup + .navgroup{border-top:1px solid var(--line-2)}
.navgroup > h6{
  margin:0;padding:2px 15px 5px;font-size:9.5px;font-weight:650;
  letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3);
}
.side a.nav{
  display:flex;align-items:center;gap:9px;padding:5px 15px 5px 13px;
  color:var(--ink-2);font-size:12.5px;border-left:2px solid transparent;
}
.side a.nav:hover{background:var(--paper-3);color:var(--ink);text-decoration:none}
.side a.nav.on{background:var(--accent-soft);color:var(--accent-2);border-left-color:var(--accent-2);font-weight:600}
.side a.nav svg,.side a.nav i{width:16px;height:16px;min-width:16px;flex:0 0 16px;opacity:.75;display:block}
.iconbtn svg{width:16px;height:16px;flex:none;display:block}
.who svg{width:14px;height:14px;flex:none}
.side a.nav .tag{
  margin-left:auto;font-family:var(--fm);font-size:9.5px;padding:0 4px;border-radius:3px;
  background:var(--dang-soft);color:var(--dang);
}
.sidefoot{padding:10px 15px 18px;color:var(--ink-3);font-size:10.5px;border-top:1px solid var(--line-2);margin-top:6px}

.top{
  position:sticky;top:0;z-index:35;height:var(--top);
  background:color-mix(in srgb,var(--paper) 88%,transparent);
  backdrop-filter:saturate(1.4) blur(8px);
  border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:12px;padding:0 16px;
}
.crumb{font-size:11.5px;color:var(--ink-3);display:flex;gap:6px;align-items:center;white-space:nowrap}
.crumb b{color:var(--ink-2);font-weight:600}
.top .spacer{flex:1}
.searchbox{position:relative;width:250px;max-width:32vw}
.searchbox input{
  width:100%;height:30px;border:1px solid var(--line);border-radius:var(--r);
  background:var(--paper-2);padding:0 10px 0 28px;font:inherit;font-size:12px;color:var(--ink);
}
.searchbox svg{position:absolute;left:8px;top:8px;width:14px;height:14px;color:var(--ink-3)}
.period{
  display:flex;align-items:center;gap:6px;height:30px;padding:0 9px;border:1px solid var(--line);
  border-radius:var(--r);background:var(--paper-2);font-family:var(--fm);font-size:11.5px;color:var(--ink-2);
}
.period b{color:var(--ink);font-weight:600}
.iconbtn{
  width:30px;height:30px;display:grid;place-items:center;border:1px solid var(--line);
  border-radius:var(--r);background:var(--paper-2);color:var(--ink-2);cursor:pointer;position:relative;
}
.iconbtn:hover{background:var(--paper-3);color:var(--ink)}
.iconbtn .dot{position:absolute;top:4px;right:4px;width:6px;height:6px;border-radius:50%;background:var(--dang)}
.who{display:flex;align-items:center;gap:8px;padding-left:12px;border-left:1px solid var(--line)}
.who .av{
  width:27px;height:27px;border-radius:50%;background:var(--accent);color:#fff;
  display:grid;place-items:center;font-size:10.5px;font-weight:650;letter-spacing:.02em;
}
[data-theme="dark"] .who .av{background:var(--accent-soft);color:var(--accent)}
.who .nm{line-height:1.15}
.who .nm b{display:block;font-size:12px}
.who .nm span{font-size:10px;color:var(--ink-3)}

.main{min-width:0;display:flex;flex-direction:column}
.wrap{padding:16px 20px 40px;max-width:1560px;width:100%}

/* ---------------- page head ---------------- */
.phead{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:14px}
.phead .eyebrow{
  font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);
  font-weight:650;margin-bottom:3px;display:block;
}
.phead h1{font-size:21px;letter-spacing:-.025em}
.phead .sub{color:var(--ink-2);font-size:12.5px;margin-top:3px;max-width:78ch}
.phead .acts{margin-left:auto;display:flex;gap:7px;flex-wrap:wrap}

/* ---------------- buttons ---------------- */
.btn{
  display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 11px;
  border:1px solid var(--line);border-radius:var(--r);background:var(--paper);
  color:var(--ink);font:inherit;font-size:12px;font-weight:550;cursor:pointer;white-space:nowrap;
}
.btn:hover{background:var(--paper-3);text-decoration:none}
.btn svg{width:14px;height:14px}
.btn.pri{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.pri:hover{background:var(--accent-2);border-color:var(--accent-2)}
[data-theme="dark"] .btn.pri{color:#0d1117}
.btn.dang{color:var(--dang);border-color:color-mix(in srgb,var(--dang) 35%,var(--line))}
.btn.ghost{background:transparent}
.btn.sm{height:25px;padding:0 8px;font-size:11.5px}
.btn:disabled{opacity:.45;cursor:not-allowed}

/* ---------------- cards / grids ---------------- */
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.card + .card{margin-top:14px}
.card > header{
  display:flex;align-items:center;gap:10px;padding:9px 13px;border-bottom:1px solid var(--line-2);
}
.card > header .ttl{display:flex;flex-direction:column;gap:0;min-width:0}
.card > header h3{font-size:13px;letter-spacing:-.01em}
.card > header .eyebrow{
  font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);font-weight:650;
}
.card > header .acts{margin-left:auto;display:flex;gap:6px;align-items:center}
.card .body{padding:13px}
.card .body.flush{padding:0}
.card > footer{
  padding:8px 13px;border-top:1px solid var(--line-2);color:var(--ink-3);font-size:11.5px;
  display:flex;align-items:center;gap:10px;
}
.grid{display:grid;gap:14px;align-items:start}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.g21{grid-template-columns:2fr minmax(0,1fr)}
.g12{grid-template-columns:minmax(0,1fr) 2fr}
.g31{grid-template-columns:3fr minmax(0,1fr)}
.mt{margin-top:14px}

/* ---------------- KPI strip ---------------- */
.kpis{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border:1px solid var(--line);border-radius:var(--r);background:var(--paper);
  overflow:hidden;box-shadow:var(--shadow);
}
.kpi{padding:10px 13px;border-right:1px solid var(--line-2);min-width:0}
.kpi:last-child{border-right:0}
.kpi .l{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);font-weight:650}
.kpi .v{font-family:var(--fm);font-size:19px;font-weight:600;letter-spacing:-.03em;margin-top:3px;font-variant-numeric:tabular-nums}
.kpi .m{font-size:11px;color:var(--ink-3);margin-top:2px;display:flex;gap:5px;align-items:center}
.kpi .m .up{color:var(--ok);font-weight:600}
.kpi .m .dn{color:var(--dang);font-weight:600}

/* ---------------- ledger table ---------------- */
.tablewrap{overflow:auto;max-width:100%}
table.led{width:100%;border-collapse:collapse;font-size:12px}
table.led th,table.led td{padding:6px 10px;text-align:left;border-bottom:1px solid var(--line-2);vertical-align:middle}
table.led thead th{
  position:sticky;top:0;z-index:2;background:var(--paper-3);
  font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);font-weight:650;
  border-bottom:1px solid var(--line);white-space:nowrap;
}
table.led tbody tr:hover{background:var(--paper-2)}
table.led tbody tr:last-child td{border-bottom:0}
table.led td.num,table.led th.num{text-align:right;font-family:var(--fm);font-variant-numeric:tabular-nums;white-space:nowrap}
table.led th.num{text-align:right}
table.led td.id{font-family:var(--fm);font-size:11.5px;color:var(--ink-2);white-space:nowrap}
table.led td.nm b{font-weight:600}
table.led td.nm span{display:block;color:var(--ink-3);font-size:10.5px}
table.led tfoot td{
  background:var(--paper-3);font-weight:650;border-top:1px solid var(--line);
  font-family:var(--fm);font-variant-numeric:tabular-nums;
}
table.led tfoot td:first-child{font-family:var(--ff);letter-spacing:.04em;text-transform:uppercase;font-size:10px}
table.led.tight td,table.led.tight th{padding:4px 9px}
table.led .rule{color:var(--ink-3);font-family:var(--fm);font-size:10.5px;width:34px;text-align:right}
.tsub{color:var(--ink-3);font-size:11px}

/* ---------------- badges / chips ---------------- */
.b{
  display:inline-flex;align-items:center;gap:4px;height:18px;padding:0 6px;border-radius:3px;
  font-size:10.5px;font-weight:600;letter-spacing:.02em;white-space:nowrap;
  background:var(--paper-3);color:var(--ink-2);border:1px solid var(--line-2);
}
.b.ok{background:var(--ok-soft);color:var(--ok);border-color:color-mix(in srgb,var(--ok) 22%,transparent)}
.b.wn{background:var(--warn-soft);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 22%,transparent)}
.b.dg{background:var(--dang-soft);color:var(--dang);border-color:color-mix(in srgb,var(--dang) 22%,transparent)}
.b.in{background:var(--info-soft);color:var(--info);border-color:color-mix(in srgb,var(--info) 22%,transparent)}
.b.dot::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}

/* ---------------- toolbar / filters ---------------- */
.tools{
  display:flex;gap:7px;align-items:center;flex-wrap:wrap;padding:9px 13px;
  border-bottom:1px solid var(--line-2);background:var(--paper-2);
}
.tools .grow{flex:1}
.inp,select.inp,textarea.inp{
  height:29px;border:1px solid var(--line);border-radius:var(--r);background:var(--paper);
  padding:0 9px;font:inherit;font-size:12px;color:var(--ink);min-width:0;
}
textarea.inp{height:auto;padding:7px 9px;resize:vertical}
select.inp{padding-right:22px;appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);
  background-position:calc(100% - 13px) 12px,calc(100% - 9px) 12px;background-size:4px 4px;background-repeat:no-repeat}
.inp:focus{border-color:var(--accent-2)}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--paper)}
.seg button{
  border:0;background:transparent;font:inherit;font-size:11.5px;padding:0 10px;height:29px;cursor:pointer;
  color:var(--ink-2);border-right:1px solid var(--line-2);
}
.seg button:last-child{border-right:0}
.seg button.on{background:var(--accent-soft);color:var(--accent-2);font-weight:600}

/* ---------------- tabs ---------------- */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 13px;background:var(--paper-2);overflow-x:auto}
.tabs button{
  border:0;background:transparent;font:inherit;font-size:12px;font-weight:550;color:var(--ink-2);
  padding:9px 11px;cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;
}
.tabs button.on{color:var(--accent-2);border-bottom-color:var(--accent-2)}
.tabpane{display:none}
.tabpane > .card{border:0;box-shadow:none;border-radius:0}
.tabpane > .card > header{padding-top:11px}
.tabpane.on{display:block}

/* ---------------- forms ---------------- */
.fgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px 13px}
.fgrid.c3{grid-template-columns:repeat(3,minmax(0,1fr))}
.fgrid.c2{grid-template-columns:repeat(2,minmax(0,1fr))}
.f{display:flex;flex-direction:column;gap:4px;min-width:0}
.f.span2{grid-column:span 2}
.f.span3{grid-column:span 3}
.f.span4{grid-column:span 4}
.f label{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);font-weight:650}
.f .hint{font-size:10.5px;color:var(--ink-3)}
.f .req{color:var(--seal)}
.fsec{
  font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3);font-weight:650;
  border-bottom:1px solid var(--line-2);padding-bottom:5px;margin:4px 0 0;grid-column:1/-1;
}
.check{display:flex;gap:7px;align-items:flex-start;font-size:12px;color:var(--ink-2)}
.check input{margin-top:2px;accent-color:var(--accent-2)}

/* ---------------- definition list ---------------- */
.dl{display:grid;grid-template-columns:auto 1fr;gap:5px 14px;font-size:12px;align-items:baseline}
.dl dt{color:var(--ink-3);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:650}
.dl dd{margin:0;font-weight:550}
.dl dd.mono{font-family:var(--fm);font-size:11.5px}

/* ---------------- stat rows / bars ---------------- */
.rows{display:flex;flex-direction:column}
.row{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--line-2)}
.row:last-child{border-bottom:0}
.row .k{flex:1;min-width:0;font-size:12px}
.row .k span{display:block;color:var(--ink-3);font-size:10.5px}
.row .v{font-family:var(--fm);font-size:12.5px;font-variant-numeric:tabular-nums;font-weight:600;
  display:flex;align-items:center;gap:6px;justify-content:flex-end}
.row .v .btn,.row .v .b{font-family:var(--ff);font-variant-numeric:normal}
.bar{height:5px;border-radius:3px;background:var(--paper-3);overflow:hidden;width:120px;flex:none}
.bar i{display:block;height:100%;background:var(--accent-2);border-radius:3px}
.bar.ok i{background:var(--ok)}.bar.wn i{background:var(--warn)}.bar.dg i{background:var(--dang)}

/* ---------------- signature: bill stamp ---------------- */
.stamp{
  display:inline-block;transform:rotate(-7deg);border:2px solid var(--seal);color:var(--seal);
  padding:4px 10px 3px;border-radius:3px;font-family:var(--fm);font-size:12px;font-weight:600;
  letter-spacing:.16em;text-transform:uppercase;opacity:.85;
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--seal) 30%,transparent);
}
.stamp.ok{border-color:var(--ok);color:var(--ok);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ok) 30%,transparent)}
.stamp.gr{border-color:var(--ink-3);color:var(--ink-3);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink-3) 30%,transparent)}
.stamp small{display:block;font-size:8.5px;letter-spacing:.1em;opacity:.85;text-align:center;margin-top:1px}

/* ---------------- workflow steps ---------------- */
.steps{display:flex;flex-wrap:wrap;gap:0;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--paper)}
.step{flex:1 1 130px;padding:9px 12px;border-right:1px solid var(--line-2);position:relative;min-width:0}
.step:last-child{border-right:0}
.step .n{font-family:var(--fm);font-size:10px;color:var(--ink-3)}
.step .t{font-size:12px;font-weight:600;margin-top:1px}
.step .s{font-size:10.5px;color:var(--ink-3);margin-top:2px}
.step.done{background:var(--ok-soft)}
.step.done .t{color:var(--ok)}
.step.now{background:var(--accent-soft)}
.step.now .t{color:var(--accent-2)}
.step.now::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--accent-2)}

/* ---------------- flow (rules engine) ---------------- */
.flow{display:flex;flex-direction:column;gap:0}
.flow .node{
  border:1px solid var(--line);border-radius:var(--r);padding:8px 11px;background:var(--paper-2);
  display:flex;align-items:center;gap:10px;
}
.flow .node b{font-size:12px}
.flow .node .op{margin-left:auto;font-family:var(--fm);font-size:11px;color:var(--ink-2)}
.flow .arrow{height:14px;width:1px;background:var(--line);margin:0 auto;position:relative}
.flow .arrow::after{content:"";position:absolute;bottom:0;left:-3px;border:3px solid transparent;border-top-color:var(--line)}

/* ---------------- timeline / audit ---------------- */
.tl{position:relative;padding-left:16px}
.tl::before{content:"";position:absolute;left:4px;top:5px;bottom:5px;width:1px;background:var(--line)}
.tl .ev{position:relative;padding:0 0 12px}
.tl .ev::before{content:"";position:absolute;left:-15px;top:5px;width:7px;height:7px;border-radius:50%;background:var(--accent-2);border:2px solid var(--paper)}
.tl .ev .t{font-size:12px;font-weight:600}
.tl .ev .d{font-size:10.5px;color:var(--ink-3);font-family:var(--fm)}
.tl .ev .x{font-size:11.5px;color:var(--ink-2);margin-top:2px}

/* ---------------- alert strips ---------------- */
.note{
  display:flex;gap:9px;padding:9px 11px;border:1px solid var(--line);border-left-width:3px;
  border-radius:var(--r);background:var(--paper-2);font-size:12px;color:var(--ink-2);align-items:flex-start;
}
.note b{color:var(--ink);display:block;font-size:12px}
.note.wn{border-left-color:var(--warn);background:var(--warn-soft)}
.note.dg{border-left-color:var(--dang);background:var(--dang-soft)}
.note.ok{border-left-color:var(--ok);background:var(--ok-soft)}
.note.in{border-left-color:var(--info);background:var(--info-soft)}
.note .acts{margin-left:auto;display:flex;gap:6px;flex:none}

/* ---------------- printed document (payslip / bill) ---------------- */
.doc{
  background:#fff;color:#101620;border:1px solid var(--line);border-radius:var(--r);
  padding:22px 26px;font-size:12px;box-shadow:var(--shadow);
}
[data-theme="dark"] .doc{background:#f6f6f3}
.doc .dhead{text-align:center;border-bottom:2px solid #101620;padding-bottom:9px;margin-bottom:12px}
.doc .dhead h2{font-family:var(--fd);font-size:19px;font-weight:600;letter-spacing:.01em}
.doc .dhead .org{font-family:var(--fd);font-size:13px;letter-spacing:.06em;text-transform:uppercase}
.doc .dhead .meta{font-family:var(--fm);font-size:10.5px;color:#48546a;margin-top:4px;display:flex;justify-content:center;gap:16px;flex-wrap:wrap}
.doc table{width:100%;border-collapse:collapse;font-size:11.5px}
.doc table th,.doc table td{border:1px solid #c8ced8;padding:4px 7px;text-align:left}
.doc table th{background:#eef1f5;font-size:9.5px;letter-spacing:.08em;text-transform:uppercase}
.doc table td.num{text-align:right;font-family:var(--fm);font-variant-numeric:tabular-nums}
.doc .sig{display:flex;justify-content:space-between;margin-top:34px;font-size:11px;color:#48546a}
.doc .sig div{text-align:center;border-top:1px solid #101620;padding-top:4px;min-width:150px}

/* ---------------- charts ---------------- */
.chart{width:100%;display:block;overflow:visible}
.chart .axis{stroke:var(--line);stroke-width:1}
.chart .gl{stroke:var(--line-2);stroke-width:1;stroke-dasharray:2 3}
.chart .lbl{fill:var(--ink-3);font-size:9.5px;font-family:var(--ff)}
.chart .val{fill:var(--ink-2);font-size:9.5px;font-family:var(--fm)}
.chart .b1{fill:var(--accent-2)}
.chart .b2{fill:var(--ink-3);opacity:.45}
.chart .ln{fill:none;stroke:var(--accent-2);stroke-width:2;stroke-linejoin:round}
.chart .ar{fill:var(--accent-2);opacity:.09}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11px;color:var(--ink-2);margin-top:8px}
.legend i{width:9px;height:9px;border-radius:2px;display:inline-block;margin-right:5px}

/* ---------------- misc ---------------- */
.empty{padding:34px 20px;text-align:center;color:var(--ink-3)}
.empty b{display:block;color:var(--ink);font-size:13px;margin-bottom:3px}
.pager{display:flex;align-items:center;gap:7px;padding:8px 13px;border-top:1px solid var(--line-2);font-size:11.5px;color:var(--ink-3)}
.pager .btn{height:25px}
.mono{font-family:var(--fm);font-variant-numeric:tabular-nums}
.muted{color:var(--ink-3)}
.right{text-align:right}
.nowrap{white-space:nowrap}
.hr{height:1px;background:var(--line-2);margin:11px 0}
.toast{
  position:fixed;right:18px;bottom:18px;z-index:90;background:var(--ink);color:var(--paper);
  padding:9px 13px;border-radius:var(--r);font-size:12px;box-shadow:var(--shadow);
  opacity:0;transform:translateY(8px);transition:.18s;pointer-events:none;
}
.toast.on{opacity:1;transform:none}
.ovl{position:fixed;inset:0;background:rgba(10,14,20,.45);z-index:80;display:none;place-items:center;padding:20px}
.ovl.on{display:grid}
.modal{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);width:min(620px,100%);box-shadow:var(--shadow);max-height:86vh;overflow:auto}

/* ---------------- login ---------------- */
.login{min-height:100vh;display:grid;grid-template-columns:1.15fr 1fr;background:var(--paper)}
.login .art{
  background:var(--accent);color:#fff;padding:44px 46px;display:flex;flex-direction:column;justify-content:space-between;
  background-image:repeating-linear-gradient(0deg,rgba(255,255,255,.05) 0 1px,transparent 1px 34px),repeating-linear-gradient(90deg,rgba(255,255,255,.05) 0 1px,transparent 1px 34px);
}
.login .art h1{font-family:var(--fd);font-size:38px;font-weight:500;letter-spacing:-.02em;line-height:1.1}
.login .art p{color:rgba(255,255,255,.78);font-size:13.5px;max-width:46ch;margin-top:12px}
.login .art .ftr{font-size:11px;color:rgba(255,255,255,.6);font-family:var(--fm)}
.login .art .mods{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 22px;margin-top:26px;max-width:520px}
.login .art .mods div{border-top:1px solid rgba(255,255,255,.22);padding-top:6px;font-size:11.5px;color:rgba(255,255,255,.82)}
.login .art .mods b{display:block;font-family:var(--fm);font-size:10px;color:rgba(255,255,255,.55)}
.login .form{display:grid;place-items:center;padding:40px}
.login .form .box{width:min(360px,100%)}

/* ---------------- responsive ---------------- */
@media(max-width:1280px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.fgrid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:1080px){
  .app{grid-template-columns:1fr}
  .side{position:fixed;left:0;top:0;width:var(--side);transform:translateX(-100%);transition:.2s}
  body.navopen .side{transform:none;box-shadow:var(--shadow)}
  .menubtn{display:grid !important}
  .g2,.g3,.g21,.g12,.g31{grid-template-columns:minmax(0,1fr)}
  .searchbox{display:none}
  .who .nm{display:none}
  .who{padding-left:6px}
  .login{grid-template-columns:1fr}
  .login .art{display:none}
}
@media(max-width:720px){
  .fgrid,.fgrid.c3,.fgrid.c2{grid-template-columns:minmax(0,1fr)}
  .f.span2,.f.span3,.f.span4{grid-column:auto}
  .g4{grid-template-columns:minmax(0,1fr)}
  .wrap{padding:12px 12px 32px}
}
.menubtn{display:none}
@media(prefers-reduced-motion:reduce){*{transition:none !important;animation:none !important}}

/* ---------------- print ---------------- */
@media print{
  .side,.top,.phead .acts,.tools,.pager,.btn,.tabs{display:none !important}
  .app{grid-template-columns:1fr}
  body{background:#fff}
  .wrap{padding:0}
  .card{box-shadow:none;border-color:#bbb;break-inside:avoid}
  .doc{border:0;padding:0}
}
