
:root{
  --sb:#141821; --sb-hover:#1c212c; --sb-active:#242b38; --sb-text:#9aa3b2; --sb-text-active:#ffffff; --sb-group:#5b6472;
  --canvas:#f7f8fa; --surface:#ffffff; --surface-subtle:#fcfcfd;
  --border:#e4e6ea; --border-light:#eceef1; --border-strong:#d3d7de;
  --tx:#1f2430; --tx2:#4b5361; --tx3:#6b7280; --tx4:#8b93a1; --inert:#f0f1f4;
  --ok-bg:#e6f4ec; --ok-fg:#157347; --ok-dot:#157347;
  --as-bg:#e7eefb; --as-fg:#1c4fa1; --as-dot:#2f5fbf;
  --rp-bg:#fbe9e9; --rp-fg:#b02a2a; --rp-dot:#c2372f;
  --rt-bg:#eceef1; --rt-fg:#5b6472; --rt-dot:#8b93a1;
  --warn-bg:#fdf0e0; --warn-fg:#96590f; --warn-dot:#e0a13c;
  --primary:#2f5fbf; --mtpl:#1c4fa1; --mtpl-bg:#e7eefb; --mtpl-bar:#2f5fbf;
  --brand-ink:#0b0d11; --brand-blue:#4d9eff; --brand-grey:#8a9099;
  --mrtpl:#5b45a0; --mrtpl-bg:#f1ecfb; --mrtpl-bar:#7a5cc4;
  --sans:"IBM Plex Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--canvas);color:var(--tx);font-family:var(--sans);font-size:12.5px;line-height:1.45;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--primary)}
::selection{background:#d8e3f8}
:focus-visible{outline:2px solid var(--primary);outline-offset:1px;border-radius:3px}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- shell ---------- */
#app{height:100vh}
.shell{display:grid;grid-template-columns:240px 1fr;height:100vh;overflow:hidden;background:var(--canvas)}
.sidebar{background:var(--sb);display:flex;flex-direction:column;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#2b3240 var(--sb)}
.sidebar::-webkit-scrollbar{width:8px}.sidebar::-webkit-scrollbar-thumb{background:#2b3240;border-radius:8px}
.brand{padding:16px;border-bottom:1px solid #20262f}
.brand-wrap{display:block;line-height:0}
/* Supplied artwork: white on transparent, 430x102. It needs the dark sidebar behind it. */
.brand-logo{display:block;width:100%;max-width:186px;height:auto}
.navgroup{padding:14px 10px 2px}
.navgroup-label{color:var(--sb-group);font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;padding:0 8px 6px}
.navitem{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:none;border:0;color:var(--sb-text);font-size:12.5px;font-weight:500;padding:7px 8px;border-radius:6px;cursor:pointer;transition:background .12s}
.navitem:hover{background:var(--sb-hover)}
.navitem.on{background:var(--sb-active);color:var(--sb-text-active)}
.navitem .ct{margin-left:auto;font-family:var(--mono);font-size:10.5px;color:var(--sb-group)}
.navitem.on .ct{color:#c3cad6}
.sidebar-foot{margin-top:auto;padding:12px 16px 14px;border-top:1px solid #20262f;color:var(--sb-group);font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;display:flex;gap:6px;align-items:center}
.main{display:flex;flex-direction:column;min-width:0;overflow:hidden}
.topbar{height:56px;flex:none;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;padding:0 16px 0 20px;position:relative;z-index:40}
.gsearch{position:relative;width:360px;max-width:38vw}
.gsearch input{width:100%;height:32px;border:1px solid var(--border);border-radius:6px;background:var(--surface-subtle);padding:0 10px 0 28px;font-size:12.5px}
.gsearch input::placeholder{color:var(--tx4)}
.gsearch .ic{position:absolute;left:9px;top:8px;color:var(--tx4);font-size:12px;pointer-events:none}
.spacer{flex:1}
.scope{display:flex;background:var(--inert);border-radius:8px;padding:2px;gap:2px}
.scope button{border:0;background:none;border-radius:6px;padding:5px 10px;font-size:11.5px;font-weight:500;color:var(--tx3);cursor:pointer;transition:background .12s}
.scope button:hover{background:#e6e8ec}
.scope button.on{background:var(--surface);color:var(--tx);box-shadow:0 1px 2px rgba(20,24,31,.08);font-weight:600}
.iconbtn{position:relative;width:32px;height:32px;border:1px solid var(--border);background:var(--surface);border-radius:8px;cursor:pointer;display:grid;place-items:center;color:var(--tx2)}
.iconbtn:hover{background:var(--surface-subtle);border-color:var(--border-strong)}
.dot-unread{position:absolute;top:5px;right:6px;width:6px;height:6px;border-radius:50%;background:var(--rp-dot);border:1.5px solid #fff}
.who{display:flex;align-items:center;gap:8px;padding-left:4px}
.avatar{width:28px;height:28px;border-radius:50%;background:var(--as-bg);color:var(--as-fg);display:grid;place-items:center;font-family:var(--mono);font-size:11px;font-weight:600}
.who-name{font-size:12px;font-weight:500}
.who-role{font-family:var(--mono);font-size:9.5px;color:var(--tx4);letter-spacing:.06em;text-transform:uppercase}
.content{flex:1;overflow-y:auto;padding:22px 24px 40px}

/* ---------- primitives ---------- */
h1{font-size:20px;line-height:1.25;font-weight:600;letter-spacing:-.01em;margin:0}
h2{font-size:13px;font-weight:600;margin:0}
.sub{color:var(--tx3);font-size:12px;margin-top:4px}
.eyebrow{font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.10em;text-transform:uppercase;color:var(--tx4)}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.card{background:var(--surface);border:1px solid var(--border);border-radius:9px}
.card-h{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border-light)}
.card-h .meta{margin-left:auto;font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--tx4)}
.card-b{padding:14px 16px}
.clickable{cursor:pointer;transition:box-shadow .14s,border-color .14s}
.clickable:hover{box-shadow:0 3px 14px rgba(20,24,31,.07);border-color:var(--border-strong)}
.row{display:flex;align-items:center;gap:10px}
.grid{display:grid}
.btn{height:30px;padding:0 12px;border-radius:8px;border:1px solid #dfe2e7;background:var(--surface);color:var(--tx);font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:background .12s,border-color .14s;white-space:nowrap}
.btn:hover{background:var(--surface-subtle);border-color:var(--border-strong)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.primary:hover{background:#2a55ac}
.btn.danger{color:var(--rp-fg);border-color:#f0d5d5}
.btn.danger:hover{background:var(--rp-bg)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.sm{height:26px;padding:0 9px;font-size:11.5px}
.badge{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:3px 7px;border-radius:5px;white-space:nowrap}
.badge .d{width:5px;height:5px;border-radius:50%;flex:none}
.s-AVAILABLE{background:var(--ok-bg);color:var(--ok-fg)} .s-AVAILABLE .d{background:var(--ok-dot)}
.s-ASSIGNED{background:var(--as-bg);color:var(--as-fg)} .s-ASSIGNED .d{background:var(--as-dot)}
.s-UNDER_REPAIR{background:var(--rp-bg);color:var(--rp-fg)} .s-UNDER_REPAIR .d{background:var(--rp-dot)}
.s-RETIRED{background:var(--rt-bg);color:var(--rt-fg)} .s-RETIRED .d{background:var(--rt-dot)}
.s-WARN{background:var(--warn-bg);color:var(--warn-fg)} .s-WARN .d{background:var(--warn-dot)}
.chip{display:inline-flex;align-items:center;font-family:var(--mono);font-size:11px;font-weight:600;padding:2px 7px;border-radius:5px}
.e-MTPL{background:var(--mtpl-bg);color:var(--mtpl)} .e-MRTPL{background:var(--mrtpl-bg);color:var(--mrtpl)} .e-ALL{background:#eef1f6;color:var(--tx)}
.ent-MTPL{color:var(--mtpl)} .ent-MRTPL{color:var(--mrtpl)}
input[type=text],input[type=password],input[type=date],input[type=number],input[type=email],input[type=search],input[type=tel],input[type=url],select,textarea{height:30px;border:1px solid var(--border);border-radius:6px;background:var(--surface);padding:0 8px;font-size:12.5px;width:100%}
textarea{height:auto;padding:7px 8px;resize:vertical;line-height:1.5}
select{cursor:pointer;padding-right:4px}
input:disabled,select:disabled{background:var(--inert);color:var(--tx4)}
label.f{display:block}
label.f > span{display:block;font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.10em;text-transform:uppercase;color:var(--tx4);margin-bottom:5px}
.hint{font-size:11px;color:var(--tx4);margin-top:4px}
.partshead{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.partshead > span{font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.10em;text-transform:uppercase;color:var(--tx4)}
.partshead > button{margin-left:auto}
.partrow{display:grid;grid-template-columns:56px 1fr 1fr 28px;gap:7px;align-items:center;margin-bottom:6px}
.partrow .partno{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--tx4)}
.partrow .btn{height:28px;padding:0;justify-content:center}
.partbox{border:1px solid var(--border-light);border-radius:8px;padding:11px 12px;background:var(--surface-subtle)}
.pwfield{position:relative;display:block}
.pwfield input{padding-right:34px}
.pweye{position:absolute;right:2px;top:2px;width:26px;height:26px;padding:0;border:0;background:none;color:var(--tx4);border-radius:5px;cursor:pointer;display:grid;place-items:center;transition:background .12s,color .12s}
.pweye:hover{background:var(--inert);color:var(--tx2)}
.pweye svg{width:15px;height:15px;display:block;pointer-events:none}

/* ---------- tables ---------- */
.tablecard{background:var(--surface);border:1px solid var(--border);border-radius:9px;overflow:hidden}
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 12px;background:var(--surface-subtle);border-bottom:1px solid var(--border-light)}
.toolbar .search{flex:1;min-width:200px;max-width:340px}
.toolbar select{width:auto;min-width:118px}
.tablescroll{overflow-x:auto}
table.t{width:100%;border-collapse:collapse}
table.t th{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--tx4);text-align:left;padding:9px 12px;background:var(--surface-subtle);border-bottom:1px solid var(--border-light);white-space:nowrap}
table.t th.sortable{cursor:pointer;user-select:none}
table.t th.sortable:hover{color:var(--tx2)}
table.t td{padding:9px 12px;border-bottom:1px solid var(--border-light);font-size:12.5px;color:var(--tx2);vertical-align:middle}
table.t tbody tr{transition:background .12s}
table.t tbody tr.clickrow{cursor:pointer}
table.t tbody tr.clickrow:hover{background:var(--surface-subtle)}
table.t tbody tr.sel{background:#f4f7fd}
table.t td.em{color:var(--tx);font-weight:600}
table.t td.mono{font-family:var(--mono);font-size:11.5px;font-variant-numeric:tabular-nums}
table.t td.num{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}
table.t th.num{text-align:right}
.tfoot{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:9px 12px;background:var(--surface-subtle);border-top:1px solid var(--border-light);font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--tx4)}
.tfoot .r{margin-left:auto}
.empty{padding:44px 20px;text-align:center;color:var(--tx3)}
.empty .t{font-size:13px;font-weight:600;color:var(--tx);margin-bottom:5px}
.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cbx{width:14px;height:14px;accent-color:var(--primary);cursor:pointer;display:block}

/* ---------- dashboard ---------- */
.pagehead{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-end;margin-bottom:16px}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:12px}
.kpi{padding:14px}
.kpi .lab{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--tx4)}
.kpi .lab i{width:6px;height:6px;border-radius:50%;display:block}
.kpi .val{font-size:26px;line-height:1;font-weight:600;letter-spacing:-.02em;margin:9px 0 4px;font-variant-numeric:tabular-nums}
.kpi .note{font-size:11px;color:var(--tx3)}
.entities{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.entcard{border:1px solid var(--border);border-radius:8px;padding:14px}
.bar{height:7px;border-radius:4px;background:var(--inert);overflow:hidden;margin:10px 0}
.bar > i{display:block;height:100%;border-radius:4px}
.alerts{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:12px 0}
.alert{padding:13px 14px;border-radius:9px;border:1px solid transparent;cursor:pointer}
.alert .n{font-size:22px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.alert .t{font-size:12px;font-weight:600;margin-top:3px}
.alert .s{font-size:11px;margin-top:2px;opacity:.85}
.a-red{background:var(--rp-bg);border-color:#f4d9d9;color:var(--rp-fg)}
.a-amber{background:var(--warn-bg);border-color:#f6e2c8;color:var(--warn-fg)}
.a-blue{background:var(--as-bg);border-color:#d8e3f8;color:var(--as-fg)}
.a-grey{background:var(--rt-bg);border-color:var(--border);color:var(--rt-fg)}
.band{display:grid;grid-template-columns:1.15fr .85fr;gap:12px;margin:12px 0}
.distrow{display:grid;grid-template-columns:104px 1fr 44px;gap:10px;align-items:center;padding:5px 0}
.distrow .nm{font-size:12px;color:var(--tx2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.distrow .v{text-align:right;font-family:var(--mono);font-size:11.5px;color:var(--tx);font-variant-numeric:tabular-nums}
.dbar{height:7px;border-radius:4px;background:var(--inert);overflow:hidden}
.dbar > i{display:block;height:100%;background:var(--primary);border-radius:4px}
.stack{height:9px;border-radius:5px;overflow:hidden;display:flex;background:var(--inert)}
.stack > i{display:block;height:100%}
.legend{display:grid;gap:7px;margin-top:12px}
.legend .li{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--tx2)}
.legend .li .d{width:7px;height:7px;border-radius:50%}
.legend .li .v{margin-left:auto;font-family:var(--mono);font-size:11.5px;color:var(--tx);font-variant-numeric:tabular-nums}
.actrow{display:flex;align-items:center;gap:9px;padding:9px 16px;border-bottom:1px solid var(--border-light);cursor:pointer;transition:background .12s}
.actrow:last-child{border-bottom:0}
.actrow:hover{background:var(--surface-subtle)}
.actrow .d{width:6px;height:6px;border-radius:50%;flex:none}
.actrow .tx{font-size:12.5px;color:var(--tx2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.actrow .mt{margin-left:auto;font-family:var(--mono);font-size:10.5px;color:var(--tx4);white-space:nowrap}
.wins{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.win{border-radius:8px;padding:12px 13px;border:1px solid transparent}
.win .n{font-size:20px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.win .l{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;margin-top:3px}
.spend{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;margin-top:12px;padding:11px 16px;background:var(--surface);border:1px solid var(--border);border-radius:9px;font-family:var(--mono);font-size:10.5px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--tx4)}
.spend b{color:var(--tx);font-weight:600}

/* ---------- detail ---------- */
.tabs{display:flex;gap:2px;flex-wrap:wrap;border-bottom:1px solid var(--border);margin-bottom:14px}
.tab{border:0;background:none;padding:8px 11px;font-size:12.5px;font-weight:500;color:var(--tx3);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s}
.tab:hover{color:var(--tx)}
.tab.on{color:var(--tx);font-weight:600;border-bottom-color:var(--primary)}
.deflist{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px 22px}
.deflist .k{font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.10em;text-transform:uppercase;color:var(--tx4)}
.deflist .v{font-size:13px;color:var(--tx);margin-top:3px;word-break:break-word}
.deflist .v.mono{font-size:12px}
.tl{display:flex;gap:11px;padding:11px 16px;border-bottom:1px solid var(--border-light)}
.tl:last-child{border-bottom:0}
.tl .rail{width:7px;flex:none;padding-top:4px}
.tl .rail i{width:7px;height:7px;border-radius:50%;display:block}
.tl .t{font-size:12.5px;font-weight:600;color:var(--tx)}
.tl .s{font-size:11.5px;color:var(--tx3);margin-top:2px}
.tl .m{margin-left:auto;text-align:right;font-family:var(--mono);font-size:10px;color:var(--tx4);white-space:nowrap}

/* ---------- overlays ---------- */
.backdrop{position:fixed;inset:0;background:rgba(20,24,31,.34);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:56px 18px 24px;overflow-y:auto}
.modal{background:var(--surface);border-radius:11px;width:100%;max-width:460px;box-shadow:0 18px 50px rgba(20,24,31,.22);overflow:hidden}
.modal.wide{max-width:780px}
.modal-h{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border-light)}
.modal-b{padding:16px}
.modal-f{display:flex;gap:8px;align-items:center;padding:12px 16px;background:var(--surface-subtle);border-top:1px solid var(--border-light)}
.modal-f .r{margin-left:auto;display:flex;gap:8px}
.x{width:26px;height:26px;border:0;background:none;border-radius:6px;color:var(--tx3);cursor:pointer;font-size:15px;line-height:1;display:grid;place-items:center}
.x:hover{background:var(--inert);color:var(--tx)}
.dropdown{position:absolute;top:50px;right:16px;width:340px;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:0 14px 40px rgba(20,24,31,.16);z-index:60;overflow:hidden;max-height:60vh;overflow-y:auto}
.dropdown .dh{display:flex;align-items:center;padding:10px 13px;border-bottom:1px solid var(--border-light)}
.dropdown .di{display:flex;gap:9px;padding:10px 13px;border-bottom:1px solid var(--border-light);cursor:pointer}
.dropdown .di:hover{background:var(--surface-subtle)}
.dropdown .di:last-child{border-bottom:0}
.searchpanel{position:absolute;top:50px;left:20px;width:460px;max-width:calc(100vw - 40px);background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:0 14px 40px rgba(20,24,31,.16);z-index:60;max-height:60vh;overflow-y:auto}
.sgrp{font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.10em;text-transform:uppercase;color:var(--tx4);padding:9px 13px 5px;background:var(--surface-subtle);border-bottom:1px solid var(--border-light)}
.sres{display:flex;align-items:center;gap:9px;padding:9px 13px;border-bottom:1px solid var(--border-light);cursor:pointer}
.sres:hover{background:var(--surface-subtle)}
.toastwrap{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);z-index:200;pointer-events:none}
.toast{display:flex;align-items:center;gap:9px;background:#1f2430;color:#fff;border-radius:9px;padding:10px 14px;box-shadow:0 10px 30px rgba(20,24,31,.28);font-size:12.5px;max-width:min(560px,92vw)}
.toast .d{width:7px;height:7px;border-radius:50%;flex:none}
.toast .m{margin-left:6px;font-family:var(--mono);font-size:10.5px;color:#9aa3b2;white-space:nowrap}
.steps{display:flex;gap:6px;flex-wrap:wrap;padding:12px 16px;background:var(--surface-subtle);border-bottom:1px solid var(--border-light)}
.step{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--tx4);padding:4px 8px;border-radius:6px}
.step.on{background:var(--as-bg);color:var(--as-fg)}
.step.done{color:var(--ok-fg)}
.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fgrid .full{grid-column:1/-1}
.savechip{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--tx4);white-space:nowrap}
.savechip .d{width:6px;height:6px;border-radius:50%;background:var(--ok-dot);flex:none}
.savechip.busy .d{background:var(--warn-dot)}
.savechip.ro .d{background:var(--tx4)}
.label-sheet{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}
.sticker-wrap{display:flex;flex-direction:column;align-items:center;gap:6px}
.sticker{width:100%;max-width:180px;border:1px solid var(--border-strong);border-radius:6px;
  padding:9px 9px 7px;background:#fff;text-align:center;break-inside:avoid;page-break-inside:avoid}
.sticker svg{display:block;width:100%;height:auto}
.sticker .sid{font-family:var(--mono);font-size:13px;font-weight:600;letter-spacing:.06em;color:#000;margin-top:6px}
.sticker .snr{font-family:var(--mono);font-size:8px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:#b02a2a;margin-top:4px;border-top:1px solid #e6e6e6;padding-top:4px}
.qrpanel{display:flex;gap:22px;flex-wrap:wrap;align-items:flex-start}
.qrpanel .code{flex:none;padding:10px;background:#fff;border:1px solid var(--border);border-radius:8px}
.qrpanel .code svg{display:block}
.qrpanel .side{flex:1;min-width:230px}
@media print{
  @page{margin:8mm}
  body *{visibility:hidden}
  #printarea,#printarea *{visibility:visible}
  #printarea{display:block!important;position:absolute;inset:0;padding:0;background:#fff}
  #printarea .label-sheet{display:grid;grid-template-columns:repeat(auto-fill,45mm);gap:4mm;justify-content:start}
  #printarea .sticker{width:45mm;max-width:45mm;padding:2.5mm;border:0.3mm dashed #999;border-radius:1.5mm}
  #printarea .sticker .sid{font-size:10pt;margin-top:1.5mm}
  #printarea .sticker .snr{font-size:6pt;margin-top:1.5mm;padding-top:1.5mm}
  #printarea.one .label-sheet{grid-template-columns:45mm}
}
@media (max-width:1180px){
  .kpis,.alerts{grid-template-columns:repeat(2,1fr)}
  .band{grid-template-columns:1fr}
}
@media (max-width:900px){
  .shell{grid-template-columns:64px 1fr}
  .navitem span.lb,.navgroup-label,.sidebar-foot,.navitem .ct{display:none}
  .brand{padding:16px 0;display:flex;justify-content:center}
  .brand-wrap{width:24px;overflow:hidden}
  .brand-logo{width:186px;max-width:none}
  .navitem{justify-content:center}
  .entities,.wins{grid-template-columns:1fr}
  .gsearch{width:170px}
  .who-name,.who-role{display:none}
  .fgrid{grid-template-columns:1fr}
}

/* ---------- server build additions ---------- */
.bootfail{max-width:520px;margin:16vh auto;padding:22px;background:var(--surface);border:1px solid var(--border);border-radius:10px}
.bootfail h2{font-size:15px;margin-bottom:8px}
.bootfail p{color:var(--tx2);margin:0 0 14px}
.rolechip{font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;padding:2px 6px;border-radius:4px;background:var(--inert);color:var(--tx3)}
.rolechip.admin{background:var(--as-bg);color:var(--as-fg)}
.rolechip.viewer{background:var(--warn-bg);color:var(--warn-fg)}
.robanner{display:flex;align-items:center;gap:9px;padding:9px 14px;border-radius:8px;background:var(--warn-bg);border:1px solid #f6e2c8;color:var(--warn-fg);font-size:12px;margin-bottom:14px}

/* ---------- login ---------- */
.loginwrap{min-height:100vh;display:grid;place-items:center;padding:24px;background:var(--canvas)}
.logincard{width:100%;max-width:360px;background:var(--surface);border:1px solid var(--border);border-radius:11px;padding:26px;box-shadow:0 10px 34px rgba(20,24,31,.06)}
.loginbrand{background:var(--brand-ink);margin:-26px -26px 22px;padding:22px 24px;
  border-radius:11px 11px 0 0;line-height:0}
.loginbrand .brand-logo{width:100%;max-width:210px}
.logincard label.f{margin-bottom:12px}
.loginerr{background:var(--rp-bg);color:var(--rp-fg);border:1px solid #f4d9d9;border-radius:7px;padding:9px 11px;font-size:12px;margin-bottom:12px}
.loginfoot{margin-top:16px;font-size:11px;color:var(--tx4);line-height:1.6}
.loginnext{background:var(--as-bg);color:var(--as-fg);border:1px solid #d8e3f8;border-radius:7px;padding:9px 11px;font-size:12px;margin-bottom:12px}
