@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@600;700&display=swap');
:root{--bg:#f7f7f6;--surface:#fff;--surface-muted:#f2f2f1;--surface-2:#f5f5f4;--ink:#1a1a1e;--ink-2:#3b3b42;--muted:#68686f;--border:#dcdcda;--border-soft:#e8e8e6;--border-strong:#ccccc9;--brand:#3b4fd4;--brand-dark:#2e3fb5;--brand-light:#edefff;--danger:#dc2626;--success:#059669;--warn:#d97706;--warn-light:#fef3c7;--purple:#7c3aed;--orange:#ea580c;--r:10px;--r-lg:14px;--sh-sm:0 1px 3px #1c19170f;--sh:0 12px 30px #1c191712;
--font:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--head:"Plus Jakarta Sans","IBM Plex Sans",system-ui,sans-serif;--mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace}
*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--ink);font:13.5px/1.45 var(--font)}
a{color:var(--brand);text-decoration:none}button,input,select{font:inherit}
.hidden{display:none!important}
.up{font-size:11px;text-transform:uppercase;letter-spacing:.14em;font-weight:600;color:var(--muted)}
.ico{width:18px;height:18px;flex:none}
/* login */
.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(180deg,#fff 0%,#f9f9f8 48%,#f5f5f4 100%)}
.login .card{width:100%;max-width:380px;padding:26px}
/* ===== shell ===== */
.app{display:grid;grid-template-columns:240px 1fr;grid-template-rows:64px 1fr;min-height:100vh}
.topbar{grid-column:1/-1;position:sticky;top:0;z-index:5;height:64px;background:var(--surface);border-bottom:1px solid var(--border);border-top:3px solid var(--brand);display:flex;align-items:center;gap:16px;padding:0 20px}
.brand{display:flex;flex-direction:column;line-height:1.05;min-width:190px}
.brand img{height:22px;display:block;width:auto;align-self:flex-start}.brand .wm{font-family:var(--head);font-weight:700;letter-spacing:.06em;font-size:20px;color:var(--ink)}.brand img+.wm{display:none}
.brand .sub{font-size:10px;letter-spacing:.06em;color:var(--muted);text-transform:uppercase;margin-top:3px}
.search{display:flex;align-items:center;gap:8px;background:var(--surface-muted);border:1px solid transparent;border-radius:var(--r);padding:0 12px;height:38px;width:min(340px,40vw);color:var(--muted)}
.search:focus-within{border-color:var(--brand);background:#fff}.search input{border:0;padding:0;height:100%;background:transparent;font-size:14px;width:100%}.search input:focus{outline:0}.search .ico{width:16px;height:16px}
.tb-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.tb-right .pillbtn{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--border);border-radius:var(--r);padding:8px 14px;background:#fff;font-weight:600;font-size:13px;color:var(--ink);cursor:pointer}
.tb-right select{width:auto;padding:8px 30px 8px 12px;font-weight:600;font-size:13px;border-radius:var(--r)}
.avatar{width:36px;height:36px;border-radius:9px;background:var(--ink);color:#fff;display:grid;place-items:center;font-weight:700;font-size:15px;font-family:var(--head);position:relative}
.avatar i{position:absolute;right:-2px;bottom:-2px;width:9px;height:9px;border-radius:99px;background:var(--success);border:2px solid #fff}
.side{background:var(--surface);border-right:1px solid var(--border);padding:12px 10px 20px;display:flex;flex-direction:column;position:sticky;top:64px;height:calc(100vh - 64px);overflow:auto}
.sec{display:flex;align-items:center;gap:9px;padding:14px 10px 6px;color:var(--muted)}.sec .up{flex:1}.sec .ico{width:16px;height:16px}.sec .chev{width:14px;height:14px}
.side a{display:flex;align-items:center;gap:10px;color:var(--ink-2);padding:8px 10px 8px 26px;border-radius:8px;font-weight:500;font-size:14px;position:relative}
.side a .ico{width:17px;height:17px;color:var(--muted)}
.side a:hover{background:var(--surface-muted)}.side a.active{background:var(--surface-muted);color:var(--ink);font-weight:600}.side a.active::before{content:"";position:absolute;left:8px;top:8px;bottom:8px;width:3px;border-radius:3px;background:var(--brand)}.side a.active .ico{color:var(--brand)}
.side .cnt{margin-left:auto;background:var(--surface-muted);color:var(--ink-2);font-size:11px;font-weight:600;padding:2px 8px;border-radius:99px;border:1px solid var(--border-soft)}.side a.active .cnt{background:#fff}
.side .divider{height:1px;background:var(--border-soft);margin:6px 0}
.main{padding:20px 20px 28px;max-width:1500px;width:100%}
@media(max-width:900px){.app{grid-template-columns:1fr;grid-template-rows:64px auto 1fr}.side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;border-right:0;border-bottom:1px solid var(--border);padding:6px}.side .sec,.side .divider{display:none}.side a{padding:8px 10px}.side a span.lbl{display:none}.search{display:none}.brand .sub{display:none}.main{padding:12px}}
/* ===== strip of stat cells ===== */
.strip{display:grid;grid-template-columns:repeat(4,1fr) auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-sm);margin-bottom:14px;overflow:hidden}
.cell{display:flex;align-items:center;gap:12px;padding:14px 18px;border-right:1px solid var(--border-soft)}.cell .ico{width:20px;height:20px;color:var(--ink-2)}
.cell .v{font-family:var(--head);font-weight:700;font-size:17px;line-height:1.1;margin-top:2px}.cell.b .v,.cell.b .ico{color:var(--brand)}.cell.g .v,.cell.g .ico{color:var(--success)}.cell.a .v,.cell.a .ico{color:var(--warn)}.cell.r .v,.cell.r .ico{color:var(--danger)}
.strip .link{display:flex;align-items:center;padding:0 18px;font-weight:600;color:var(--brand);white-space:nowrap}
@media(max-width:900px){.strip{grid-template-columns:1fr 1fr}.strip .link{grid-column:1/-1;padding:10px 18px;border-top:1px solid var(--border-soft)}}
/* ===== command card ===== */
.cmd{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-sm);padding:16px 18px;margin-bottom:14px}
.cmd .hd{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.cmd .title h1{font-family:var(--head);font-size:19px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;margin:0}.cmd .title .up{margin-top:2px;font-size:10px}
.kpis{display:flex;align-items:stretch;flex:1;flex-wrap:wrap}
.kpi{display:flex;align-items:center;gap:12px;padding:0 22px;border-left:1px solid var(--border-soft)}.kpi:first-child{border-left:0}
.kpi .ico{width:26px;height:26px}.kpi .v{font-family:var(--head);font-weight:700;font-size:17px}.kpi .v small{font-family:var(--font);font-weight:500;color:var(--muted);font-size:11px;margin-left:4px}
.kpi.b .ico{color:var(--brand)}.kpi.g .ico{color:var(--success)}.kpi.p .ico{color:var(--purple)}.kpi.a .ico{color:var(--warn)}.kpi.r .ico{color:var(--danger)}
.btn{border:1px solid var(--border);background:#fff;color:var(--ink);padding:8px 13px;border-radius:var(--r);cursor:pointer;font-weight:600;font-size:13px;display:inline-flex;align-items:center;gap:7px;transition:.15s ease;white-space:nowrap}
.btn:hover{border-color:var(--border-strong);background:#fafafa}.btn .ico{width:15px;height:15px}
.btn.p{background:var(--brand);border-color:var(--brand);color:#fff;text-transform:uppercase;letter-spacing:.04em;padding:11px 20px;font-size:14px;border-radius:12px}.btn.p:hover{background:var(--brand-dark)}
.btn.s{padding:5px 9px;font-size:12px;font-weight:500}.btn.d{color:var(--danger)}.btn.u{text-transform:uppercase;letter-spacing:.06em;font-size:12px}
.filters{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:14px;padding-top:14px;border-top:1px solid var(--border-soft)}
.filters .fsearch{flex:1;min-width:220px;max-width:480px;height:40px}
.filters select{width:auto;min-width:170px;height:40px;background:var(--surface-muted);border-color:transparent;font-weight:500}
.filters .spacer{flex:1}
/* ===== table card ===== */
.tcard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-sm);overflow:hidden}
.tcard .tscroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.12em;padding:10px 12px;border-bottom:1px solid var(--border);background:#fff;border-right:1px solid var(--border-soft);white-space:nowrap}th:last-child{border-right:0}
td{padding:8px 12px;border-bottom:1px solid var(--border-soft);border-right:1px solid var(--border-soft);vertical-align:middle;white-space:nowrap}td:last-child{border-right:0}
tbody tr{position:relative}tbody tr:hover td{background:#fafafa}tbody tr td:first-child{box-shadow:inset 3px 0 0 var(--brand-light)}tbody tr:hover td:first-child{box-shadow:inset 3px 0 0 var(--brand)}
td.act{text-align:right}td.id{font-weight:700}td.num{text-align:right;font-variant-numeric:tabular-nums}
.chip{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:6px;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--border);background:#fff;color:var(--ink-2)}
.chip.blue{color:var(--brand);border-color:#c7cdf5;background:#f3f5ff}.chip.amber{color:#b45309;border-color:transparent;background:var(--warn-light)}.chip.green{color:var(--success);border-color:#bfe8d5;background:#eaf8f1}.chip.red{color:var(--danger);border-color:#f5c2c2;background:#fdeeee}.chip.gray{color:var(--muted);background:var(--surface-muted);border-color:transparent}
.chip .dot{width:7px;height:7px;border-radius:99px;background:currentColor}
.datechip{display:inline-flex;gap:6px;align-items:center;font-size:12px}.datechip b{font-size:10px;letter-spacing:.08em;color:var(--muted);text-transform:uppercase;background:var(--surface-muted);padding:1px 6px;border-radius:5px}
.mono{font-family:var(--mono);font-size:12.5px}
.tfoot{display:flex;align-items:center;gap:20px;flex-wrap:wrap;padding:12px 16px;border-top:1px solid var(--border);background:#fff}
.tfoot .sum{display:flex;gap:16px;align-items:center}.tfoot .sum span{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600}.tfoot .sum b{font-family:var(--head);color:var(--brand);font-size:14px;margin-left:6px}
.tfoot .clocks{display:flex;gap:18px;margin-left:auto;align-items:center;padding-left:18px;border-left:1px solid var(--border-soft)}
.clk{display:flex;align-items:center;gap:8px}.clk .ico{width:15px;height:15px}.clk .z{font-size:10px;letter-spacing:.14em;font-weight:700}.clk .t{font-family:var(--head);font-weight:700;font-size:13px}.clk .t small{font-family:var(--font);font-weight:500;color:var(--muted);font-size:10px;margin-left:3px}
.clk.pt .z,.clk.pt .ico{color:var(--brand)}.clk.mt .z,.clk.mt .ico{color:var(--danger)}.clk.ct .z,.clk.ct .ico{color:var(--orange)}.clk.et .z,.clk.et .ico{color:var(--success)}
.tfoot .pager{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:12px;padding-left:18px;border-left:1px solid var(--border-soft)}.pager button{border:0;background:none;cursor:pointer;color:var(--ink-2);padding:2px 4px}
.empty{padding:34px;text-align:center;color:var(--muted)}
/* ===== generic cards / forms ===== */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-sm);padding:18px 20px}
.grid{display:grid;gap:14px}.g2{grid-template-columns:1fr 1fr}@media(max-width:900px){.g2{grid-template-columns:1fr}}
h2{font-family:var(--font);font-size:11px;margin:0 0 12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.12em}
form .f{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}label{font-size:11px;color:var(--muted);font-weight:600;letter-spacing:.08em;text-transform:uppercase}
input,select{padding:9px 11px;border:1px solid var(--border);border-radius:var(--r);background:#fff;width:100%;color:var(--ink)}input:focus,select:focus{outline:3px solid var(--brand-light);border-color:var(--brand)}
.row{display:flex;gap:10px;align-items:center}.row>*{flex:1}.right{display:flex;gap:8px;justify-content:flex-end;margin-top:6px}
.err{color:var(--danger);font-size:13px;margin:6px 0}.ok{color:var(--success);font-size:13px}.muted{color:var(--muted);font-size:13px}
.modal{position:fixed;inset:0;background:rgba(26,26,30,.4);display:grid;place-items:center;padding:20px;z-index:10}.modal .card{width:100%;max-width:470px;max-height:92vh;overflow:auto;box-shadow:var(--sh)}
.modal h2{font-family:var(--head);font-size:16px;text-transform:none;letter-spacing:0;color:var(--ink);font-weight:700;margin-bottom:14px}
.kv{display:grid;grid-template-columns:130px 1fr;gap:6px 12px;font-size:13.5px}.kv b{color:var(--muted);font-weight:600;font-size:11px;letter-spacing:.08em;text-transform:uppercase;align-self:center}
.checks{display:grid;grid-template-columns:1fr 1fr;gap:6px}.checks label{display:flex;gap:8px;align-items:center;font-weight:500;color:var(--ink);font-size:13.5px;text-transform:none;letter-spacing:0}.checks input{width:auto}
/* ===== phase A: routing core ===== */
.chip.purple{color:var(--purple);border-color:#ddd0fb;background:#f5f0ff}
textarea{padding:9px 11px;border:1px solid var(--border);border-radius:var(--r);background:#fff;width:100%;color:var(--ink);font:inherit;resize:vertical}textarea:focus{outline:3px solid var(--brand-light);border-color:var(--brand)}
.modal .card.wide{max-width:760px}
.hourspill{padding:5px 10px!important;gap:6px}.hourspill .chip{border:0}
.stsel{width:auto;padding:3px 24px 3px 8px;font-size:12px;border-radius:7px;margin-left:4px;background:var(--surface-muted);border-color:transparent}
.destpick{display:flex;gap:6px}.destpick select{flex:1;min-width:0}.destpick input{flex:1;min-width:0}
.keys{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px}@media(max-width:700px){.keys{grid-template-columns:1fr}}
.keyrow{display:flex;align-items:center;gap:8px;margin:2px 0}.keyrow .destpick{flex:1}
.key{flex:none;display:inline-grid;place-items:center;width:26px;height:26px;border-radius:7px;background:var(--surface-muted);border:1px solid var(--border);font-family:var(--mono);font-weight:700;font-size:13px}
.greet{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.greet label.btn{text-transform:none;letter-spacing:0;color:var(--ink);font-size:12px}
.order{list-style:none;counter-reset:o;margin:0 0 6px;padding:0;border:1px solid var(--border-soft);border-radius:var(--r)}.order:empty{display:none}
.order li{counter-increment:o;display:flex;align-items:center;gap:8px;padding:5px 8px;border-bottom:1px solid var(--border-soft);font-size:13px}.order li:last-child{border-bottom:0}
.order li::before{content:counter(o);color:var(--muted);font-size:11px;width:14px}.order .sp{flex:1}.order .btn.s{padding:3px 5px}.order .ico{width:13px;height:13px}
.tabs{display:flex;gap:4px;flex-wrap:wrap;border-bottom:1px solid var(--border);margin-bottom:14px}
.tab{border:0;background:none;padding:8px 12px;font-weight:600;font-size:13px;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.tab.on{color:var(--brand);border-bottom-color:var(--brand)}
table.hrs td{border:0;padding:3px 6px 3px 0;white-space:nowrap}table.hrs tbody tr td:first-child{box-shadow:none}table.hrs tr:hover td{background:none}table.hrs input[type=time]{width:auto;padding:5px 7px}
.hol{margin-bottom:6px}
.ovr{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 4px}
