:root{
  --bg:#0f1420; --card:#1a2233; --line:#28324a; --ink:#e8edf6; --dim:#93a1b8;
  --acc:#4fc3f7; --ok:#81c784; --warn:#ffb74d; --bad:#e57373; --push:#f06292;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,Roboto,'Segoe UI',sans-serif;font-size:15px}
header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--bg);z-index:5}
.brand{font-weight:800;font-size:18px}.brand span{color:var(--acc)}
.hdr-right{display:flex;gap:8px}
.hdr-right button{white-space:nowrap}
.view{padding:16px;max-width:640px;margin:0 auto}
.hidden{display:none!important}
h1{font-size:22px;margin:12px 0 4px}
.dim{color:var(--dim);font-size:13px}
input{width:100%;padding:13px 14px;margin:8px 0;border-radius:12px;border:1px solid var(--line);background:var(--card);color:var(--ink);font-size:16px}
input:focus{outline:none;border-color:var(--acc)}
button{padding:13px 18px;border-radius:12px;border:none;background:var(--acc);color:#082033;font-weight:700;font-size:15px;width:100%;margin-top:8px}
button.ghost{background:transparent;color:var(--dim);width:auto;padding:8px 12px;border:1px solid var(--line);font-weight:600}
button,.item,.net{touch-action:manipulation;transition:transform 80ms ease,filter 80ms ease,background-color 80ms ease,border-color 80ms ease}
button:active,.item:active,.net:active{transform:scale(.98);filter:brightness(1.16)}
button.ghost:active,.item:active,.dept:active,.sub:active,.net:active{background-color:#222d43;border-color:#41617a;color:var(--ink)}
button:focus-visible,.item:focus-visible,.net:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
@media(prefers-reduced-motion:reduce){button,.item,.net{transition:none}}
@media(max-width:390px){
  header{padding-left:12px;padding-right:12px}
  .hdr-right{gap:5px}
  button.ghost{padding-left:9px;padding-right:9px}
}
.err{color:var(--bad);font-size:13px}
.searchbar{position:sticky;top:57px;background:var(--bg);padding:4px 0 8px;z-index:4}
.item{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin-bottom:10px}
.item .top{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.item .code{font-size:12px;color:var(--dim);font-family:ui-monospace,monospace}
.photo-mark{display:inline-block;margin-left:5px;font-family:-apple-system,Roboto,'Segoe UI',sans-serif;font-size:13px;vertical-align:-1px}
.item .desc{font-weight:600;margin:2px 0}
.item .meta{display:flex;justify-content:space-between;align-items:center;margin-top:6px}
.price{font-weight:700}
.net{display:inline-block;font-size:11px;color:var(--dim);margin-left:8px;padding:2px 8px;border-radius:8px;background:#131a29;border:1px dashed var(--line)}
.net.revealed{color:var(--warn);border-style:solid}
.badge{font-size:11px;font-weight:700;padding:3px 9px;border-radius:9px;white-space:nowrap}
.new-item-badge{display:inline-block;margin:5px 0 3px;padding:4px 9px;border-radius:8px;
  background:#55460d;border:1px solid #8b7417;color:#ffe36e;font-size:11px;font-weight:800;
  letter-spacing:.2px}
.l-ready{background:#1d3b22;color:var(--ok)} .l-terbatas{background:#4a3a1a;color:var(--warn)}
.l-bo{background:#1c3550;color:var(--acc)} .l-kosong{background:#452224;color:var(--bad)}
.l-banyak{background:#243a55;color:#9ecfff} .l-melimpah{background:#4d1f33;color:var(--push)}
.l-langka{background:#3c2f52;color:#c7a6f5}
/* Grace 12-Aug: a pile the sales history says should be gone. Deliberately NOT the
   blue of "stok banyak" — the point of the flag is that this number is not a promise. */
.l-cek{background:#4a3a1a;color:var(--warn)}
#detail .photo{width:100%;border-radius:14px;margin:10px 0;background:var(--card)}
#detail table{width:100%;font-size:14px;border-collapse:collapse;margin-top:10px}
#detail td{padding:7px 4px;border-bottom:1px solid var(--line)}
#detail td:first-child{color:var(--dim);width:40%}
/* Part number readable at arms length (Graces dad, 28-Jul): near-title size;
   the h1 is 22px, so 19px keeps hierarchy while staying legible. */
#detail td.partno{font-size:19px;font-weight:700;font-family:ui-monospace,monospace;letter-spacing:.5px}

/* 20-Jul: enough-checker + on-the-way + activity view */
.otw{font-size:13px;color:var(--acc);margin:8px 0 0}
.enough{margin-top:16px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 14px}
.enough-row{display:flex;gap:8px;align-items:center}
.enough-row input{flex:1;margin:0}
.enough-row button{width:auto;padding:12px 18px}
#enoughResult{margin:8px 0 0;font-weight:700}
#enoughResult.ok{color:var(--ok)} #enoughResult.warn{color:var(--warn)} #enoughResult.err{color:var(--bad)}
.evt{font-size:13px;padding:7px 4px;border-bottom:1px solid var(--line)}

/* 20-Jul reply: department browse */
.bh{font-size:15px;color:var(--dim);margin:10px 0 8px;font-weight:600}
.dept-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.dept{display:flex;flex-direction:column;align-items:flex-start;gap:2px;background:var(--card);
  border:1px solid var(--line);border-radius:14px;padding:12px 14px;color:var(--ink);
  font-weight:600;font-size:14px;margin:0;text-align:left}
.dept .ic{font-size:20px}
.dept .ct{font-size:12px;color:var(--dim);font-weight:600}
.dept.featured{border-color:var(--acc)}
.dept.review{border-style:dashed;color:var(--dim)}
.sub{display:flex;justify-content:space-between;gap:10px;align-items:center;width:100%;
  background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;
  color:var(--ink);font-weight:600;font-size:13px;margin:0 0 8px;text-align:left}
.sub .ct{color:var(--dim);white-space:nowrap}
.crumb{display:flex;align-items:center;gap:10px;margin:4px 0 10px}
.crumb .title{font-weight:700;font-size:15px}
.crumb button{width:auto;margin:0}
.extras{font-size:12px;color:var(--dim);margin-top:6px;display:flex;gap:12px;flex-wrap:wrap}
.extras .warnx{color:var(--warn)}
.arrival-group{position:sticky;top:104px;z-index:2;margin:14px 0 8px;padding:7px 10px;background:var(--bg);border-bottom:1px solid var(--line);color:var(--acc);font-size:14px}
.size-filters{display:flex;gap:6px;position:sticky;top:58px;z-index:3;padding:7px 0;background:var(--bg)}
.size-filter{width:auto;flex:1;margin:0;padding:8px 6px;background:var(--card);color:var(--dim);border:1px solid var(--line);font-size:11px}
.size-filter.active{background:var(--acc);color:#082033;border-color:var(--acc)}
.vehicle-group{position:sticky;top:104px;z-index:2;margin:14px 0 4px;padding:7px 10px;background:var(--bg);border-bottom:1px solid var(--acc);color:var(--acc);font-size:14px}
.vehicle-size-group{margin:8px 0 6px;padding-left:10px;color:var(--warn);font-size:12px;letter-spacing:.4px}
.fitment-tag{color:#b8c8df}

/* 28-Jul auth phase 2: attribution watermark, banner, admin + activity filters */
/* pointer-events:none is load-bearing — the overlay covers every control on the
   page and must never intercept a tap. Opacity is a compromise: high enough to
   survive a phone photo of the screen, low enough to read prices through. */
#watermark{position:fixed;inset:0;z-index:9;pointer-events:none;overflow:hidden;
  display:flex;flex-wrap:wrap;align-content:flex-start;gap:26px 34px;padding:40px 20px;
  transform:rotate(-22deg) scale(1.7);transform-origin:center;user-select:none}
#watermark span{font-size:11px;font-weight:700;letter-spacing:.4px;white-space:nowrap;
  color:var(--ink);opacity:.08;font-family:ui-monospace,monospace}
@media(prefers-reduced-motion:reduce){#watermark{transform:rotate(-22deg) scale(1.7)}}
.banner{position:sticky;top:57px;z-index:6;margin:0;padding:10px 16px;background:#4a3a1a;
  color:var(--warn);font-size:13px;font-weight:600;text-align:center}
.sep{text-align:center;margin:14px 0 6px}
#googleBox{display:flex;flex-direction:column;align-items:center}
.filters{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:8px 0}
.filters select,.filters input{flex:1;min-width:120px;margin:0;padding:10px 12px;border-radius:12px;
  border:1px solid var(--line);background:var(--card);color:var(--ink);font-size:14px}
.filters button{margin:0}
.pager{display:flex;gap:10px;align-items:center;justify-content:center;margin:12px 0}
.pager button{width:auto;margin:0}
.pager button:disabled{opacity:.35}
label.chk{display:flex;gap:8px;align-items:center;font-size:13px;color:var(--dim);margin:10px 0 2px}
label.chk input{width:auto;margin:0}
#adminUsers .enough-row,#adminPending .enough-row{flex-wrap:wrap;margin-top:8px}
#adminUsers .enough-row button,#adminPending .enough-row button{width:auto;flex:0 0 auto;padding:9px 12px;font-size:13px}
