:root{
  --primary:#1f5c34; --primary-dark:#153f24; --primary-light:#e7f2ea;
  --accent:#c9a24b;
  --bg:#f5f6f4; --panel:#ffffff; --border:#e2e5e1;
  --text:#1c1e1c; --muted:#6d756c; --danger:#b3261e;
  --radius:10px; --radius-lg:16px;
  --sidebar-w:240px;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;background:var(--bg);color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",Arial,sans-serif;}
a{color:inherit;}
button{font-family:inherit;}

/* ---------- Top bar ---------- */
.topbar{position:sticky;top:0;z-index:30;background:var(--primary-dark);color:#fff;padding:10px 18px;
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;box-shadow:0 2px 10px rgba(0,0,0,.15);}
.brand{display:flex;flex-direction:column;line-height:1.15;margin-right:8px;white-space:nowrap;}
.brand .zh{font-size:16px;font-weight:700;letter-spacing:.5px;}
.brand .en{font-size:10.5px;color:#cfe0d3;letter-spacing:.5px;}
.search-wrap{flex:1 1 320px;position:relative;}
.search-wrap input{width:100%;padding:9px 14px 9px 34px;border-radius:999px;border:none;font-size:14px;outline:none;}
.search-wrap::before{content:"🔍";position:absolute;left:12px;top:50%;transform:translateY(-50%);font-size:13px;opacity:.6;}
.stats-line{display:flex;gap:14px;font-size:11.5px;color:#cfe0d3;flex-wrap:wrap;}
.stats-line b{color:#fff;}
.boq-btn{background:var(--accent);color:#25200a;border:none;padding:9px 16px;border-radius:999px;font-size:13px;
  font-weight:700;cursor:pointer;white-space:nowrap;}
.boq-btn .count{background:#25200a;color:var(--accent);border-radius:999px;padding:1px 7px;margin-left:6px;font-size:11px;}

/* ---------- Layout ---------- */
.layout{display:flex;align-items:flex-start;}
.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);position:sticky;top:56px;
  max-height:calc(100vh - 56px);overflow-y:auto;padding:14px 8px 40px;border-right:1px solid var(--border);}
.sidebar h4{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin:14px 10px 6px;}
.nav-item{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border-radius:8px;
  cursor:pointer;font-size:13.5px;color:var(--text);}
.nav-item:hover{background:var(--primary-light);}
.nav-item.active{background:var(--primary);color:#fff;font-weight:600;}
.nav-item .cnt{font-size:11px;color:var(--muted);}
.nav-item.active .cnt{color:#dfeee3;}
.nav-sub{padding-left:14px;}
.nav-sub .nav-item{font-size:12.5px;padding:6px 10px;}

.main{flex:1 1 auto;min-width:0;padding:14px 18px 60px;}

/* ---------- Filter bar ---------- */
.filterbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;background:var(--panel);
  border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;margin-bottom:12px;}
.filterbar select, .filterbar input[type=number]{padding:7px 9px;border-radius:7px;border:1px solid var(--border);
  font-size:12.5px;background:#fff;}
.filterbar input[type=number]{width:80px;}
.filterbar label.chk{display:flex;align-items:center;gap:5px;font-size:12.5px;color:var(--muted);}
.view-toggle{margin-left:auto;display:flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;}
.view-toggle button{border:none;background:#fff;padding:7px 14px;font-size:12.5px;cursor:pointer;color:var(--muted);}
.view-toggle button.active{background:var(--primary);color:#fff;}
.result-line{font-size:12px;color:var(--muted);margin-bottom:10px;}

/* ---------- Card grid ---------- */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px;}
.mcard{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;
  cursor:pointer;display:flex;flex-direction:column;transition:box-shadow .15s,transform .15s;}
.mcard:hover{box-shadow:0 8px 20px rgba(0,0,0,.10);transform:translateY(-2px);}
.mcard .imgbox{width:100%;aspect-ratio:4/3;background:#eef1ee;position:relative;overflow:hidden;}
.mcard .imgbox img{width:100%;height:100%;object-fit:cover;display:block;}
.mcard .imgbox .noimg{display:flex;align-items:center;justify-content:center;height:100%;color:#a7b0a7;font-size:12px;}
.mcard .badge{position:absolute;top:8px;left:8px;background:var(--primary);color:#fff;font-size:10.5px;
  padding:2px 8px;border-radius:999px;}
.mcard .badge.promo{background:var(--danger);}
.mcard .body{padding:10px 12px 12px;display:flex;flex-direction:column;gap:3px;flex:1;}
.mcard .name-zh{font-size:14px;font-weight:700;line-height:1.3;}
.mcard .name-fr{font-size:11.5px;color:var(--muted);line-height:1.25;}
.mcard .name-latin{font-size:11px;font-style:italic;color:#7a8a7c;}
.mcard .spec-row{font-size:11px;color:var(--muted);margin-top:2px;}
.mcard .cat-chip{align-self:flex-start;font-size:10px;background:var(--primary-light);color:var(--primary);
  padding:2px 7px;border-radius:999px;margin-top:2px;}
.mcard .price-row{margin-top:auto;padding-top:6px;display:flex;align-items:baseline;gap:8px;}
.mcard .price{font-size:16px;font-weight:800;color:var(--primary);}
.mcard .old-price{font-size:11px;color:#aaa;text-decoration:line-through;}
.mcard .pid{font-size:10px;color:#a7b0a7;margin-top:2px;}
.mcard .add-boq{margin-top:8px;border:1px solid var(--primary);color:var(--primary);background:#fff;
  border-radius:8px;padding:6px 0;font-size:12px;cursor:pointer;font-weight:600;}
.mcard .add-boq:hover{background:var(--primary-light);}

/* ---------- Table view ---------- */
.mtable{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--border);
  border-radius:var(--radius);overflow:hidden;font-size:12.5px;}
.mtable th{background:var(--primary-light);color:var(--primary-dark);text-align:left;padding:8px 10px;
  position:sticky;top:0;font-size:11.5px;text-transform:uppercase;letter-spacing:.3px;}
.mtable td{padding:7px 10px;border-top:1px solid var(--border);vertical-align:middle;}
.mtable tr:hover{background:#fafbf9;}
.mtable img.thumb-sm{width:44px;height:44px;object-fit:cover;border-radius:6px;background:#eef1ee;}
.mtable .name-zh{font-weight:600;}
.mtable .name-fr{color:var(--muted);font-size:11.5px;}
.mtable button.add-boq-sm{border:1px solid var(--primary);color:var(--primary);background:#fff;border-radius:6px;
  padding:4px 9px;font-size:11.5px;cursor:pointer;}

.pager{display:flex;justify-content:center;gap:8px;margin-top:20px;}
.pager button{border:1px solid var(--border);background:#fff;border-radius:8px;padding:7px 12px;font-size:12.5px;
  cursor:pointer;}
.pager button.active{background:var(--primary);color:#fff;border-color:var(--primary);}
.pager button:disabled{opacity:.4;cursor:default;}

.empty{padding:60px 20px;text-align:center;color:var(--muted);}

/* ---------- Modal / detail overlay ---------- */
.overlay{position:fixed;inset:0;background:rgba(10,20,12,.6);display:none;align-items:center;justify-content:center;
  z-index:100;padding:16px;}
.overlay.show{display:flex;}
.modal{background:#fff;border-radius:var(--radius-lg);max-width:880px;width:100%;max-height:90vh;overflow-y:auto;}
.modal-close{position:sticky;top:0;display:flex;justify-content:flex-end;padding:10px 10px 0;background:#fff;z-index:2;}
.modal-close button{border:none;background:#f1f2f1;width:32px;height:32px;border-radius:50%;font-size:15px;cursor:pointer;}

/* BOQ panel */
.boq-panel{position:fixed;top:0;right:0;bottom:0;width:min(420px,100%);background:#fff;z-index:110;
  box-shadow:-6px 0 24px rgba(0,0,0,.18);transform:translateX(100%);transition:transform .2s ease;
  display:flex;flex-direction:column;}
.boq-panel.show{transform:translateX(0);}
.boq-header{padding:14px 16px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;}
.boq-header h3{margin:0;font-size:15px;}
.boq-list{flex:1;overflow-y:auto;padding:10px 14px;}
.boq-item{border-bottom:1px solid var(--border);padding:10px 0;display:flex;gap:10px;}
.boq-item img{width:52px;height:52px;object-fit:cover;border-radius:6px;background:#eef1ee;flex-shrink:0;}
.boq-item .info{flex:1;min-width:0;}
.boq-item .info .n{font-size:12.5px;font-weight:600;}
.boq-item .row2{display:flex;gap:6px;margin-top:6px;align-items:center;flex-wrap:wrap;}
.boq-item input{border:1px solid var(--border);border-radius:6px;padding:4px 6px;font-size:12px;}
.boq-item input.qty{width:44px;text-align:center;}
.boq-item input.unit{width:52px;}
.boq-item input.remark{flex:1;min-width:80px;}
.boq-item .qtybtn{border:1px solid var(--border);background:#fff;border-radius:6px;width:22px;height:22px;
  line-height:1;cursor:pointer;font-size:14px;color:var(--primary);}
.boq-item .remove{border:none;background:none;color:var(--danger);cursor:pointer;font-size:12px;margin-left:auto;}
.boq-item .linecost{font-size:12px;font-weight:700;color:var(--primary);margin-top:4px;}
.boq-footer{padding:12px 16px;border-top:1px solid var(--border);}
.boq-total{display:flex;justify-content:space-between;font-size:14px;font-weight:700;margin-bottom:10px;}
.boq-actions{display:flex;gap:8px;}
.boq-actions button{flex:1;padding:9px 0;border-radius:8px;font-size:12.5px;cursor:pointer;}
.boq-actions .export{background:var(--primary);color:#fff;border:none;}
.boq-actions .clear{background:#fff;border:1px solid var(--border);color:var(--muted);}
.backdrop{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:105;display:none;}
.backdrop.show{display:block;}

/* Variant picker (cascading pills) */
.vp-row{margin-bottom:14px;}
.vp-label{font-size:12.5px;color:var(--muted);margin-bottom:6px;font-weight:600;}
.vp-pills{display:flex;flex-wrap:wrap;gap:8px;}
.vp-pill{border:1.5px solid var(--border);background:#fff;color:var(--text);padding:7px 14px;
  border-radius:999px;font-size:13px;cursor:pointer;transition:all .12s ease;}
.vp-pill:hover{border-color:var(--primary);}
.vp-pill.active{border-color:var(--primary);background:var(--primary-light);color:var(--primary);font-weight:600;}
.vp-summary{background:var(--primary-light);border-radius:10px;padding:12px 14px;margin:14px 0;
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;}
.vp-summary .price{font-size:20px;font-weight:800;color:var(--primary);}
.vp-summary .stock{font-size:12px;color:var(--muted);}
.vp-incomplete{color:var(--muted);font-size:13px;padding:10px 0;}
.qty-stepper{display:flex;align-items:center;gap:8px;}
.qty-stepper button{border:1px solid var(--border);background:#fff;width:32px;height:32px;border-radius:8px;
  font-size:16px;cursor:pointer;color:var(--primary);}
.qty-stepper input{width:52px;text-align:center;border:1px solid var(--border);border-radius:8px;
  padding:6px 4px;font-size:14px;}

@media (max-width:860px){
  .sidebar{position:fixed;left:0;top:0;bottom:0;z-index:60;background:#fff;transform:translateX(-100%);
    transition:transform .2s ease;box-shadow:4px 0 20px rgba(0,0,0,.15);top:0;max-height:100vh;padding-top:60px;}
  .sidebar.show{transform:translateX(0);}
  .menu-btn{display:inline-flex !important;}
  .stats-line{display:none;}
  .grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;}
  .mtable{font-size:11px;}
}
.menu-btn{display:none;background:none;border:none;color:#fff;font-size:20px;cursor:pointer;padding:0 4px;}
