
:root{
  --pink:#ed40a9; --pink-d:#c92f8d; --menu:#555555; --teal:#008895; --teal-d:#006f7a; --orange:#f08a3c;
  --tabbar:#d5d5d5; --tab-off:#bfbfbf; --tab-on:#fafbfc; --panel:#f2f3f4; --page:#fafbfc;
  --grid-h:#a9b0b8; --grid-bar:#cbd1d6; --row-alt:#f5f5f5; --row-hover:#e6f3f4; --row-sel:#d4ecee;
  --line:#d9dde1; --text:#333a40; --muted:#6b737b; --nav-active:#acb4be; --side-w:196px;
  --font: "Open Sans","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:var(--font);font-size:13px;color:var(--text);background:var(--page);-webkit-text-size-adjust:100%}
button,input,select,textarea{font:inherit;color:inherit}
[hidden]{display:none!important}
a{color:var(--teal)}
.ic{display:inline-flex;width:16px;height:16px;flex:none}
.ic svg{width:100%;height:100%;fill:currentColor}
:focus-visible{outline:2px solid var(--teal);outline-offset:2px}

/* ---------- login ---------- */
.login{min-height:100%;display:flex;align-items:center;justify-content:center;background:linear-gradient(180deg,#f2f3f4 0,#e4e7ea 100%);padding:24px}
.login-card{background:#fff;width:100%;max-width:380px;border-radius:6px;box-shadow:0 6px 30px rgba(0,0,0,.12);padding:0 28px 28px;overflow:hidden}
.login-brand{margin:0 -28px 22px;background:var(--pink);padding:18px 28px;display:flex;align-items:center;gap:8px;color:#fff}
.logo-mark{font-weight:800;letter-spacing:.5px;font-size:20px;background:#fff;color:var(--pink);border-radius:4px;padding:1px 6px;line-height:1.3}
.logo-word{font-weight:300;font-size:22px;letter-spacing:2px}
.login h1{font-size:20px;font-weight:600;margin:0 0 4px}
.login-sub{margin:0 0 16px;color:var(--muted)}
.login label{display:block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:12px}
.login input{display:block;width:100%;margin-top:5px;padding:9px 10px;border:1px solid #c6ccd2;border-radius:3px;font-size:15px;text-transform:none;letter-spacing:0;color:var(--text)}
.login-switch{display:flex;border:1px solid var(--teal);border-radius:20px;overflow:hidden;margin-bottom:16px}
.login-switch button{flex:1;border:0;background:#fff;color:var(--teal);padding:7px;font-weight:600;cursor:pointer}
.login-switch button.on{background:var(--teal);color:#fff}
.login-err{color:#c0392b;min-height:18px;margin:-4px 0 10px;font-weight:600}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--teal);background:#fff;color:var(--teal);border-radius:16px;padding:5px 14px;font-weight:600;font-size:12px;cursor:pointer;white-space:nowrap;line-height:18px;text-decoration:none}
.btn:hover{background:#eef7f8}
.btn.teal{background:var(--teal);color:#fff}
.btn.teal:hover{background:var(--teal-d)}
.btn.orange{border-color:var(--orange);color:#c96619;background:#fff}
.btn.orange:hover{background:#fff4ea}
.btn.red{border-color:#c0392b;color:#c0392b}
.btn.red.fill{background:#c0392b;color:#fff}
.btn.wide{width:100%;justify-content:center;padding:9px;font-size:14px}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.btn .ic{width:13px;height:13px}
.linkbtn{border:0;background:none;color:var(--teal);cursor:pointer;padding:0;font-weight:600}

/* ---------- shell ---------- */
.shell{display:flex;height:100%;min-height:100%}
.side{width:var(--side-w);flex:none;background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:30;position:relative}
.brand{height:44px;background:var(--pink);display:flex;align-items:center;gap:8px;padding:0 14px;color:#fff;text-decoration:none}
.brand .logo-mark{font-size:16px}
.brand .logo-word{font-size:18px}
.menubar{height:32px;border:0;background:var(--menu);color:#fff;display:flex;align-items:center;gap:10px;padding:0 14px;cursor:pointer;text-align:left;font-weight:600;font-size:12px;letter-spacing:.4px}
#nav{flex:1;overflow-y:auto;overflow-x:visible;padding:4px 0}
.nav-item{position:relative}
.nav-top{display:flex;align-items:center;gap:12px;width:100%;border:0;background:none;padding:10px 14px;cursor:pointer;color:#4a5158;font-size:13px;text-align:left;border-left:4px solid transparent}
.nav-top .ic{width:17px;height:17px;color:#6b737b}
.nav-top:hover,.nav-item.open>.nav-top{background:#eceff2}
.nav-item.active>.nav-top{background:var(--nav-active);border-left-color:var(--pink);color:#fff}
.nav-item.active>.nav-top .ic{color:#fff}
.flyout{display:none;position:fixed;left:var(--side-w);min-width:230px;background:#fff;box-shadow:4px 4px 18px rgba(0,0,0,.18);border:1px solid var(--line);z-index:60;padding-bottom:6px}
.nav-item.open>.flyout{display:block}
.fly-title{background:var(--menu);color:#fff;padding:8px 14px;font-weight:600;font-size:12px;letter-spacing:.4px;text-transform:uppercase;display:flex;justify-content:space-between;align-items:center}
.fly-title button{border:0;background:none;color:#fff;cursor:pointer;padding:0 0 0 10px;font-size:15px}
.flyout a{display:flex;align-items:center;gap:10px;padding:8px 16px;color:#4a5158;text-decoration:none;font-size:13px}
.flyout a .ic{width:13px;height:13px;color:var(--teal)}
.flyout a:hover,.flyout a.cur{background:#e9f4f5;color:var(--teal-d)}
.shell.collapsed{--side-w:52px}
.shell.collapsed .brand .logo-word,.shell.collapsed .menubar .lbl,.shell.collapsed .nav-top .lbl{display:none}
.shell.collapsed .brand{padding:0 8px}
.main{flex:1;min-width:0;display:flex;flex-direction:column;height:100%}
.topbar{height:44px;flex:none;background:var(--tabbar);display:flex;align-items:flex-end;gap:8px;padding:0 10px 0 0;border-bottom:1px solid #c4c4c4}
.mob-menu{display:none}
.tabs{flex:1;display:flex;align-items:flex-end;gap:2px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;min-width:0;padding-left:8px}
.tabs::-webkit-scrollbar{display:none}
.tab{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px 0 14px;background:var(--tab-off);color:#4a5158;border-radius:4px 4px 0 0;white-space:nowrap;cursor:pointer;font-size:12.5px;font-weight:600;border:0;max-width:220px}
.tab span{overflow:hidden;text-overflow:ellipsis}
.tab.on{background:var(--tab-on);color:#2f353a;box-shadow:0 -1px 0 #c4c4c4 inset}
.tab .x{border:0;background:none;cursor:pointer;color:#7a828a;padding:0 2px;font-size:15px;line-height:1}
.tab .x:hover{color:#c0392b}
.who{align-self:center;display:flex;align-items:center;gap:10px;white-space:nowrap;font-size:12px;color:#4a5158}
.who b{font-weight:700}
.who .role{background:#fff;border-radius:10px;padding:1px 8px;font-size:11px;color:var(--teal-d);font-weight:700;text-transform:uppercase}
.view{flex:1;min-height:0;overflow:auto;background:var(--page);outline:none}

/* ---------- list pages (filter panel + grid) ---------- */
.page{display:flex;min-height:100%;align-items:stretch}
.filters{width:290px;flex:none;background:var(--panel);border-right:1px solid var(--line);padding:10px}
.fbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;gap:8px}
.fcard{background:#fff;border:1px solid var(--line);border-radius:3px;margin-bottom:10px}
.fcard-h{display:flex;justify-content:space-between;align-items:center;padding:9px 12px;font-size:11px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:#4a5158;cursor:pointer;user-select:none;border:0;background:none;width:100%}
.fcard-h .ic{width:11px;height:11px;transition:transform .15s;color:#7a828a}
.fcard.shut .fcard-h .ic{transform:rotate(-90deg)}
.fcard.shut .fcard-b{display:none}
.fcard-b{padding:2px 12px 12px}
.fl{display:block;font-size:11px;color:var(--muted);font-weight:600;margin:6px 0 3px}
.fi,.fs{width:100%;padding:6px 8px;border:1px solid #c6ccd2;border-radius:3px;background:#fff;font-size:13px;min-height:31px}
.fi:focus,.fs:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 2px rgba(0,136,149,.15)}
.frow{display:flex;gap:8px}.frow>*{flex:1;min-width:0}
.chk{display:flex;align-items:center;gap:7px;margin:6px 0;font-size:13px;cursor:pointer}
.gridarea{flex:1;min-width:0;display:flex;flex-direction:column;padding:10px 12px 14px}
.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.toolbar .sp{flex:1}
.ptitle{font-size:15px;font-weight:600;color:#2f353a;margin-right:8px}
.mob-filters{display:none}
.menu-wrap{position:relative}
.dropmenu{position:absolute;top:calc(100% + 4px);left:0;background:#fff;border:1px solid var(--line);box-shadow:0 6px 18px rgba(0,0,0,.15);min-width:200px;z-index:40;border-radius:3px;padding:4px 0}
.dropmenu button{display:block;width:100%;text-align:left;border:0;background:none;padding:8px 14px;cursor:pointer;font-size:13px}
.dropmenu button:hover:not([disabled]){background:#e9f4f5}
.dropmenu button[disabled]{color:#aab0b6;cursor:not-allowed}

/* ---------- grid ---------- */
.grid{background:#fff;border:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.gbar{background:var(--grid-bar);padding:6px 10px;font-size:11px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:#3d444a;display:flex;gap:6px;flex-wrap:wrap}
.gbar i{font-style:normal;color:#7a828a;padding:0 4px}
.gscroll{overflow:auto;max-height:calc(100vh - 230px);-webkit-overflow-scrolling:touch}
table.g{border-collapse:separate;border-spacing:0;width:100%;font-size:12.5px}
table.g th{position:sticky;top:0;background:var(--grid-h);color:#2c3237;font-weight:700;text-align:left;padding:8px 10px;white-space:nowrap;border-right:1px solid #bcc2c8;cursor:pointer;user-select:none;z-index:1}
table.g th.num,table.g td.num{text-align:right}
table.g th .s{color:#fff;font-size:10px;margin-left:4px}
table.g td{padding:7px 10px;border-bottom:1px solid #eceef0;white-space:nowrap;max-width:320px;overflow:hidden;text-overflow:ellipsis}
table.g tbody tr:nth-child(even) td{background:var(--row-alt)}
table.g tbody tr:hover td{background:var(--row-hover);cursor:pointer}
table.g tbody tr.sel td{background:var(--row-sel)}
table.g th.ck,table.g td.ck{width:34px;text-align:center;padding:0 4px;cursor:default}
table.g td.empty{text-align:center;color:var(--muted);padding:30px;white-space:normal}
.gpager{display:flex;align-items:center;gap:4px;padding:6px 8px;border-top:1px solid var(--line);background:#fafbfc;flex-wrap:wrap;font-size:12px}
.gpager button{min-width:28px;height:26px;border:1px solid #c6ccd2;background:#fff;border-radius:3px;cursor:pointer;font-size:12px}
.gpager button.on{background:var(--teal);color:#fff;border-color:var(--teal)}
.gpager button[disabled]{opacity:.4;cursor:default}
.gpager .info{margin-left:auto;color:var(--muted)}
.pill{display:inline-block;border-radius:10px;padding:1px 9px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;background:#e4e7ea;color:#4a5158}
.st-new,.st-expected,.st-open{background:#e3f1ff;color:#1b5f9e}
.st-picking,.st-receiving{background:#fff1d6;color:#9a6200}
.st-packed{background:#efe3ff;color:#6a3bb0}
.st-shipped,.st-received,.st-paid,.st-complete{background:#dcf3e3;color:#1e7b3c}
.st-cancelled,.st-void{background:#f6dede;color:#a12b2b}
.muted{color:var(--muted)}

/* ---------- detail / form pages ---------- */
.detail{padding:12px 14px 30px;max-width:1300px}
.dhead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#fff;border:1px solid var(--line);padding:10px 14px;margin-bottom:12px;border-top:3px solid var(--pink)}
.dhead h2{font-size:17px;margin:0;font-weight:600}
.dhead .sp{flex:1}
.cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:12px;margin-bottom:12px}
.box{background:#fff;border:1px solid var(--line);border-radius:3px;margin-bottom:12px}
.box-h{background:#f2f3f4;border-bottom:1px solid var(--line);padding:8px 12px;font-size:11px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:#4a5158;display:flex;justify-content:space-between;align-items:center;gap:8px}
.box-b{padding:10px 12px}
.box .grid{border:0}
.kv{margin:0;display:grid;grid-template-columns:140px 1fr;gap:6px 10px;font-size:13px}
.kv dt{color:var(--muted);font-weight:600;font-size:12px}
.kv dd{margin:0;word-break:break-word;white-space:pre-line}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:4px 14px}
.lines-t{width:100%;border-collapse:collapse;font-size:13px}
.lines-t th{background:var(--grid-h);text-align:left;padding:7px 8px;font-size:12px}
.lines-t td{padding:5px 6px;border-bottom:1px solid #eceef0;vertical-align:middle}
.lines-t input{width:100%;padding:6px 7px;border:1px solid #c6ccd2;border-radius:3px}
.lines-scroll{overflow-x:auto}
.sku-pick{position:relative}
.sku-list{position:absolute;top:100%;left:0;right:0;max-height:240px;overflow:auto;background:#fff;border:1px solid var(--line);box-shadow:0 6px 18px rgba(0,0,0,.15);z-index:20}
.sku-list button{display:block;width:100%;text-align:left;border:0;background:none;padding:7px 9px;cursor:pointer;font-size:12.5px;border-bottom:1px solid #f0f1f2}
.sku-list button:hover{background:#e9f4f5}
.err{color:#c0392b;font-weight:600}

/* ---------- dashboard ---------- */
.dash{padding:14px}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px;margin-bottom:14px}
.tile{background:#fff;border:1px solid var(--line);border-radius:3px;padding:12px 14px;text-decoration:none;color:var(--text);border-left:4px solid var(--teal);display:block}
.tile:hover{box-shadow:0 2px 10px rgba(0,0,0,.08)}
.tile .n{font-size:26px;font-weight:300;color:#2f353a;line-height:1.2}
.tile .t{font-size:11px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--muted)}
.tile.warn{border-left-color:var(--orange)}.tile.bad{border-left-color:#c0392b}.tile.pink{border-left-color:var(--pink)}
.dash-cols{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:12px}

/* ---------- modal, toast, busy ---------- */
.modal-bg{position:fixed;inset:0;background:rgba(30,34,38,.45);display:flex;align-items:center;justify-content:center;z-index:100;padding:14px}
.modal{background:#fff;border-radius:4px;width:100%;max-width:520px;max-height:92vh;overflow:auto;box-shadow:0 10px 40px rgba(0,0,0,.25)}
.modal-h{background:var(--menu);color:#fff;padding:10px 14px;font-weight:600;display:flex;justify-content:space-between}
.modal-h button{border:0;background:none;color:#fff;font-size:18px;cursor:pointer}
.modal-b{padding:14px}
.modal-f{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid var(--line);background:#fafbfc}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:#2f353a;color:#fff;padding:10px 16px;border-radius:4px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .2s;z-index:200;max-width:90vw}
.toast.on{opacity:1}.toast.bad{background:#c0392b}
.busy{position:fixed;top:0;left:0;right:0;height:3px;z-index:300;overflow:hidden}
.busy .bar{height:100%;width:40%;background:var(--pink);animation:busy 1s linear infinite}
@keyframes busy{from{transform:translateX(-100%)}to{transform:translateX(260%)}}
.loading{padding:40px;text-align:center;color:var(--muted)}

/* ---------- small screens ---------- */
@media (max-width:900px){
  .side{position:fixed;left:0;top:0;bottom:0;transform:translateX(-100%);transition:transform .2s;width:250px;--side-w:250px;box-shadow:4px 0 20px rgba(0,0,0,.2)}
  .shell.mob-open .side{transform:none}
  .side-scrim{display:none}
  .shell.mob-open .side-scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:25}
  .flyout{position:static;box-shadow:none;border:0;border-top:1px solid var(--line);min-width:0;background:#fafbfc}
  .fly-title{display:none}
  .flyout a{padding:10px 18px 10px 44px}
  .mob-menu{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border:0;background:var(--pink);color:#fff;flex:none;align-self:stretch;cursor:pointer}
  .mob-menu .ic{width:20px;height:20px}
  .topbar{padding-right:8px}
  .who .nm{display:none}
  .page{flex-direction:column}
  .filters{width:auto;border-right:0;border-bottom:1px solid var(--line);display:none}
  .page.show-filters .filters{display:block}
  .mob-filters{display:inline-flex}
  .gscroll{max-height:none}
  .dash-cols{grid-template-columns:minmax(0,1fr)}
  .kv{grid-template-columns:110px 1fr}
  .detail{padding:10px}
}
@media (max-width:520px){
  .tiles{grid-template-columns:1fr 1fr}
  .tile .n{font-size:22px}
  .tab{max-width:150px;padding:0 6px 0 10px}
  .gpager .info{width:100%;margin-left:0}
  .toolbar .btn{padding:5px 11px}
}
