/* ==========================================================================
   CourierFlow — design system
   Visual language after the "Ship X" shipping system: deep forest-green shell,
   acid-yellow brand accent, light-green actives, pill everything,
   Plus Jakarta Sans. Top nav on desktop, floating pill tab bar on mobile.
   ========================================================================== */

:root{
  /* brand */
  --acid:#EBFF00;
  --leaf:#A8E665;
  --green:#317F38;
  --forest:#144419;
  --forest-2:#1B5623;
  --forest-3:#0E3212;

  /* surfaces */
  --canvas:#F1F6EC;
  --card:#FFFFFF;
  --card-2:#F7FAF3;
  --line:#E2EBDA;
  --line-2:#EDF3E7;

  /* ink */
  --ink:#10261A;
  --ink-2:#5A6D60;
  --ink-3:#8B9C90;
  --on-forest:#DDECD5;
  --on-forest-dim:#7E9A85;

  /* status (solid pills, white text — as per reference) */
  --st-delivered:#2E7D32;
  --st-transit:#3E92DE;
  --st-pending:#F08322;
  --st-waiting:#E0559B;
  --st-returned:#7A5CD6;
  --st-cancelled:#7C8A80;
  --st-failed:#E2483B;

  /* soft tints */
  --up:#1E7A3C;      --up-bg:#E6F6E6;
  --down:#D93A2B;    --down-bg:#FDECEA;
  --amber-bg:#FFF3D6; --amber:#B7791F;
  --indigo-bg:#E9EBFF; --indigo:#4F55C4;
  --leaf-bg:#EAF7DA;

  /* semantic aliases — views reference these in inline styles */
  --ok:var(--st-delivered);
  --danger:var(--st-failed);
  --warn:var(--amber);
  --info:var(--st-transit);
  --violet:var(--st-returned);
  --brand:var(--green);

  --r-xl:26px; --r-lg:20px; --r-md:14px; --r-sm:10px;
  --sh-1:0 1px 2px rgba(16,38,26,.05);
  --sh-2:0 2px 6px rgba(16,38,26,.05), 0 14px 30px -20px rgba(16,38,26,.28);
  --sh-3:0 30px 70px -28px rgba(16,38,26,.5);

  --font:"Plus Jakarta Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --safe-b:env(safe-area-inset-bottom,0px);
  --safe-t:env(safe-area-inset-top,0px);
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{margin:0;background:var(--forest);color:var(--ink);font-family:var(--font);
  font-size:14px;line-height:1.55;letter-spacing:-.006em;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overscroll-behavior-y:none}
h1,h2,h3,h4{margin:0;font-weight:700;letter-spacing:-.022em;line-height:1.2}
button{font-family:inherit}
a{color:var(--green);text-decoration:none}
.hidden{display:none !important}
.mono{font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--ink-3)}
.sub{color:var(--ink-2)}
.nowrap{white-space:nowrap}
.right{text-align:right}
.center{text-align:center}
/* Lucide sprite icons: inherit colour, align to the text baseline, never
   stretch. Size is set by the component, not by the icon. */
.ic{width:1.05em;height:1.05em;flex:0 0 auto;display:inline-block;vertical-align:-0.16em;
  fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;
  overflow:visible;pointer-events:none}
/* charts set their own stroke widths per element — do not impose one here */
.chart{stroke:none}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#C7D6BE;border-radius:20px;border:3px solid transparent;background-clip:content-box}

/* ============================ login ============================ */
.login{min-height:100%;display:grid;place-items:center;padding:24px;position:relative;overflow:hidden;
  background:radial-gradient(900px 600px at 15% 0%,#1E6B29 0%,var(--forest) 55%,var(--forest-3) 100%)}
.login-art{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.ast{position:absolute;color:rgba(235,255,0,.07)}
.ast-1{width:520px;height:520px;top:-140px;right:-120px}
.ast-2{width:340px;height:340px;bottom:-110px;left:-90px;color:rgba(168,230,101,.07)}
.login-card{position:relative;width:100%;max-width:430px;background:var(--card);border-radius:var(--r-xl);
  padding:36px 32px;box-shadow:var(--sh-3)}
.login-brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:16px;letter-spacing:-.02em}
.login-title{font-size:34px;font-weight:800;letter-spacing:-.035em;line-height:1.08;margin:22px 0 12px}
.login-sub{color:var(--ink-2);font-size:14.5px;margin:0 0 26px}
.login-note{margin:16px 0 0;font-size:12px;color:var(--ink-3);text-align:center;line-height:1.5}
.mark{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;flex:0 0 30px;
  background:var(--leaf);color:var(--forest)}
.mark svg{width:16px;height:16px}
.mark-lg{width:38px;height:38px;flex-basis:38px}
.mark-lg svg{width:20px;height:20px}

/* ============================ app shell ============================ */
.app{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;
  max-width:1680px;margin:0 auto;width:100%}

/* ---- top nav (desktop) ---- */
.topnav{background:var(--forest);position:sticky;top:0;z-index:40;padding:12px 16px 14px;
  padding-top:calc(12px + var(--safe-t))}
.topnav-in{display:flex;align-items:center;gap:10px}
.brand{display:flex;align-items:center;gap:9px;background:var(--card);border:0;border-radius:100px;
  padding:6px 16px 6px 6px;cursor:pointer;color:var(--forest);flex:0 0 auto}
.brand-name{font-weight:800;font-size:13.5px;letter-spacing:-.02em}
.navpills{display:flex;align-items:center;gap:4px;flex:1;min-width:0;overflow:hidden}
.np{display:inline-flex;align-items:center;gap:7px;padding:9px 15px;border-radius:100px;border:0;
  background:transparent;color:var(--on-forest-dim);font-size:11.5px;font-weight:700;
  letter-spacing:.055em;text-transform:uppercase;cursor:pointer;white-space:nowrap;transition:.15s}
.np svg{width:15px;height:15px}
.np:hover{background:var(--forest-2);color:var(--on-forest)}
.np.on{background:var(--leaf);color:var(--forest)}
.np .np-dot{width:6px;height:6px;border-radius:50%;background:var(--acid);margin-left:2px}
.np.on .np-dot{background:var(--forest)}

.topnav-right{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.searchbox{position:relative;display:flex;align-items:center;background:var(--forest-2);
  border-radius:100px;padding:0 14px;height:38px;width:210px;transition:width .2s}
.searchbox:focus-within{width:290px;background:var(--forest-3)}
.s-ico{display:grid;place-items:center;color:var(--on-forest-dim);flex:0 0 auto}
.s-ico svg{width:15px;height:15px}
/* wins over the generic input rule further down the sheet */
.searchbox input[type=search]{background:transparent;border:0;outline:none;color:var(--on-forest);
  font-family:inherit;font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  width:100%;height:36px;padding:0 0 0 9px;border-radius:0;box-shadow:none}
.searchbox input[type=search]:focus{box-shadow:none;border:0}
.searchbox input::placeholder{color:var(--on-forest-dim)}
.searchbox input::-webkit-search-cancel-button{-webkit-appearance:none}
.ico-btn{width:38px;height:38px;border-radius:50%;border:0;background:var(--forest-2);
  color:var(--on-forest);display:grid;place-items:center;cursor:pointer;position:relative;flex:0 0 auto}
.ico-btn:hover{background:var(--forest-3)}
.ico-btn svg{width:17px;height:17px}
.dot{position:absolute;top:-2px;right:-2px;background:var(--acid);color:var(--forest);border-radius:100px;
  font-size:10px;font-weight:800;padding:1px 5px;min-width:17px;line-height:1.5;
  border:2px solid var(--forest);font-variant-numeric:tabular-nums}
.avatar{width:38px;height:38px;border-radius:50%;border:2px solid var(--leaf);background:var(--green);
  color:#fff;font-weight:800;font-size:13px;cursor:pointer;flex:0 0 auto;display:grid;place-items:center;
  padding:0}
.btn-cta{height:38px;padding:0 18px;flex:0 0 auto}
.btn-cta .plus{font-size:14px}
.menu-btn{display:none}

/* ---- canvas ---- */
.canvas{flex:1;background:var(--canvas);border-radius:var(--r-xl) var(--r-xl) 0 0;
  margin:0 14px;padding:0;display:flex;flex-direction:column;min-width:0;overflow:hidden}
.view{flex:1;padding:26px 28px 40px}
.banner{display:flex;align-items:center;gap:11px;padding:13px 28px;font-size:13px;
  background:#FFF4E2;color:#8A4B0B;border-bottom:1px solid #F5E2C4}
.banner.err{background:#FDECEA;color:#A32A1D;border-bottom-color:#F6D6D1}
.banner .btn{margin-left:auto}

/* ---- mobile tab bar (floating pill) ---- */
.tabbar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:45;padding:0 14px;
  padding-bottom:calc(10px + var(--safe-b));pointer-events:none}
.tabbar-pill{display:flex;align-items:center;gap:2px;
  background:var(--forest);border-radius:100px;padding:6px;pointer-events:auto;
  box-shadow:0 14px 34px -10px rgba(16,38,26,.6)}
.tb{display:flex;align-items:center;justify-content:center;gap:7px;border:0;background:transparent;
  color:var(--on-forest-dim);border-radius:100px;height:44px;cursor:pointer;position:relative;
  font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;transition:.18s;
  padding:0;flex:1 1 0;min-width:0}
.tb svg{width:19px;height:19px;flex:0 0 19px}
.tb .tb-lbl{display:none}
.tb.on{background:var(--leaf);color:var(--forest);flex:2.4 1 0}
.tb.on .tb-lbl{display:inline;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tb .tb-badge{position:absolute;top:4px;right:9px;background:var(--acid);color:var(--forest);
  font-size:9px;font-weight:800;border-radius:100px;padding:0 4px;min-width:15px;line-height:15px;
  text-align:center}
.tb.on .tb-badge{display:none}

/* ============================ page header ============================ */
.page-head{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:20px}
.page-head h1{font-size:24px;font-weight:800;letter-spacing:-.03em}
.page-head .desc{color:var(--ink-2);font-size:13px;margin-top:5px;max-width:70ch}
.page-actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.subnav{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:20px}
.subnav.scroll{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;
  scrollbar-width:none;padding-bottom:2px;margin-left:-2px;padding-left:2px}
.subnav.scroll::-webkit-scrollbar{display:none}
.sn{padding:9px 17px;border-radius:100px;border:1px solid var(--line);background:var(--card);
  font-size:12.5px;font-weight:600;color:var(--ink-2);cursor:pointer;white-space:nowrap;transition:.14s}
.sn:hover{border-color:var(--green);color:var(--green)}
.sn.on{background:var(--forest);border-color:var(--forest);color:#fff;font-weight:700}
.sn .cnt{margin-left:6px;opacity:.7;font-variant-numeric:tabular-nums}

/* ============================ buttons ============================ */
.btn{height:40px;padding:0 18px;border-radius:100px;border:1px solid var(--line);background:var(--card);
  color:var(--ink);font-size:13px;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;
  justify-content:center;gap:7px;transition:.15s;white-space:nowrap;letter-spacing:-.01em}
.btn:hover{border-color:var(--green);color:var(--green)}
.btn:active{transform:scale(.985)}
.btn svg{width:15px;height:15px}
.btn-primary{background:var(--green);border-color:var(--green);color:#fff}
.btn-primary:hover{background:var(--forest-2);border-color:var(--forest-2);color:#fff}
.btn-acid{background:var(--acid);border-color:var(--acid);color:var(--forest)}
.btn-acid:hover{background:#DDF000;border-color:#DDF000;color:var(--forest)}
.btn-dark{background:var(--forest);border-color:var(--forest);color:#fff}
.btn-dark:hover{background:var(--forest-2);border-color:var(--forest-2);color:#fff}
.btn-danger{background:var(--st-failed);border-color:var(--st-failed);color:#fff}
.btn-danger:hover{background:#C93A2E;border-color:#C93A2E;color:#fff}
.btn-ghost{border-color:transparent;background:transparent;color:var(--ink-2)}
.btn-ghost:hover{background:var(--line-2);color:var(--ink)}
.btn-sm{height:34px;padding:0 14px;font-size:12.5px}
.btn-xs{height:29px;padding:0 12px;font-size:11.5px;gap:5px}
.btn-lg{height:48px;font-size:14.5px}
.btn-block{width:100%}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn:focus-visible,.np:focus-visible,.sn:focus-visible,.tb:focus-visible,.ico-btn:focus-visible{
  outline:2px solid var(--green);outline-offset:2px}

.btn-ok{background:var(--st-delivered);border-color:var(--st-delivered);color:#fff}
.btn-ok:hover{background:#256B29;border-color:#256B29;color:#fff}
/* neutral round button used inside drawers, modals and card heads */
.icon-btn{width:36px;height:36px;border-radius:50%;border:0;background:var(--line-2);color:var(--ink-2);
  display:grid;place-items:center;cursor:pointer;font-size:15px;flex:0 0 auto;line-height:1}
.icon-btn:hover{background:var(--line);color:var(--ink)}
.drawer-head .icon-btn{background:var(--forest-2);color:#fff}
.drawer-head .icon-btn:hover{background:var(--forest-3)}

/* ---- global search results ---- */
.search-results{position:absolute;top:46px;left:0;right:0;background:var(--card);border-radius:var(--r-md);
  box-shadow:var(--sh-3);max-height:min(430px,62vh);overflow:auto;z-index:50;min-width:300px;padding:6px}
.sr-item{padding:11px 13px;border-radius:var(--r-sm);cursor:pointer}
.sr-item:hover,.sr-item:active{background:var(--leaf-bg)}
.sr-title{font-weight:700;font-size:13px;color:var(--ink)}
.sr-sub{font-size:11.5px;color:var(--ink-3);margin-top:3px;font-weight:500}
.sr-empty{padding:18px;color:var(--ink-3);font-size:13px;text-align:center}

/* ============================ forms ============================ */
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:15px}
.field>span{font-size:12px;font-weight:700;color:var(--ink-2)}
.field .hint{font-weight:500;color:var(--ink-3);font-size:11.5px}
input[type=text],input[type=search],input[type=number],input[type=date],input[type=email],
input[type=password],select,textarea{
  height:44px;border:1px solid var(--line);border-radius:var(--r-sm);padding:0 13px;font-size:16px;
  font-family:inherit;background:var(--card);color:var(--ink);width:100%;appearance:none;font-weight:500}
@media(min-width:861px){
  input[type=text],input[type=search],input[type=number],input[type=date],input[type=email],
  input[type=password],select,textarea{height:38px;font-size:13px}
}
textarea{height:auto;padding:10px 13px;resize:vertical;line-height:1.55}
select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%235A6D60' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 13px center;padding-right:32px}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--green);
  box-shadow:0 0 0 3px rgba(49,127,56,.13)}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:0 15px}

/* ============================ cards ============================ */
.card{background:var(--card);border-radius:var(--r-lg);box-shadow:var(--sh-1);overflow:hidden}
.card+.card{margin-top:16px}
.card-head{padding:17px 20px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  border-bottom:1px solid var(--line-2)}
.card-head h3{font-size:15px;font-weight:800;letter-spacing:-.02em}
.card-head .sub{font-size:12px;color:var(--ink-3);margin-top:3px;font-weight:500}
.card-head .spacer{margin-left:auto}
.card-body{padding:20px}
.card-body.tight{padding:0}

/* ---- KPI ---- */
.kpis{display:grid;gap:14px;margin-bottom:18px}
.kpis.c7{grid-template-columns:repeat(7,minmax(0,1fr))}
.kpis.c6{grid-template-columns:repeat(6,minmax(0,1fr))}
.kpis.c4{grid-template-columns:repeat(4,minmax(0,1fr))}
.kpis.c3{grid-template-columns:repeat(3,minmax(0,1fr))}
.kpi{background:var(--card);border-radius:var(--r-lg);padding:17px 18px;box-shadow:var(--sh-1);
  position:relative;display:flex;flex-direction:column;min-width:0}
.kpi.click{cursor:pointer;transition:transform .16s,box-shadow .16s}
.kpi.click:hover{transform:translateY(-3px);box-shadow:var(--sh-2)}
.k-top{display:flex;align-items:flex-start;gap:10px;margin-bottom:11px}
.k-label{font-size:12px;color:var(--ink-2);font-weight:600;flex:1;min-width:0;line-height:1.35}
.k-badge{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;flex:0 0 36px}
.k-badge .ic{width:18px;height:18px;vertical-align:0}
.k-val{font-size:26px;font-weight:800;letter-spacing:-.035em;line-height:1.05;
  font-variant-numeric:tabular-nums}
.k-sub{font-size:11.5px;color:var(--ink-3);margin-top:6px;font-weight:500}
.k-delta{display:inline-flex;align-items:center;gap:4px;margin-top:9px;padding:3px 9px;
  border-radius:100px;font-size:11px;font-weight:800;width:fit-content;
  font-variant-numeric:tabular-nums}
.k-delta.up{background:var(--up-bg);color:var(--up)}
.k-delta.down{background:var(--down-bg);color:var(--down)}
.k-delta.flat{background:var(--line-2);color:var(--ink-2)}

/* ============================ action strip ============================
   The only place on the dashboard where colour means "act on this". Cards are
   number-first so the scale of a problem reads before the sentence does. */
.actions{display:grid;gap:12px;margin-bottom:22px;
  grid-template-columns:repeat(auto-fit,minmax(232px,1fr))}
.action{position:relative;display:flex;flex-direction:column;align-items:stretch;gap:0;
  text-align:left;border:1px solid transparent;border-radius:var(--r-lg);padding:16px 17px 15px;
  cursor:pointer;font-family:inherit;transition:transform .15s,box-shadow .15s;overflow:hidden}
.action:hover{transform:translateY(-2px);box-shadow:var(--sh-2)}
.action:active{transform:translateY(0)}
.action:focus-visible{outline:2px solid var(--forest);outline-offset:2px}
.a-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:13px}
.a-ico{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;color:#fff}
.a-ico .ic{width:17px;height:17px;vertical-align:0;stroke-width:2.2}
.a-go{width:16px;height:16px;opacity:.35;transition:transform .18s,opacity .18s}
.action:hover .a-go{opacity:.75;transform:translateX(3px)}
.a-val{font-size:27px;font-weight:800;letter-spacing:-.035em;line-height:1.05;
  font-variant-numeric:tabular-nums;display:block}
.a-val-sm{font-size:19px;letter-spacing:-.02em;padding-top:5px}
.a-unit{font-size:14px;font-weight:600;letter-spacing:-.01em;opacity:.7}
.a-label{display:block;font-size:13.5px;font-weight:700;margin-top:7px;letter-spacing:-.01em}
.a-meta{display:block;font-size:12px;margin-top:3px;opacity:.72;font-weight:500}

.action.a-danger{background:#FDEDEB;border-color:#F7D6D1;color:#8C2118}
.action.a-danger .a-ico{background:var(--st-failed)}
.action.a-warn{background:#FFF5E4;border-color:#F6E2C0;color:#8A4B0B}
.action.a-warn .a-ico{background:var(--st-pending)}
.action.a-info{background:#EAF2FC;border-color:#D3E4F7;color:#1B4E7E}
.action.a-info .a-ico{background:var(--st-transit)}

.all-clear{display:flex;align-items:center;gap:14px;background:var(--leaf-bg);
  border:1px solid #CFE9B4;border-radius:var(--r-lg);padding:17px 20px;margin-bottom:22px;color:#1F5C22}
.all-clear .ic{width:26px;height:26px;flex:0 0 26px;vertical-align:0;stroke-width:2.2}
.all-clear strong{display:block;font-size:14.5px;font-weight:700}
.all-clear span{display:block;font-size:13px;opacity:.8;margin-top:2px}

/* Phones: keep the strip compact so the KPIs are still reachable without a
   long scroll. Two up, no secondary line, tighter type. */
@media (max-width:860px){
  .actions{grid-template-columns:1fr 1fr;gap:9px;margin-bottom:16px}
  .action{padding:12px 13px}
  .a-top{margin-bottom:9px}
  .a-val{font-size:19px;letter-spacing:-.03em}
  .a-val-sm{font-size:14px;padding-top:2px}
  .a-unit{font-size:11.5px}
  .a-label{font-size:12px;margin-top:5px;line-height:1.25}
  .a-meta{display:none}
  .a-ico{width:28px;height:28px;border-radius:9px}
  .a-ico .ic{width:15px;height:15px}
  .a-go{width:14px;height:14px}
  .all-clear{padding:14px 16px;margin-bottom:16px}
}
@media (max-width:340px){
  .actions{grid-template-columns:1fr}
}

.sec-label{font-size:11px;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-3);
  font-weight:800;margin:6px 0 11px}

/* ---- icon sizing per context ---- */
.np .ic,.tb .ic,.sheet-item .ic{width:17px;height:17px;vertical-align:0}
.tb .ic{width:19px;height:19px}
.ico-btn .ic{width:17px;height:17px;vertical-align:0}
.btn .ic{width:15px;height:15px}
.brand .mark .ic{width:16px;height:16px;vertical-align:0}
.mark-lg .ic{width:20px;height:20px}
.s-ico .ic{width:15px;height:15px;vertical-align:0;opacity:.85}
.k-delta .ic{width:12px;height:12px;stroke-width:2.6;margin-right:2px}
.alert-ico{display:grid;place-items:center;width:20px;flex:0 0 20px}
.alert-ico .ic{width:17px;height:17px;vertical-align:0}
.note .ic{vertical-align:-0.15em}
.chev{opacity:.45;width:15px;height:15px;flex:0 0 15px}
.t-empty .e-ico .ic{width:30px;height:30px;stroke-width:1.5;vertical-align:0}
.t-empty{display:flex;flex-direction:column;align-items:center;gap:10px}
.t-empty .e-ico{opacity:.35;display:block}
.list-ico .ic{width:16px;height:16px;vertical-align:0}
.dz-icon .ic{width:34px;height:34px;stroke-width:1.5;color:var(--ink-3);vertical-align:0}
.tl-dot .ic{width:9px;height:9px;stroke-width:3.4;vertical-align:0}
.lock-ico .ic{width:44px;height:44px;stroke-width:1.4;color:var(--ink-3);vertical-align:0}
.role-lock .lock-ico{font-size:0}
.icon-btn .ic{width:15px;height:15px;vertical-align:0}
.sheet-item .pill{font-variant-numeric:tabular-nums}
.cols{display:grid;gap:16px;margin-bottom:16px}
.cols.c2{grid-template-columns:1fr 1fr}
.cols.c3{grid-template-columns:repeat(3,1fr)}
.cols.a21{grid-template-columns:1.9fr 1fr}
.cols.a12{grid-template-columns:1fr 1.9fr}
.cols>.card{margin-top:0}

/* ============================ badges ============================ */
.badge{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:100px;
  font-size:11.5px;font-weight:700;white-space:nowrap;line-height:1.5;letter-spacing:-.005em}
.b-solid{color:#fff}
.b-ok{background:var(--st-delivered);color:#fff}
.b-info{background:var(--st-transit);color:#fff}
.b-brand{background:var(--green);color:#fff}
.b-warn{background:var(--st-pending);color:#fff}
.b-danger{background:var(--st-failed);color:#fff}
.b-violet{background:var(--st-returned);color:#fff}
.b-pink{background:var(--st-waiting);color:#fff}
.b-grey{background:var(--st-cancelled);color:#fff}
.b-soft{background:var(--line-2);color:var(--ink-2)}
.b-leaf{background:var(--leaf);color:var(--forest)}
.b-acid{background:var(--acid);color:var(--forest)}

/* ============================ tables ============================ */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{text-align:left;padding:13px 16px;background:var(--card-2);
  font-size:11px;letter-spacing:.02em;color:var(--ink-2);font-weight:700;white-space:nowrap;
  border-bottom:1px solid var(--line)}
table.tbl th:first-child{border-radius:0}
table.tbl td{padding:13px 16px;border-bottom:1px solid var(--line-2);vertical-align:middle}
table.tbl tbody tr:last-child td{border-bottom:0}
table.tbl tbody tr:hover{background:var(--card-2)}
table.tbl tbody tr.click{cursor:pointer}
table.tbl tr.row-danger td{background:#FEF6F5}
table.tbl tr.row-warn td{background:#FFF9F0}
.t-empty{padding:54px 24px;text-align:center;color:var(--ink-3)}
.t-empty .e-ico{font-size:34px;display:block;margin-bottom:10px;opacity:.55}
.t-strong{font-weight:700}
.tfoot td{font-weight:800;background:var(--card-2);border-top:2px solid var(--line)}

.toolbar{display:flex;gap:9px;flex-wrap:wrap;align-items:center;padding:15px 20px;
  border-bottom:1px solid var(--line-2)}
.toolbar input[type=search],.toolbar input[type=text]{width:240px}
.toolbar select{width:auto;min-width:145px}
.chips{display:flex;gap:7px;flex-wrap:wrap}
.chips.scroll{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;
  scrollbar-width:none;padding-bottom:2px}
.chips.scroll::-webkit-scrollbar{display:none}
.chip{padding:8px 15px;border-radius:100px;border:1px solid var(--line);background:var(--card);
  font-size:12.5px;font-weight:600;cursor:pointer;color:var(--ink-2);white-space:nowrap;transition:.14s}
.chip:hover{border-color:var(--green);color:var(--green)}
.chip.on{background:var(--leaf);border-color:var(--leaf);color:var(--forest);font-weight:700}
.pager{display:flex;align-items:center;gap:9px;padding:14px 20px;border-top:1px solid var(--line-2);
  font-size:12.5px;color:var(--ink-2);flex-wrap:wrap}
.pager .spacer{margin-left:auto}

/* ============================ charts ============================ */
.chart{width:100%;display:block;overflow:visible}
.chart .grid-line{stroke:var(--line);stroke-width:1}
.chart .axis-txt{fill:var(--ink-3);font-size:10.5px;font-weight:600;stroke:none}
.legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:14px;font-size:12px;color:var(--ink-2);
  font-weight:600}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block;margin-right:6px}
.donut-center{text-anchor:middle}
.donut-center .dc-val{font-size:25px;font-weight:800;fill:var(--ink);stroke:none}
.donut-center .dc-lab{font-size:10.5px;fill:var(--ink-3);font-weight:600;stroke:none}

/* ============================ timeline ============================ */
.timeline{position:relative;padding-left:28px}
.timeline:before{content:"";position:absolute;left:8px;top:7px;bottom:7px;width:2px;background:var(--line)}
.tl-item{position:relative;padding:0 0 19px}
.tl-dot{position:absolute;left:-26px;top:2px;width:18px;height:18px;border-radius:50%;
  background:var(--card);border:2px solid var(--line);display:grid;place-items:center;font-size:8px}
.tl-item.done .tl-dot{background:var(--green);border-color:var(--green);color:#fff}
.tl-item.current .tl-dot{background:var(--acid);border-color:var(--acid);color:var(--forest);
  box-shadow:0 0 0 4px rgba(235,255,0,.25)}
.tl-title{font-weight:700;font-size:13.5px}
.tl-meta{font-size:12px;color:var(--ink-3);font-weight:500}

/* ============================ sheet / drawer / modal ============================ */
.sheet{position:fixed;inset:0;background:rgba(16,38,26,.5);z-index:70;display:flex;
  align-items:flex-end;justify-content:center;backdrop-filter:blur(2px)}
.sheet-panel{width:min(560px,100%);background:var(--canvas);border-radius:var(--r-xl) var(--r-xl) 0 0;
  max-height:88dvh;overflow-y:auto;padding:10px 14px calc(20px + var(--safe-b));
  animation:up .24s cubic-bezier(.2,.85,.3,1)}
@keyframes up{from{transform:translateY(26px);opacity:.5}to{transform:none;opacity:1}}
.sheet-grab{width:38px;height:4px;border-radius:100px;background:var(--line);margin:6px auto 14px}
.sheet-group{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);
  font-weight:800;padding:12px 10px 7px}
.sheet-item{display:flex;align-items:center;gap:12px;padding:13px 14px;border-radius:var(--r-md);
  background:var(--card);margin-bottom:7px;cursor:pointer;font-size:14px;font-weight:600}
.sheet-item:hover{background:var(--leaf-bg)}
.sheet-item.on{background:var(--leaf);color:var(--forest);font-weight:700}
.sheet-item svg{width:18px;height:18px;flex:0 0 18px}
.sheet-item .pill{margin-left:auto;background:var(--st-failed);color:#fff;border-radius:100px;
  padding:1px 8px;font-size:11px;font-weight:800}

.drawer{position:fixed;inset:0;background:rgba(16,38,26,.5);z-index:60;display:flex;justify-content:flex-end}
.drawer-panel{width:min(700px,100%);background:var(--canvas);height:100%;overflow-y:auto;
  animation:slide .2s cubic-bezier(.2,.8,.3,1);-webkit-overflow-scrolling:touch}
@keyframes slide{from{transform:translateX(30px);opacity:.5}to{transform:none;opacity:1}}
.drawer-head{position:sticky;top:0;background:var(--forest);color:#fff;padding:18px 22px;
  display:flex;align-items:center;gap:12px;z-index:2}
.drawer-head h3{font-size:17px;font-weight:800;letter-spacing:-.02em}
.drawer-head .ico-btn{background:var(--forest-2)}
.drawer-body{padding:20px;padding-bottom:calc(28px + var(--safe-b))}
.modal{position:fixed;inset:0;background:rgba(16,38,26,.5);z-index:80;display:grid;place-items:center;
  padding:20px}
.modal-panel{background:var(--card);border-radius:var(--r-xl);box-shadow:var(--sh-3);
  width:min(720px,100%);max-height:88vh;overflow-y:auto;animation:up .19s ease}
.modal-head{padding:20px 22px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;gap:10px}
.modal-head h3{font-size:17px;font-weight:800}
.modal-body{padding:22px}
.modal-foot{padding:16px 22px;border-top:1px solid var(--line-2);display:flex;gap:9px;
  justify-content:flex-end;flex-wrap:wrap}

/* ============================ misc ============================ */
.dl{display:grid;grid-template-columns:minmax(125px,auto) 1fr;gap:10px 18px;font-size:13px}
.dl dt{color:var(--ink-3);font-size:12px;font-weight:600}
.dl dd{margin:0;font-weight:600}
.stat-row{display:flex;justify-content:space-between;gap:12px;padding:11px 0;
  border-bottom:1px solid var(--line-2);font-size:13px}
.stat-row:last-child{border-bottom:0}
.stat-row .v{font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.stat-row.total{border-top:2px solid var(--line);margin-top:5px;padding-top:13px;font-weight:800;
  font-size:14px}
.bar-track{height:8px;border-radius:100px;background:var(--line-2);overflow:hidden;margin-top:8px}
.bar-fill{height:100%;border-radius:100px;background:var(--green);transition:width .6s cubic-bezier(.2,.8,.3,1)}
.note{padding:14px 16px;border-radius:var(--r-md);font-size:12.5px;line-height:1.55;font-weight:500}
.note-info{background:#E9F1FB;color:#1B4E7E}
.note-warn{background:#FFF4E2;color:#8A4B0B}
.note-ok{background:var(--leaf-bg);color:#1F5C22}
.note-danger{background:#FDECEA;color:#A32A1D}
.dropzone{border:2px dashed var(--line);border-radius:var(--r-lg);padding:38px 22px;text-align:center;
  background:var(--card-2);cursor:pointer;transition:.16s}
.dropzone:hover,.dropzone.over{border-color:var(--green);background:var(--leaf-bg)}
.dropzone .dz-icon{font-size:32px}
.dropzone .dz-title{font-weight:800;margin-top:10px;font-size:15px}
.dropzone .dz-sub{color:var(--ink-3);font-size:12.5px;margin-top:5px}
.list-row{display:flex;gap:13px;align-items:flex-start;padding:15px 20px;
  border-bottom:1px solid var(--line-2)}
.list-row:last-child{border-bottom:0}
.list-row.unread{background:var(--leaf-bg)}
.list-ico{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;flex:0 0 34px;
  font-size:15px}
.list-main{flex:1;min-width:0}
.list-title{font-weight:700;font-size:13.5px}
.list-sub{font-size:12px;color:var(--ink-3);margin-top:3px;font-weight:500}
.mask{letter-spacing:.14em}
.toasts{position:fixed;right:16px;bottom:calc(16px + var(--safe-b));z-index:95;display:flex;
  flex-direction:column;gap:9px}
.toast{background:var(--forest);color:var(--on-forest);border-radius:100px;padding:13px 20px;
  font-size:13px;font-weight:600;box-shadow:var(--sh-3);animation:up .18s ease;
  max-width:min(360px,calc(100vw - 32px))}
.toast.ok{background:var(--green);color:#fff}
.toast.err{background:var(--st-failed);color:#fff}
.role-lock{display:grid;place-items:center;min-height:52vh;text-align:center;color:var(--ink-2);padding:24px}
.role-lock .lock-ico{font-size:46px;margin-bottom:12px}
.role-lock h2{font-size:22px;margin-bottom:8px}
.courier-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;
  vertical-align:middle}

/* ============================ responsive ============================ */
@media (max-width:1400px){
  .kpis.c7,.kpis.c6{grid-template-columns:repeat(4,minmax(0,1fr))}
  .brand-name{display:none}
  .brand{padding:6px}
}
@media (max-width:1180px){
  .navpills{display:none}
  .brand-name{display:inline}
  .brand{padding:6px 16px 6px 6px}
  .menu-btn{display:grid}
  .searchbox{width:180px}
}
@media (max-width:1024px){
  .cols.c3,.cols.a21,.cols.a12,.cols.c2{grid-template-columns:1fr}
  .kpis.c4{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:860px){
  .topnav{padding:10px 12px 12px;padding-top:calc(10px + var(--safe-t))}
  .btn-cta,.avatar{display:none}
  /* let the search box absorb the remaining width instead of forcing overflow */
  .topnav-in{min-width:0}
  .topnav-right{flex:1 1 auto;min-width:0}
  .searchbox{flex:1 1 auto;width:auto;min-width:0}
  .searchbox:focus-within{width:auto}
  .searchbox input{min-width:0}
  .tabbar{display:block}
  .canvas{margin:0;border-radius:var(--r-xl) var(--r-xl) 0 0}
  .view{padding:18px 16px calc(96px + var(--safe-b))}
  .banner{padding:11px 16px;font-size:12.5px;align-items:flex-start}
  .banner>span:nth-child(2){display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;
    overflow:hidden;line-height:1.45}
  .banner .btn{margin-left:0;flex:0 0 auto;align-self:center}
  .kpis{gap:11px;margin-bottom:15px}
  .kpis.c7,.kpis.c6,.kpis.c4,.kpis.c3{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kpi{padding:14px}
  .k-val{font-size:21px}
  .k-badge{width:30px;height:30px;flex-basis:30px;border-radius:9px;font-size:13px}
  .cols{gap:13px;margin-bottom:13px}
  .page-head{margin-bottom:15px;align-items:flex-start;gap:12px}
  .page-head h1{font-size:20px}
  .page-actions{margin-left:0;width:100%}
  .page-actions .btn{flex:1}
  .grid-2{grid-template-columns:1fr}
  .toolbar{padding:14px 16px}
  .toolbar input[type=search],.toolbar input[type=text],.toolbar select{width:100%}
  .card-body{padding:16px}
  .card-head{padding:16px}
  .dl{grid-template-columns:1fr;gap:0}
  .dl dt{margin-top:12px}
  .drawer{align-items:flex-end}
  .drawer-panel{width:100%;border-radius:var(--r-xl) var(--r-xl) 0 0;height:94dvh;margin-top:auto;
    animation:up .24s cubic-bezier(.2,.85,.3,1)}
  .modal{padding:0;align-items:flex-end}
  .modal-panel{border-radius:var(--r-xl) var(--r-xl) 0 0;max-height:92dvh;width:100%}
  .modal-foot{position:sticky;bottom:0;background:var(--card);padding-bottom:calc(16px + var(--safe-b))}
  .modal-foot .btn{flex:1}

  /* tables → stacked cards */
  .tbl.responsive{display:block}
  .tbl.responsive thead{display:none}
  .tbl.responsive tbody,.tbl.responsive tr,.tbl.responsive td{display:block;width:100%}
  .tbl.responsive tfoot{display:block}
  .tbl.responsive tfoot tr{border:0}
  .tbl.responsive tr{border:1px solid var(--line);border-radius:var(--r-md);margin:11px 16px;
    padding:13px 15px;background:var(--card)}
  .tbl.responsive tr:hover{background:var(--card)}
  .tbl.responsive tr.row-danger{border-left:3px solid var(--st-failed)}
  .tbl.responsive tr.row-warn{border-left:3px solid var(--st-pending)}
  .tbl.responsive td{border:0;padding:5px 0;display:flex;align-items:center;
    justify-content:space-between;gap:12px;text-align:right}
  .tbl.responsive td:before{content:attr(data-label);flex:0 0 auto;color:var(--ink-3);font-size:11px;
    font-weight:700;text-align:left}
  .tbl.responsive td[data-label=""]:before{display:none}
  .tbl.responsive td.cell-primary{justify-content:flex-start;text-align:left;font-size:15px;
    font-weight:800;padding-bottom:9px;margin-bottom:6px;border-bottom:1px solid var(--line-2)}
  .tbl.responsive td.cell-primary:before{display:none}
  .tbl.responsive td.cell-actions{justify-content:flex-end;padding-top:10px;margin-top:7px;
    border-top:1px solid var(--line-2)}
  .tbl.responsive td.cell-actions:before{display:none}
  .tbl.responsive .tfoot td{background:transparent}
  .table-scroll{overflow-x:visible}
}
@media (max-width:420px){
  .kpis.c7,.kpis.c6,.kpis.c4,.kpis.c3{grid-template-columns:1fr 1fr}
  .k-val{font-size:19px}
  .tb svg{width:18px;height:18px}
  .tb{font-size:10px}
}
@media print{
  body{background:#fff}
  .topnav,.tabbar,.page-actions,.toolbar,.pager,.subnav{display:none !important}
  .canvas{margin:0;border-radius:0;background:#fff}
  .view{padding:0}
  .card{box-shadow:none;border:1px solid #ccc;break-inside:avoid}
}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms !important;transition-duration:.01ms !important}
}
