/* =====================================================================
   TTP VẬN HÀNH — bảng điều khiển vận hành
   Nguyên tắc: dày đặc thông tin, mã đơn luôn ở font đẳng cự,
   mỗi dòng có thanh SLA bên trái để quét bằng mắt.
   ===================================================================*/
:root{
  --ink:#12161C; --ink-2:#1A212B; --ink-3:#2A3442;
  --paper:#F4F6F8; --surface:#FFFFFF; --line:#DCE2E8;
  --text:#1B2430; --text-2:#5A6675; --text-3:#8C96A3;
  --primary:#0F5F6B; --primary-d:#0B474F;
  --ok:#1B7A4B; --run:#1F5FA8; --new:#5A6675; --warn:#A96500; --bad:#B3261E; --hl:#D4A72C;
  --r:8px; --sh:0 1px 2px rgba(16,24,32,.06), 0 8px 24px -18px rgba(16,24,32,.35);
  --mono:ui-monospace,"SFMono-Regular","JetBrains Mono","Cascadia Mono",Menlo,Consolas,monospace;
  --sans:"Roboto",Arial,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{font-family:var(--sans);background:var(--paper);color:var(--text);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
code,.mono,.num{font-family:var(--mono);font-size:.92em}
code{background:#EDF1F4;border:1px solid var(--line);border-radius:4px;padding:1px 5px;color:#25303D}
.muted{color:var(--text-3)}
.nowrap{white-space:nowrap}
.ta-r{text-align:right}
:focus-visible{outline:2px solid var(--primary);outline-offset:2px}

/* ---------- Thanh bên ---------- */
.side{position:fixed;inset:0 auto 0 0;width:232px;background:var(--ink);color:#C9D2DC;display:flex;flex-direction:column;z-index:20;transition:width .16s ease}
.brand{display:flex;align-items:center;gap:9px;padding:18px 14px 14px 18px}
.brand .mark{font-family:var(--mono);font-weight:700;letter-spacing:.06em;background:var(--primary);color:#fff;padding:4px 8px;border-radius:5px;font-size:13px;flex:0 0 auto}
.brand .bname{font-weight:600;letter-spacing:.14em;font-size:12px;color:#EAF0F5;white-space:nowrap;overflow:hidden}
.navcollapse{
  display:none;margin-left:auto;flex:0 0 auto;width:24px;height:24px;border-radius:6px;
  border:1px solid #2A3442;background:transparent;color:#9AA7B5;font-size:12px;line-height:1;
  align-items:center;justify-content:center;cursor:pointer;
}
.navcollapse:hover{color:#fff;border-color:#3A4756;background:var(--ink-2)}
.side nav{flex:1;overflow-y:auto;overflow-x:hidden;padding:4px 10px 16px}
.navgroup{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:#697786;padding:16px 8px 6px;white-space:nowrap;overflow:hidden}
.nav{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:6px;color:#C9D2DC;font-size:13.5px;white-space:nowrap}
.nav:hover{background:var(--ink-2);text-decoration:none;color:#fff}
.nav.on{background:var(--ink-3);color:#fff;box-shadow:inset 3px 0 0 var(--primary)}
.nav-ic{
  display:none;flex:0 0 auto;width:24px;height:24px;border-radius:6px;background:var(--ink-3);
  color:#EAF0F5;align-items:center;justify-content:center;font-size:11.5px;font-weight:700;
  font-family:var(--mono);line-height:1;
}
.nav.on .nav-ic{background:var(--primary)}
.nav-tx{overflow:hidden;text-overflow:ellipsis}
.me{border-top:1px solid #232C37;padding:14px 18px;display:flex;align-items:center;gap:10px}
.me-avatar{
  flex:0 0 auto;width:32px;height:32px;border-radius:50%;background:var(--primary);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;font-family:var(--mono);
}
.me-info{min-width:0;overflow:hidden}
.me-name{color:#EAF0F5;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.me-role{font-size:12px;color:#8B97A5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.me-org{font-size:12px;color:#697786;font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.signout{display:inline-block;margin-top:8px;font-size:12px;color:#9AA7B5}

/* ---------- Menu thu gọn (chỉ áp dụng khi thanh bên đang cố định, màn hình rộng) ---------- */
@media (min-width:901px){
  .navcollapse{display:flex}
  body.nav-collapsed .side{width:64px}
  body.nav-collapsed .main{margin-left:64px}
  body.nav-collapsed .brand{flex-direction:column;gap:10px;padding:16px 0}
  body.nav-collapsed .brand .bname{display:none}
  body.nav-collapsed .navgroup,
  body.nav-collapsed .nav-tx,
  body.nav-collapsed .me-info{display:none}
  body.nav-collapsed .nav{justify-content:center;padding:8px}
  body.nav-collapsed .nav-ic{display:flex}
  body.nav-collapsed .me{justify-content:center;padding:14px 8px}
}

/* ---------- Vùng nội dung ---------- */
.main{margin-left:232px;padding:0 22px 60px;max-width:1500px;transition:margin-left .16s ease}
.top{display:flex;align-items:center;gap:12px;padding:20px 0 12px;position:sticky;top:0;background:var(--paper);z-index:10}
.top .push{margin-left:auto}
.top h1{font-size:20px;margin:0;letter-spacing:-.01em}
.burger{display:none;font-size:20px;cursor:pointer}
.pagenote{color:var(--text-2);margin:0 0 14px}

/* ---------- Chuông thông báo ---------- */
.bell{position:relative;font-size:19px;line-height:1;color:var(--text-2);display:inline-flex;padding:4px}
.bell:hover{text-decoration:none;color:var(--primary)}
.bell.on{color:var(--primary)}
.belldot{
  position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;padding:0 3px;border-radius:20px;
  background:var(--bad);color:#fff;font-size:10px;font-weight:700;line-height:16px;text-align:center;
  font-family:var(--mono);border:2px solid var(--paper);
}
.bn-belldot{position:absolute;top:-4px;right:-8px;min-width:14px;height:14px;padding:0 3px;border-radius:20px;
  background:var(--bad);color:#fff;font-size:9px;font-weight:700;line-height:14px;text-align:center;
  font-family:var(--mono);border:2px solid var(--ink)}
.bn-i{position:relative}

/* ---------- Hộp thông báo ---------- */
.notiflist{display:flex;flex-direction:column;gap:6px}
.notifitem{margin:0}
.notiflink{
  width:100%;display:flex;align-items:center;gap:10px;padding:11px 13px;border:1px solid var(--line);
  border-radius:8px;background:#fff;font:inherit;font-size:13.5px;color:var(--text);text-align:left;cursor:pointer;
}
.notiflink:hover{border-color:var(--primary);background:#F7F9FA}
.notifitem.unread .notiflink{background:#F0F5F6;border-color:#C9DBDD}
.notifdot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--primary)}
.notiftext{flex:1;min-width:0}
.notiftime{flex:0 0 auto;color:var(--text-3);font-size:12px;font-family:var(--mono)}

/* ---------- Bảng cấu hình thông báo ---------- */
.notiftbl td.ta-c,.notiftbl th.ta-c{width:1%}
.notiftbl input[type=checkbox]{width:16px;height:16px}

/* ---------- Khối ---------- */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);margin-bottom:18px;padding:16px}
.panel-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.panel-h h2{font-size:15px;margin:0;letter-spacing:.01em}
.panel-h-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
fieldset{border:0;border-top:1px solid var(--line);margin:0;padding:14px 0 4px}
fieldset:first-of-type{border-top:0;padding-top:0}
legend{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);padding:0 0 6px}
.note{background:#F0F5F6;border-left:3px solid var(--primary);padding:9px 12px;border-radius:0 6px 6px 0;color:var(--text-2);margin:4px 0 12px;font-size:13px}
.lockednotice{background:#FDF2E2;border-left:3px solid var(--warn);padding:9px 12px;border-radius:0 6px 6px 0;color:#7A5A17;margin:0 0 16px;font-size:13px;font-weight:600}
.hlnotice{background:#FEF9E7;border-left:3px solid var(--hl,#D4A72C);padding:9px 12px;border-radius:0 6px 6px 0;color:#7A5A00;margin:0 0 16px;font-size:13px;font-weight:600}
.panel-hl{outline:2px solid var(--hl,#D4A72C);outline-offset:-1px}

/* ---------- Thẻ số liệu ---------- */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;margin-bottom:20px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:16px;box-shadow:var(--sh);color:inherit}
.card:hover{text-decoration:none;border-color:var(--primary)}
.card-h{font-size:12.5px;color:var(--text-2);text-transform:uppercase;letter-spacing:.06em}
.card-n{font-family:var(--mono);font-size:30px;font-weight:600;margin:6px 0 10px;letter-spacing:-.02em}
.card-split{display:flex;flex-wrap:wrap;gap:5px}

/* ---------- Bảng ---------- */
.tblwrap{overflow-x:auto;margin:0 -16px}
.tbl{width:100%;border-collapse:collapse;font-size:13.5px}
.tbl th{text-align:left;font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:var(--text-3);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap;background:#FAFBFC}
.tbl td{padding:9px 10px;border-bottom:1px solid #EDF0F3;vertical-align:middle}
/* Đường viền dọc giữa các cột (Hi yêu cầu, ảnh mẫu danh sách Đơn hàng) —
   áp dụng chung cho MỌI bảng .tbl trong hệ thống để đồng nhất giao diện,
   không riêng 1 màn hình. Bỏ viền ở cột cuối cùng (không cần viền sát mép
   phải khung bảng). */
.tbl th:not(:last-child),.tbl td:not(:last-child){border-right:1px solid #EDF0F3}
.tbl thead th:not(:last-child){border-right-color:var(--line)}

/* Nhiều dòng hơn khung nhìn thì bảng tự cuộn RIÊNG trong khung của nó — kể cả
   thanh cuộn ngang cũng nằm ngay dưới khung này, không phải kéo hết trang
   xuống tận cuối (qua cả thanh công cụ, phân trang...) mới thấy được. Đầu
   bảng dính lại khi cuộn dọc để luôn biết đang xem cột nào. */
@media (min-width:641px){
  .tblwrap{max-height:min(72vh, 720px);overflow-y:auto;border:1px solid var(--line);border-radius:8px}
  .tbl thead th{position:sticky;top:0;z-index:3;box-shadow:0 1px 0 var(--line)}
}
.tblwrap::-webkit-scrollbar{height:11px;width:11px}
.tblwrap::-webkit-scrollbar-track{background:#F2F4F6}
.tblwrap::-webkit-scrollbar-thumb{background:#C6D2DB;border-radius:20px;border:2px solid #F2F4F6}
.tblwrap::-webkit-scrollbar-thumb:hover{background:#AAB8C2}
.tblwrap::-webkit-scrollbar-corner{background:#F2F4F6}
/* Bản 391: thanh cuộn ngang NỔI bám đáy màn hình (app.js mục 14) + bóng mờ mép bảng báo còn cột bị ẩn */
.hs-float{position:fixed;bottom:0;z-index:900;display:flex;align-items:center;gap:6px;height:30px;padding:0 6px;
  background:rgba(255,255,255,.96);border:1px solid var(--line);border-bottom:0;border-radius:10px 10px 0 0;
  box-shadow:0 -4px 14px rgba(15,23,42,.10);backdrop-filter:blur(4px);box-sizing:border-box}
.hs-float[hidden]{display:none}
.hs-rail{flex:1 1 auto;overflow-x:auto;overflow-y:hidden;height:16px}
.hs-in{height:1px}
.hs-rail::-webkit-scrollbar{height:12px}
.hs-rail::-webkit-scrollbar-track{background:#EEF2F5;border-radius:20px}
.hs-rail::-webkit-scrollbar-thumb{background:#9FB3C2;border-radius:20px;border:2px solid #EEF2F5}
.hs-rail::-webkit-scrollbar-thumb:hover{background:var(--primary)}
.hs-nut{flex:0 0 auto;width:26px;height:22px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--text-2);
  font-size:11px;line-height:1;cursor:pointer;padding:0}
.hs-nut:hover{border-color:var(--primary);color:var(--primary)}
.tblwrap.hs-trai{-webkit-mask-image:linear-gradient(to right,rgba(0,0,0,.25),#000 26px);mask-image:linear-gradient(to right,rgba(0,0,0,.25),#000 26px)}
.tblwrap.hs-phai{-webkit-mask-image:linear-gradient(to left,rgba(0,0,0,.25),#000 26px);mask-image:linear-gradient(to left,rgba(0,0,0,.25),#000 26px)}
.tblwrap.hs-trai.hs-phai{-webkit-mask-image:linear-gradient(to right,rgba(0,0,0,.25),#000 26px,#000 calc(100% - 26px),rgba(0,0,0,.25));
  mask-image:linear-gradient(to right,rgba(0,0,0,.25),#000 26px,#000 calc(100% - 26px),rgba(0,0,0,.25))}
body.hs-co .fab{bottom:56px}   /* nút + nổi không bị thanh cuộn nổi đè */
@media print{.hs-float{display:none!important}}
/* Ô chữ dài (Sản phẩm, Địa chỉ, Ghi chú...) rút gọn về đúng một dòng kèm
   "...", rê chuột để xem đầy đủ (thuộc tính title) — thay vì đẩy hàng cao
   vọt lên vì tràn xuống nhiều dòng. */
.cell-clamp{display:block;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Bản 184: trường khai 'cell_full' (vd Tên sản phẩm) — hiện đủ, tự xuống dòng. */
.cell-full{display:block;min-width:260px;max-width:560px;white-space:normal;overflow-wrap:anywhere;line-height:1.45}
.tbl tbody tr:hover{background:#FAFBFC}
.tbl td:first-child,.tbl th:first-child{padding-left:16px}
.tbl td:last-child,.tbl th:last-child{padding-right:16px}
.idlink{font-family:var(--mono);font-weight:600}
.empty{text-align:center;color:var(--text-3);padding:34px 10px}

/* Thanh SLA bên trái — dấu hiệu nhận biết chính của bảng */
.tbl tbody tr td:first-child{box-shadow:inset 3px 0 0 transparent}
tr.sla-late td:first-child{box-shadow:inset 3px 0 0 var(--bad)}
tr.sla-due  td:first-child{box-shadow:inset 3px 0 0 var(--warn)}
tr.sla-ok   td:first-child{box-shadow:inset 3px 0 0 #C6D2DB}
tr.sla-done td:first-child{box-shadow:inset 3px 0 0 var(--ok)}

/* "Đóng khung" cảnh báo — Yêu cầu nhanh đã chuyển kho nhưng chưa được Kế
   toán kho xử lý (mục 4ae, bản 93). Outline thay vì border vì bảng đang
   border-collapse:collapse, border trên tr không lên khung được. */
tr.hl-pending{outline:2px solid var(--hl);outline-offset:-2px;position:relative;z-index:1}
tr.hl-pending td{background:#FFFBEA}
/* Bản 193: Kho vận hành / Đơn hàng — đơn Đã in tô xanh nhạt */
tr.row-dain,tr.row-dain td{background:#E7F4EC}
.badge.b-dain{background:#fff;color:#0B5D33;border-color:#8CCBA5;font-weight:700}
/* Bản 193 (Hi): bảng Đơn hàng — Kho / Trạng thái hiện chữ trơn, bỏ khung nhãn (giữ màu chữ) */
.tbl-khodh .badge{background:none!important;border-color:transparent!important;padding:0;font-size:13px}
.tbl-khodh .badge.b-dain{font-weight:700}
/* Bản 193 (Hi): màu phân biệt Sàn ở bảng Đơn hàng */
.san-tag{font-weight:700;white-space:nowrap;color:#5A6675}
/* Bản 193 (Hi): dấu tích xanh ở ô danh sách ('cell_tick', vd cột Ưu tiên của Yêu cầu nhanh) */
.cell-tick{display:block;text-align:center;color:#16A34A;font-size:20px;font-weight:700;line-height:1}
/* Bản 193 (Hi): Kho vận hành — tiêu đề cột bảng màu đen, đậm, căn giữa */
.kvh .tbl th{color:#111;font-weight:700;text-align:center}
/* Bản 193 (Hi): nền tiêu đề cột Kho vận hành — xanh ngọc nhạt theo màu chủ đạo, kẻ đậm phía dưới */
.kvh .tbl thead th{background:#D5E6E9;border-bottom:2px solid var(--primary)}
.kvh .tbl thead th:not(:last-child){border-right-color:#B9D3D8}
.kvh .tbl thead th.sorted{background:#BFD9DE;color:#111}
/* Bản 193 (Hi): tiêu đề cột MỌI bảng trên site giống Kho vận hành — đen, đậm, căn giữa, nền xanh ngọc nhạt,
   kẻ đậm dưới. Chỉ dòng tiêu đề (thead; th ở thân bảng ma trận giữ nguyên). Trừ bảng chữ to màn
   Tracking – Bắn mã (.trackingbigtbl) vốn có kiểu riêng cho camera quay màn hình. */
.tbl:not(.trackingbigtbl) thead th{color:#111;font-weight:700;text-align:center;background:#D5E6E9;border-bottom:2px solid var(--primary)}
.tbl:not(.trackingbigtbl) thead th:not(:last-child){border-right-color:#B9D3D8}
.tbl:not(.trackingbigtbl) thead th.sorted{background:#BFD9DE;color:#111}
/* Bản 193 (Hi, theo ảnh mẫu): thanh tìm kiếm/lọc luôn hiện ở Đơn hàng */
/* Bản 193 (Hi): nút mục con (Hàng hoàn nhận / Đối soát hàng hoàn) ở đầu hàng công cụ trang Hàng hoàn */
.subtabs{display:flex;gap:10px;flex-wrap:wrap}
.subtab{display:inline-flex;align-items:center;height:36px;padding:0 18px;border:1px solid var(--primary);border-radius:6px;color:var(--primary);font-weight:600;text-decoration:none;background:#fff;white-space:nowrap}
.subtab:hover{background:#EEF3F4}
.subtab.on{background:var(--primary);color:#fff}
/* Bản 193 (Hi): Sản phẩm bán chạy — chọn kỳ dạng nút liền, dòng tổng, top 3 */
.kf-seg{display:inline-flex;flex:none;border:1px solid var(--primary);border-radius:4px;overflow:hidden;height:38px}
.kf-seg a{display:inline-flex;align-items:center;padding:0 13px;color:var(--primary);font-weight:600;text-decoration:none;border-left:1px solid var(--primary);white-space:nowrap}
.kf-seg a:first-child{border-left:0}
.kf-seg a:hover{background:#EEF3F4}
.kf-seg a.on{background:var(--primary);color:#fff}
.spbc-sum{display:flex;flex-wrap:wrap;gap:8px 28px;padding:10px 16px;border-top:1px solid var(--line);background:#F7FAFA;color:var(--text-2)}
.spbc-sum b{color:#111}
.spbc-note{padding:6px 16px 10px;background:#F7FAFA;color:var(--text-3);font-size:12.5px}
.spbc-tbl tr.spbc-top td{background:#FFF8E6}
.spbc-tbl td.ta-c{text-align:center}
/* Bản 193 (Hi, ảnh mẫu): thanh tìm kiếm Kho vận hành trên ĐÚNG 1 DÒNG — các ô tự co giãn chia nhau chiều ngang */
.kvh-filter{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;padding:12px 14px;margin:4px 16px 14px;background:#F8FAFC;border:1px solid #CBD5E1;border-radius:12px;box-shadow:0 1px 2px rgba(15,23,42,.04)}   /* Bản 317: bo thành 1 khối (trước: nền trắng + viền trên) */
@media (max-width:760px){.kvh-filter{margin:4px 8px 12px;padding:10px}}
.kvh-filter input,.kvh-filter select{height:38px;min-width:0;border:1px solid #CFD6DD;border-radius:3px;padding:0 8px;font-size:14px;color:#333;background:#fff;box-sizing:border-box}
.kvh-filter select{flex:1 1 105px;width:auto;padding:0 4px;cursor:pointer}
.kvh-filter .ss-wrap{flex:1.6 1 220px;min-width:180px}   /* Bản 390: ô chọn gõ tìm được (vd Sản phẩm) trong thanh lọc */
.kvh-filter .ss-wrap .ss-input{width:100%}
.kf-search{display:flex;flex:1.6 1 180px;min-width:0}
.kf-search input{flex:1 1 auto;width:auto;border-radius:3px 0 0 3px}
.kf-search button{flex:none;width:40px;height:38px;border:1px solid #CFD6DD;border-left:0;border-radius:0 3px 3px 0;background:#fff;color:#222;cursor:pointer;display:grid;place-items:center}
.kf-search button:hover{background:#F2F4F6}
.kvh-filter .kf-date{flex:1 1 118px;width:auto}
.kf-btns{display:flex;gap:4px;flex:none}
.kf-btn{height:38px;padding:0 14px;display:inline-flex;align-items:center;border:0;border-radius:2px;background:#3AA0E8;color:#fff!important;font-size:15px;cursor:pointer;text-decoration:none;white-space:nowrap}
.kf-btn:hover{background:#238BD4}
@media (max-width:760px){.kf-search,.kvh-filter .kf-date{flex:1 1 100%}
  .kvh-filter select{flex:1 1 calc(50% - 5px)}
  .kf-btns{flex:1 1 100%;justify-content:flex-end}}
.san-SHOPEE{color:#E0461F}
.san-TIKTOK{color:#111827}
.san-LAZADA{color:#1D2EA8}
.san-WEBSITE{color:#7C3AED}
.san-SPX{color:#B45309}
.san-VIETTEL{color:#0F766E}
.san-BEST{color:#DB2777}
.san-KHAC{color:#5A6675}
.tbl tbody tr.row-dain:hover,.tbl tbody tr.row-dain:hover td{background:#D9EEE1}

/* ---------- Nhãn trạng thái ---------- */
.badge{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11.5px;font-weight:600;white-space:nowrap;border:1px solid transparent}
.b-ok  {background:#E7F4EC;color:var(--ok);border-color:#C6E6D3}
.b-run {background:#E9F1FB;color:var(--run);border-color:#CBDEF5}
.b-new {background:#EEF1F4;color:var(--new);border-color:#DCE2E8}
.b-warn{background:#FDF2E2;color:var(--warn);border-color:#F3DFBE}
.b-bad {background:#FCEAE8;color:var(--bad);border-color:#F3CFCB}
.b-tim {background:#F1EAFB;color:#6B3FA0;border-color:#DDCDF3}   /* Bản 251: tím (vd "Chờ linh kiện" ở Hàng hoàn - Hàng đổi(Kho)) */
.txt-bad{color:var(--bad);font-weight:600}
.b-off {background:#F2F4F6;color:var(--text-3);border-color:#E4E8EC}
/* Bản 337: 3 màu nhãn rõ (Báo nhập linh kiện) — trắng / vàng / xanh */
.badge.b-trang{background:#fff;color:#334155;border-color:#CBD5E1}
.badge.b-vang{background:#FDE68A;color:#713F12;border-color:#F5C518}
.badge.b-xanh{background:#BBF7D0;color:#14532D;border-color:#4ADE80}
.badge.b-tim{background:#EDE9FE;color:#5B21B6;border-color:#C4B5FD}   /* Bản 344 */
/* Bản 344: ô chọn Trạng thái sửa nhanh trên danh sách — dáng nhãn tròn, đủ rộng cho chữ + mũi tên, không bị cắt */
select.o-chon.badge{font-size:12.5px;font-weight:600;padding:4px 22px 4px 10px;border-radius:20px;min-width:128px;max-width:190px;height:auto;line-height:1.3;
  -webkit-appearance:none;appearance:none;background-repeat:no-repeat;background-position:right 7px center;background-size:9px 6px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='6'%3E%3Cpath d='M0 0l4.5 6L9 0z' fill='%2364748B'/%3E%3C/svg%3E")}
select.o-chon.badge:not([class*=" b-"]){background-color:#fff;border-color:#CBD5E1;color:#334155}
/* Bản 178: "Đơn hủy" — nền sẫm chữ trắng, khác hẳn đỏ "Chưa đóng hàng". */
.b-huy {background:#3A3F45;color:#fff;border-color:#3A3F45}
/* Bản 183: "Hết hàng" (Đơn hết hàng) ở Danh sách đơn hàng — tím, khác các nhãn còn lại. */
.b-het {background:#F1EAFB;color:#6B3FA0;border-color:#DCCBF3}

/* Nhãn khoá ngoại có màu/kích thước tuỳ chỉnh theo bản ghi (vd Tên kho) —
   xem Render::styledRefLabel(). Khi chưa đặt Màu sắc, badge.reflabel dùng
   lại đúng màu trung tính của .b-off; span/b thường không nhãn thì giữ màu
   chữ mặc định của trang. */
.badge.reflabel:not([style]){background:#F2F4F6;color:var(--text-3);border-color:#E4E8EC}
.reflabel-sz-nho{font-size:10.5px}
.reflabel-sz-vua{font-size:12.5px}
.reflabel-sz-lon{font-size:14.5px}
.colorswatch{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:-2px;border:1px solid #0002}

/* ---------- Thanh tiến độ ---------- */
.bar{position:relative;background:#EDF0F3;border-radius:20px;height:16px;overflow:hidden;min-width:90px}
.bar i{position:absolute;inset:0 auto 0 0;background:var(--primary);border-radius:20px}
.bar b{position:relative;display:block;text-align:center;font-family:var(--mono);font-size:10.5px;line-height:16px;color:#fff;mix-blend-mode:difference}

/* ---------- Thanh công cụ ---------- */
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}
.toolbar .push{margin-left:auto}
.search{min-width:240px;flex:1 1 240px}

/* ---------- Biểu mẫu ---------- */
input,select,textarea{font-family:inherit;font-size:13.5px;color:var(--text);background:#fff;border:1px solid var(--line);border-radius:6px;padding:7px 9px;width:100%}
input[type=file]{padding:6px;background:#FAFBFC}
textarea.url-files{margin-top:6px;font-size:12.5px}
input[type=checkbox]{width:auto}
textarea{resize:vertical}
input:focus,select:focus,textarea:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px rgba(15,95,107,.12)}
input[readonly]{background:#F5F7F8;color:var(--text-2)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px 14px}
.fld{display:flex;flex-direction:column;gap:4px;min-width:0}
.fld-full{grid-column:1/-1}
.fld label{font-size:12px;font-weight:600;color:var(--text-2)}
.fld small{font-size:11.5px;color:var(--text-3)}
.fld small.locked{color:var(--warn)}
.req{color:var(--bad)}
.ro{padding:7px 0;min-height:32px}
.input-unit{display:flex;align-items:center;gap:6px}
.input-unit input{flex:1;min-width:0}
.input-unit .unit,.num+.unit{font-size:11.5px;font-weight:600;color:var(--text-3);white-space:nowrap}
.formbar{display:flex;gap:8px;align-items:center;padding-top:14px;margin-top:6px;border-top:1px solid var(--line)}
.formbar .push{margin-left:auto}
.childform{border-top:1px dashed var(--line);margin-top:14px;padding-top:14px}
.childform-collapsed{display:none}
.inline{display:inline}

.switch{display:inline-flex;align-items:center;cursor:pointer}
.switch input{position:absolute;opacity:0}
.switch span{width:38px;height:21px;background:#CDD6DE;border-radius:20px;position:relative;transition:.15s}
.switch span::after{content:"";position:absolute;top:2px;left:2px;width:17px;height:17px;background:#fff;border-radius:50%;transition:.15s}
.switch input:checked + span{background:var(--primary)}
.switch input:checked + span::after{transform:translateX(17px)}
.switch input:focus-visible + span{box-shadow:0 0 0 3px rgba(15,95,107,.25)}

/* bool_ui: checkbox2 — 2 ô vuông "Có"/"Không" loại trừ nhau (Đơn Seeding...) */
.bool2{display:flex;align-items:center;gap:22px;min-height:34px}
.chk2{display:inline-flex;align-items:center;gap:7px;font-size:13.5px;font-weight:600;color:var(--text);cursor:pointer}
.chk2 input{position:absolute;opacity:0;width:18px;height:18px;margin:0}
.chk2 span{width:18px;height:18px;border:2px solid var(--line);border-radius:4px;position:relative;flex:0 0 auto;background:#fff}
.chk2 input:checked + span{background:var(--primary);border-color:var(--primary)}
.chk2 input:checked + span::after{content:"✓";position:absolute;inset:0;color:#fff;font-size:12px;line-height:14px;text-align:center}
.chk2 input:focus-visible + span{box-shadow:0 0 0 3px rgba(15,95,107,.25)}

/* form_style: 'rows' — biểu mẫu "1 dòng 1 trường" (nhãn trái, ô nhập phải),
   đầu mục có thanh xanh nhạt — kiểu chuẩn của toàn hệ thống từ bản có mục
   "Chỉnh lại toàn bộ giao diện" (đối chiếu theo Yêu cầu nhanh). Dùng cho mọi
   module khai 'form_style' => 'rows' trong config/modules.php (views/form.php
   đọc key này), cộng thêm 3 màn hình dựng view riêng: Kho vận hành -> Đơn
   hàng/Hàng hoàn (views/khodh_form.php, views/khohh_form.php) và Nhân viên
   (views/user.php) — 3 file này tự in ra đúng khung .formrows/.formrow thay
   vì đọc config, vì có thêm nút/khối riêng ngoài danh sách trường thường.
   Thay cho lưới nhiều cột kiểu cũ (.grid/.fld ở trên) — lưới cũ giờ chỉ còn
   dùng cho các khối phụ chưa chuyển (nếu có). */
.formrows{background:var(--surface);border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-bottom:16px}
/* 'form_grid' (opt-in, bản 115) — nhiều khối .formrows xếp dạng lưới co
   giãn thay vì xếp dọc, đúng bố cục "từng khối" trong ảnh mẫu Sản phẩm. */
.formrows-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:16px;align-items:start}
.formrows-grid .formrows{margin-bottom:0}
.formrows-head{display:flex;align-items:center;gap:8px;background:#E1F0F5;color:#175A70;font-weight:700;font-size:14.5px;padding:13px 18px;border-bottom:1px solid var(--line)}
.formrow{display:flex;align-items:flex-start;gap:18px;padding:13px 18px;border-bottom:1px solid var(--line)}
.formrow:last-of-type{border-bottom:none}
.formrow>label{flex:0 0 150px;padding-top:8px;font-size:13px;font-weight:600;color:var(--text-2)}
.formrow-control{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.formrows .formbar{padding:14px 18px;border-top:none}
/* formrows-body: khối nội dung tự do (ghi chú, lưới checkbox...) bên trong
   .formrows nhưng KHÔNG theo khuôn nhãn-trái/ô-phải của .formrow — dùng ở
   views/user.php cho 3 khối "TEAM tham gia / Nhóm tham gia / Gian hàng". */
.formrows-body{padding:13px 18px;border-bottom:1px solid var(--line)}
.formrows-body:last-child{border-bottom:none}
.formrows-body .note{margin:0 0 10px}
.formrows-body .note:last-child{margin-bottom:0}
.formrows-body .checkgrid{margin-top:2px}
@media (max-width:640px){
  .formrow{flex-direction:column;gap:6px;padding:12px 14px}
  .formrow>label{flex:none;padding-top:0}
}

/* upload_box: khung "Upload" bọc ngoài ô chọn file (Hóa đơn PDF, Đơn hàng Excel) */
.upload-box{border:1px solid var(--line);border-radius:8px;overflow:hidden;max-width:420px}
.upload-box-cta{background:var(--primary);color:#fff;font-weight:700;font-size:13px;text-align:center;padding:10px 12px;display:flex;align-items:center;justify-content:center;gap:6px}
.upload-box input[type=file]{display:block;width:100%;border:none;border-top:1px solid var(--line);border-radius:0;background:#fff}
.upload-box .filelist{padding:8px 10px;border-top:1px solid var(--line)}

.checkgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:6px}
.checkitem{display:flex;align-items:center;gap:8px;padding:7px 9px;border:1px solid var(--line);border-radius:6px;cursor:pointer}
.checkitem:hover{border-color:var(--primary)}
.checkitem em{color:var(--text-3);font-style:normal;font-size:11.5px}
.checkitem-outscope{background:#FDF2E2;border-color:#F3DFBE}
.checkitem-outscope em{color:var(--warn)}
.filelist{display:flex;flex-direction:column;gap:4px;margin-top:6px}
.filerow{display:flex;align-items:center;gap:8px;font-size:12.5px}
.filerow .muted{margin-left:auto;font-size:11px}

/* chunk_progress: thanh tiến trình tải video theo phần (bản 108 — xem
   public/assets/app.js mục "Tải video theo phần" + src/Render.php ô Video).
   Ẩn mặc định, JS tự hiện ra (.is-active) khi có tệp lớn đang tải. */
.chunk-progress{display:none;margin-top:8px}
.chunk-progress.is-active{display:block}
.chunk-progress-bar{height:8px;border-radius:5px;background:#E4E9EC;overflow:hidden}
.chunk-progress-bar i{display:block;height:100%;width:0;background:var(--primary);border-radius:5px;transition:width .15s linear}
.chunk-progress-text{display:block;margin-top:4px;font-size:12px;color:var(--text-2)}
.chunk-progress.is-error .chunk-progress-bar i{background:var(--bad)}
.chunk-progress.is-error .chunk-progress-text{color:var(--bad);font-weight:600}
.chunk-progress.is-done .chunk-progress-bar i{background:var(--ok)}

/* ---------- Nút ---------- */
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border:1px solid var(--line);background:#fff;color:var(--text);border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;white-space:nowrap}
.btn:hover{background:#F7F9FA;text-decoration:none;border-color:#C6D0D9}
.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-d);border-color:var(--primary-d);color:#fff}
.btn-danger{background:#fff;border-color:#E6C3BF;color:var(--bad)}
.btn-danger:hover{background:#FCEAE8}
.btn-ghost{background:transparent;border-color:transparent;color:var(--text-2)}
.btn-ghost:hover{background:#F1F4F6}
.btn-sm{padding:4px 9px;font-size:12px}
/* Bản 125 — nút dạng hiển thị (KHÔNG phải <a>/<button>, không bấm được):
   dùng cho "Hoàn hàng" ở Danh sách đơn hàng, chờ nối chức năng thật sau. */
.btn-static{background:#F5A02320;border-color:#F5A02355;color:#A96500;cursor:default}
.btn-static:hover{background:#F5A02320}
.btn-wide{width:100%;justify-content:center}
.danger-zone{display:flex;align-items:center;gap:16px;border-color:#EFD9D6}
.danger-zone p{margin:2px 0 0;font-size:12.5px}
.action-zone{display:flex;align-items:center;gap:16px}
.action-zone p{margin:2px 0 0;font-size:12.5px}

/* ---------- Danh sách định nghĩa (trang xem) ---------- */
.deflist{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px 16px;margin:0}
.deflist .dl-full{grid-column:1/-1}
.deflist dt{font-size:11.5px;color:var(--text-3);text-transform:uppercase;letter-spacing:.05em}
.deflist dd{margin:2px 0 0}
.thumbs{display:flex;flex-wrap:wrap;gap:6px}
.thumb{position:relative;display:inline-block}
.thumb img{width:64px;height:64px;object-fit:cover;border-radius:6px;border:1px solid var(--line);cursor:zoom-in;display:block}
/* Bản 186: cột Ảnh ở danh sách (field 'cell_first_image') — 1 ảnh thu nhỏ + "+N" nếu còn ảnh khác. */
.thumb-cellwrap{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.thumb-cell{vertical-align:middle}
.thumb-cell img{width:52px;height:52px;background:#F5F7F8}
.thumb-more{display:inline-block;font-size:11.5px;color:var(--text-3);vertical-align:middle}
.chip{display:inline-block;padding:4px 10px;border:1px solid var(--line);border-radius:20px;font-size:12px;background:#FAFBFC}
/* Tên file KHÔNG khung viền, chữ màu cam — chỉ dùng cho field khai
   'chip_style' => 'plain' (Đơn hàng -> Hóa đơn PDF / Đơn hàng Excel, bản
   110), các field 'files' khác trong hệ thống vẫn giữ nguyên kiểu .chip. */
.filelink-plain{display:inline-block;color:#E07B1A;font-weight:500;text-decoration:none}
.filelink-plain:hover{text-decoration:underline}
.thumb-video{width:220px;height:124px;border-radius:6px;border:1px solid var(--line);overflow:hidden;background:#000}
.thumb-video iframe{width:100%;height:100%;border:0}
video.thumb-video-local{width:220px;height:124px;border-radius:6px;border:1px solid var(--line);background:#000;object-fit:contain}

/* Ảnh tải lỗi (quyền tệp trên hosting, hoặc link ngoài đã hỏng — xem README
   mục 4f2): ẩn icon ảnh vỡ xấu của trình duyệt, thay bằng dấu cảnh báo rõ
   ràng. Bấm vào thumbnail dạng này không mở lightbox — mở thẳng link gốc ở
   tab mới (gắn target="_blank" bằng JS khi phát hiện lỗi tải). */
.thumb.thumb-broken{cursor:alias}
.thumb.thumb-broken img{visibility:hidden}
.thumb.thumb-broken::after{content:"⚠";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;background:#FDF2E2;border-radius:6px;border:1px solid #F3DFBE;color:var(--warn)}

/* Lightbox — bấm vào ảnh (Hình ảnh, Ảnh lỗi, Ảnh tem nhãn...) thì xem phóng
   to ngay trong trang, không mở tab mới. Xem public/assets/app.js. */
.lightbox{position:fixed;inset:0;background:rgba(10,14,20,.87);display:none;align-items:center;justify-content:center;z-index:1000;padding:32px}
.lightbox.on{display:flex}
.lightbox-body{display:flex;align-items:center;justify-content:center;max-width:100%;max-height:100%}
.lightbox-img{max-width:92vw;max-height:92vh;border-radius:8px;box-shadow:0 12px 44px rgba(0,0,0,.55);object-fit:contain;background:#fff}
.lightbox-error{background:#fff;border-radius:10px;padding:22px 26px;text-align:center;max-width:320px}
.lightbox-error p{margin:0 0 12px;color:var(--text-2);font-size:13.5px}
.lightbox-close{position:absolute;top:18px;right:18px;width:38px;height:38px;border-radius:50%;border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.14);color:#fff;font-size:17px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.lightbox-close:hover{background:rgba(255,255,255,.26)}
body.lightbox-open{overflow:hidden}
@media (max-width:640px){
  .lightbox{padding:14px}
  .lightbox-close{top:10px;right:10px}
}

/* ---------- Phân trang ---------- */
.pager{display:flex;align-items:center;gap:5px;padding-top:12px;flex-wrap:wrap}
.pager .muted{margin-right:auto}
.pg{padding:4px 9px;border:1px solid var(--line);border-radius:5px;font-size:12.5px;font-family:var(--mono)}
.pg.on{background:var(--ink);color:#fff;border-color:var(--ink)}

/* ---------- Check so khớp (KHO VẬN HÀNH -> Đơn hàng) ---------- */
.matchresult{margin-top:10px}
.matchresult .table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r);margin-bottom:10px}
.matchtable{font-size:12.5px}
.matchtable .row-bad{background:#FCEAE8}
.matchtable .row-ok td.matchcheck{color:var(--ok);font-weight:700}
.matchtable .row-bad td.matchcheck{color:var(--bad);font-weight:700}
.matchtable td.sl-lech{color:var(--bad);font-weight:700}

/* ---------- Thông báo ---------- */
.flash{padding:10px 14px;border-radius:var(--r);margin-bottom:14px;font-size:13.5px;border:1px solid}
.f-success{background:#E7F4EC;border-color:#C6E6D3;color:var(--ok)}
.f-error{background:#FCEAE8;border-color:#F3CFCB;color:var(--bad)}
.f-warning{background:#FDF2E2;border-color:#F3DFBE;color:var(--warn)}

/* ---------- Đăng nhập ---------- */
.loginpage{display:grid;place-items:center;min-height:100vh;background:radial-gradient(1100px 500px at 50% -10%,#1B2430 0%,var(--ink) 60%)}
.loginbox{width:min(400px,92vw);background:var(--surface);border-radius:12px;padding:30px;box-shadow:0 24px 60px -24px rgba(0,0,0,.6)}
.brand-lg{padding:0 0 10px}
.brand-lg .mark{font-size:15px}
.loginbox .lead{color:var(--text-2);font-size:13px;margin:0 0 18px}
.loginbox label{display:block;font-size:12px;font-weight:600;color:var(--text-2);margin:10px 0 4px}
.loginbox button{margin-top:18px}
.or{display:flex;align-items:center;gap:10px;color:var(--text-3);font-size:12px;margin:16px 0}
.or::before,.or::after{content:"";flex:1;height:1px;background:var(--line)}
.btn-google{justify-content:center}
.fineprint{font-size:11.5px;color:var(--text-3);text-align:center;margin:10px 0 0}

/* ---------- Hệ thống -> Phân quyền ---------- */
.roletabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.roletab{padding:7px 13px;border:1px solid var(--line);border-radius:20px;font-size:13px;color:var(--text-2);background:#fff}
.roletab:hover{border-color:var(--primary);text-decoration:none;color:var(--primary)}
.roletab.on{background:var(--ink);border-color:var(--ink);color:#fff}
.ta-c{text-align:center}
.permtbl th,.fieldtbl th{white-space:normal}
.permtbl td.ta-c,.fieldtbl td.ta-c{width:1%}
.permtbl input[type=checkbox],.fieldtbl input[type=checkbox]{width:16px;height:16px}
.coltick,.rowtick{display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap;font-weight:inherit}
th .coltick{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--text-3);flex-direction:column;gap:3px}
tr.grouprow td{background:#EEF3F4;color:var(--primary);font-weight:600;font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:6px 10px}

/* ---------- Dải nút thao tác dạng icon tròn (trang chi tiết) ---------- */
.qa-grid{display:flex;flex-wrap:wrap;gap:18px;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--line)}
.qa-form{margin:0}
.qa-btn{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  width:82px;padding:0;border:0;background:transparent;
  font:inherit;font-size:11.5px;font-weight:700;text-align:center;color:var(--text-2);
  cursor:pointer;appearance:none;letter-spacing:.01em;
}
.qa-btn:hover{text-decoration:none;color:var(--primary)}
.qa-btn:hover .qa-icon{background:var(--primary-d)}
.qa-icon{
  width:50px;height:50px;border-radius:50%;background:var(--primary);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:22px;line-height:1;
  box-shadow:0 4px 10px -4px rgba(15,95,107,.5);
}
.qa-label{line-height:1.25}
.qa-btn.qa-danger{color:var(--bad)}
.qa-btn.qa-danger .qa-icon{background:var(--bad);box-shadow:0 4px 10px -4px rgba(179,38,30,.5)}
.qa-btn.qa-danger:hover{color:var(--bad)}
.qa-btn.qa-danger:hover .qa-icon{background:#8f1e18}

/* ---------- Tab ngang chuyển module (mục 4aj, 'group_tabs') ---------- */
.modtabs{display:flex;flex-wrap:wrap;gap:2px;background:var(--paper);border:1px solid var(--line);
  border-radius:10px;padding:4px;margin-bottom:14px;width:max-content;max-width:100%}
.modtab{padding:8px 16px;border-radius:8px;font-weight:600;font-size:13.5px;color:var(--text-2);white-space:nowrap}
.modtab:hover{background:#E7ECEF;text-decoration:none;color:var(--text)}
.modtab.on{background:var(--primary);color:#fff;box-shadow:0 2px 6px -2px rgba(15,95,107,.5)}
.modtab.on:hover{background:var(--primary)}

/* ---------- Danh sách kiểu AppSheet: panel trạng thái + nhóm theo ngày ---------- */
.listlayout{display:flex;align-items:flex-start;gap:16px}
.listmain{flex:1;min-width:0}
.slicepanel{flex:0 0 210px;padding:8px;display:flex;flex-direction:column;gap:2px;position:sticky;top:70px}
.slice-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-radius:6px;color:var(--text-2);font-weight:600;font-size:13.5px}
.slice-item:hover{background:#F2F7F8;text-decoration:none}
.slice-item.on{background:#E8F1F2;color:var(--primary)}
.slice-item .slice-count{font-family:var(--mono);font-size:11.5px;font-weight:600;color:var(--text-3);background:#EEF1F4;border-radius:20px;padding:1px 8px}
.slice-item.on .slice-count{color:var(--primary);background:#D9E9EA}
.slice-item.slice-b-ok{color:var(--ok)} .slice-item.slice-b-run{color:var(--run)}
.slice-item.slice-b-warn{color:var(--warn)} .slice-item.slice-b-bad{color:var(--bad)}
.slice-item.slice-b-new{color:var(--text-2)} .slice-item.slice-b-off{color:var(--text-3)}
.slice-item.on.slice-b-ok,.slice-item.on.slice-b-run,.slice-item.on.slice-b-warn,
.slice-item.on.slice-b-bad,.slice-item.on.slice-b-new,.slice-item.on.slice-b-off{background:#E8F1F2}
/* Bản 193 (Hi): panel trạng thái = 1 dòng ngang phía trên danh sách, chia đều số ô (--slice-n đặt ở views/list.php) */
.listlayout{flex-direction:column;align-items:stretch;gap:12px}
.slicepanel{flex:none;position:static;display:grid;grid-template-columns:repeat(var(--slice-n,4),minmax(0,1fr));gap:10px;padding:10px}
.slice-item{border:1px solid var(--line);background:#fff;padding:10px 16px;font-size:14px}
.slice-item.on{border-color:var(--primary)}

tr.grouphead td{background:#F7F9FA;color:var(--text-2);font-weight:700;font-size:12.5px;padding:8px 16px;border-bottom:1px solid var(--line)}
tr.grouphead .grouptotal{font-family:var(--mono);font-weight:600;color:var(--text-3);margin-left:6px}

/* ---------- Ô tìm kiếm / lọc gập lại (bấm để hiện) ---------- */
details.searchbox{border:1px solid var(--line);border-radius:8px;background:#fff}
details.searchbox[open]{padding-bottom:2px}
details.searchbox summary{list-style:none;cursor:pointer;padding:7px 13px;font-size:13px;font-weight:500;color:var(--text);display:flex;align-items:center;gap:7px}
details.searchbox summary::-webkit-details-marker{display:none}
details.searchbox summary::before{content:"🔍";font-size:13px}
details.searchbox summary .chipcount{background:var(--primary);color:#fff;border-radius:20px;font-size:11px;padding:1px 7px;font-weight:600}
.searchpanel{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:2px 13px 12px;border-top:1px solid var(--line);margin-top:2px;padding-top:10px}
.searchactions{display:flex;gap:8px}

/* ---------- Nút nổi (mobile) ---------- */
.fab{
  display:none;position:fixed;right:18px;bottom:18px;z-index:15;
  width:52px;height:52px;border-radius:50%;background:var(--primary);color:#fff;
  align-items:center;justify-content:center;font-size:26px;line-height:1;
  box-shadow:0 10px 24px -8px rgba(15,95,107,.55);border:0;
}
.fab:hover{background:var(--primary-d);text-decoration:none;color:#fff}

/* ---------- Thanh điều hướng dưới (mobile) ---------- */
.bottomnav{display:none}

/* ---------- Ô mờ phía sau menu trượt (mobile) ---------- */
.scrim{display:none;position:fixed;inset:0;background:rgba(10,14,18,.45);z-index:19}
.navclose{display:none}

/* ---------- Màn hình hẹp (máy tính bảng / thu nhỏ) ---------- */
@media (max-width:900px){
  .side{transform:translateX(-100%);transition:transform .2s;z-index:21}
  #navtoggle:checked ~ .side{transform:none}
  #navtoggle:checked ~ .scrim{display:block}
  .main{margin-left:0;padding:0 14px 50px}
  .burger{display:inline-block}
  .navclose{display:inline-flex;margin-left:auto;color:#9AA7B5;font-size:16px;cursor:pointer;align-items:center;justify-content:center;width:26px;height:26px}
  .tblwrap{margin:0 -16px}
}

/* ---------- Điện thoại: giao diện kiểu ứng dụng (AppSheet) ---------- */
@media (max-width:640px){
  body{padding-bottom:62px}                 /* chừa chỗ cho thanh điều hướng dưới */
  .main{padding:0 10px 90px}
  .top{padding:14px 0 10px}
  .top h1{font-size:17px}
  .hdr-preview-txt{display:none}            /* icon-only "Xem thử phân quyền" trên header, chừa chỗ cho tiêu đề trang */
  .hdr-preview{padding:4px 8px}
  .panel{padding:12px;border-radius:10px}
  .cards{grid-template-columns:1fr 1fr;gap:10px}
  .card{padding:12px}
  .card-n{font-size:24px}

  /* Thanh công cụ danh sách xếp dọc, gọn theo chiều rộng màn hình */
  .toolbar{flex-direction:column;align-items:stretch}
  .toolbar .push{display:none}
  .toolbar > .btn,.toolbar > a.btn{width:100%;justify-content:center}
  .searchpanel{flex-direction:column;align-items:stretch}
  .searchpanel .search,.searchpanel select,.searchpanel input[type=date]{width:100%}

  /* Bảng danh sách -> thẻ xếp chồng, mỗi ô tự dán nhãn cột qua data-label.
     .matrixtbl (xem trước dữ liệu thô lúc nhập file, ma trận Phân quyền)
     giữ nguyên dạng lưới cuộn ngang — xếp chồng sẽ mất hết tác dụng đối chiếu cột/hàng. */
  .tblwrap{margin:0;overflow-x:auto}
  .matrixtbl{display:table!important;width:max-content;min-width:100%}
  .matrixtbl thead{display:table-header-group!important}
  .matrixtbl tr{display:table-row!important}
  .matrixtbl td,.matrixtbl th{display:table-cell!important}
  .tbl:not(.matrixtbl){border:0}
  .tbl:not(.matrixtbl) thead{display:none}
  .tbl:not(.matrixtbl),.tbl:not(.matrixtbl) tbody{display:block;width:100%}
  .tbl:not(.matrixtbl) tr{display:block}
  .tbl:not(.matrixtbl) tbody tr{
    display:block;margin-bottom:10px;padding:11px 13px;border:1px solid var(--line);
    border-radius:10px;background:#fff;box-shadow:var(--sh);
  }
  .tbl:not(.matrixtbl) tbody tr td:first-child{box-shadow:none}     /* thanh SLA chuyển sang viền trái cả thẻ */
  tr.sla-late{border-left:4px solid var(--bad)}
  tr.sla-due{border-left:4px solid var(--warn)}
  tr.sla-ok{border-left:4px solid #C6D2DB}
  tr.sla-done{border-left:4px solid var(--ok)}
  .tbl:not(.matrixtbl) td{
    display:flex;gap:10px;align-items:flex-start;justify-content:space-between;
    padding:5px 0;border-bottom:1px dashed #EEF1F4;text-align:right;
  }
  .tbl:not(.matrixtbl) td:last-child{border-bottom:0;padding-top:9px;justify-content:flex-end}
  .tbl:not(.matrixtbl) td::before{
    content:attr(data-label);flex:0 0 auto;color:var(--text-3);font-size:11px;
    text-transform:uppercase;letter-spacing:.04em;text-align:left;padding-top:2px;
  }
  .tbl:not(.matrixtbl) td:first-child::before{display:none}          /* ô ID/mã đơn tự nhận biết, khỏi lặp nhãn */
  .cell-clamp{max-width:none;text-align:right}
  .cell-full{min-width:0;max-width:none;flex:1 1 auto;text-align:right}   /* bản 184: không tràn mép thẻ */
  .idlink{font-size:14px}
  .pager{justify-content:center;text-align:center}
  .pager .muted{margin:0 0 6px;width:100%;text-align:center}

  /* Biểu mẫu: một cột, các nút hành động rộng bằng ngón tay */
  .grid,.checkgrid,.deflist,.resultnums{grid-template-columns:1fr}
  .formbar{flex-wrap:wrap}
  .formbar .btn{flex:1 1 auto}
  .danger-zone,.action-zone{flex-direction:column;align-items:stretch;text-align:center}

  /* Nút nổi "+" thay cho nút Thêm mới trên thanh công cụ */
  .fab{display:flex}

  /* Dải nút thao tác: căn giữa, mỗi nút co giãn đều theo bề rộng màn hình */
  .panel-h{flex-direction:column;align-items:stretch}
  .qa-grid{justify-content:center}
  .qa-btn{flex:1 1 84px}

  /* Panel trạng thái (kiểu AppSheet) -> dải chip cuộn ngang phía trên bảng */
  .listlayout{flex-direction:column;gap:10px}
  .slicepanel{
    display:flex;position:static;flex-direction:row;overflow-x:auto;width:100%;box-shadow:none;
    gap:8px;padding:2px 2px 6px;border-radius:0;background:transparent;border:0;
    -webkit-overflow-scrolling:touch;
  }
  .slice-item{
    flex:0 0 auto;white-space:nowrap;background:#fff;border:1px solid var(--line);
    border-radius:20px;padding:6px 12px;
  }
  .slice-item.on{border-color:var(--primary)}

  /* Thanh điều hướng dưới, kiểu app di động */
  .bottomnav{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:18;
    background:var(--ink);border-top:1px solid #232C37;padding:6px 4px calc(6px + env(safe-area-inset-bottom));
  }
  .bn{
    flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;
    color:#9AA7B5;font-size:10.5px;padding:5px 0;border-radius:8px;cursor:pointer;
  }
  .bn:hover{text-decoration:none;color:#fff}
  .bn.on{color:#fff}
  .bn-i{font-size:19px;line-height:1}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- Sắp xếp theo cột ---------- */
.sortlink{display:inline-flex;align-items:center;gap:5px;color:inherit;font:inherit}
.sortlink:hover{color:var(--primary);text-decoration:none}
.sortlink .arrow{font-size:9px;color:var(--text-3);line-height:1}
.tbl th.sorted{background:#EEF3F4;color:var(--primary)}
.tbl th.sorted .arrow{color:var(--primary)}

/* ---------- Bấm vào dòng để mở chi tiết ---------- */
.tbl-click tbody tr.rowlink{cursor:pointer}
.tbl-click tbody tr.rowlink:hover{background:#F2F7F8}
.tbl-click tbody tr.rowlink:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}

/* ---------- Nhập từ file ---------- */
.steps{margin:0 0 14px;padding-left:20px;color:var(--text-2)}
.steps li{margin-bottom:4px}
.importbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:6px}
.importbar input[type=file]{flex:1 1 260px;min-width:220px}
.cols{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}
.cols summary{cursor:pointer;font-size:12.5px;color:var(--text-2);font-weight:600}
.cols summary:hover{color:var(--primary)}
.cols .tbl{margin-top:10px}
.hint-cell{color:var(--text-2);font-size:12.5px}
tr.row-bad{background:#FEF6F5}
tr.row-bad:hover{background:#FCEDEB}
td.cell-bad{box-shadow:inset 0 0 0 1px #F3CFCB;background:#FCEAE8;border-radius:4px}
.errtext{display:block;color:var(--bad);font-size:11.5px;margin-top:3px}

/* ---------- Các bước nhập dữ liệu ---------- */
.wizard{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:0 0 16px;padding:0}
.wizard li{display:flex;align-items:center;gap:7px;padding:7px 14px 7px 10px;background:#F2F4F6;color:var(--text-3);border-radius:20px;font-size:12.5px;font-weight:600}
.wizard li span{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#DCE2E8;color:var(--text-2);font-family:var(--mono);font-size:11px}
.wizard li.on{background:#E8F1F2;color:var(--primary)}
.wizard li.on span{background:var(--primary);color:#fff}

/* ---------- Bảng ghép cột ---------- */
.maptbl td{vertical-align:middle}
.maptbl select{max-width:320px}
.samples code{display:inline-block;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;margin:1px 3px 1px 0}
tr.row-unmapped{background:#FAFBFC}
tr.row-unmapped td:first-child{box-shadow:inset 3px 0 0 #DCE2E8}
tr.row-dup{background:#FCEAE8}
tr.row-dup td:first-child{box-shadow:inset 3px 0 0 var(--bad)}
.warntext{color:var(--bad);font-size:12.5px;font-weight:600}

/* ---------- Màn hình ghép cột (bản 2 bước) ---------- */
h3.sec{font-size:13px;color:var(--primary);margin:22px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line);letter-spacing:.01em}
.mapgrid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
.mapgrid .fld label{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.mapgrid .cf{font-size:11px;font-weight:600}
.mapgrid .cf.b-ok{color:var(--ok)} .mapgrid .cf.b-run{color:var(--run)}
.mapgrid .cf.b-warn{color:var(--warn)} .mapgrid .cf.b-off{color:var(--text-3)}
.fld-dup select{border-color:var(--bad);background:#FCEAE8}
em.tag{font-style:normal;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:#EEF1F4;color:var(--text-2);padding:1px 6px;border-radius:10px}
em.tag.key{background:#E8F1F2;color:var(--primary)}

/* ---------- Bảng dữ liệu thô ---------- */
.rawtbl{font-size:12.5px}
.rawtbl th{white-space:nowrap;font-size:10.5px}
.rawtbl td{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- Báo cáo kết quả ---------- */
.resultbox{padding:4px 0}
.resultbox h3{font-size:15px;margin:0 0 12px}
.resultnums{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:14px}
.resultnums div{background:#FAFBFC;border:1px solid var(--line);border-radius:var(--r);padding:12px 14px}
.resultnums b{display:block;font-family:var(--mono);font-size:26px;font-weight:600;letter-spacing:-.02em}
.resultnums span{font-size:11.5px;color:var(--text-2);text-transform:uppercase;letter-spacing:.05em}
.resultnums div.bad b{color:var(--bad)}
.errlist{margin:10px 0 0;padding-left:18px;font-size:12.5px;color:var(--text-2);max-height:280px;overflow:auto}
.errlist li{margin-bottom:3px}
.reqwarn{background:#FDF2E2;border-left-color:var(--warn);color:#7A4A00}

/* Bảng chọn phạm vi dữ liệu ở Hệ thống -> Phân quyền */
.scopetbl td.muted{font-size:12.5px;line-height:1.45}
.scopetbl input[type=radio]{width:auto}
.fld-inline{font-size:12.5px;color:var(--text-2);align-self:center;white-space:nowrap}

/* ---------- Tracking: bảng bắn mã cỡ chữ lớn để camera quay (bản 109) ---------- */
/* Chỉ 2 cột STT + Tracking code, chữ rất to, đúng theo ảnh mẫu Hi gửi.
   Bản 116: cỡ chữ mã lên 130px (biến --trk-size, app.js mục 13 đọc lại biến
   này để TỰ CO cỡ chữ khi mã quá dài so với bề ngang màn hình). */
/* KHÔNG cho bảng này nong ngang ra ngoài màn hình: .tblwrap chung để
   overflow-x:auto nên bảng tự nới rộng theo chuỗi mã, mã dài phải CUỘN NGANG
   mới thấy hết -> camera quay mất số. Khoá bề ngang bằng table-layout:fixed
   để ô mã luôn vừa màn hình, phần "quá dài" xử lý bằng cách CO CỠ CHỮ
   (app.js mục 13) thay vì đẩy ngang. */
.trk-tblwrap{overflow-x:hidden}
.trackingbigtbl{font-size:16px;--trk-size:130px;table-layout:fixed;width:100%}
.trackingbigtbl th{background:#8FD0E0;color:#0B2530;font-size:16px;font-weight:700;padding:10px 14px;text-transform:none;letter-spacing:0}
/* Bản 116 (vá): đổi font mã từ MONO ĐẬM sang font hệ thống nét thường —
   đúng mẫu Hi gửi (bộ font body của trình duyệt, font-weight 400). Chữ mảnh,
   thoáng, dễ đọc trên video hơn nét đậm; ngoài ra font tỉ lệ hẹp hơn mono nên
   cùng bề ngang màn hình mã hiện được TO hơn. */
.trackingbigtbl td{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif;font-weight:400;font-size:var(--trk-size);line-height:1.1;padding:8px 14px;border-bottom:1px solid var(--line)}
/* table-layout:fixed lấy bề rộng cột từ HÀNG ĐẦU (thead) — phải khai width ở
   <th> chứ không chỉ ở <td>, không thì 2 cột bị chia đôi 50/50 và cột mã mất
   một nửa màn hình. */
/* Cột STT bóp sát vào (110px -> 52px, cỡ chữ 34 -> 26px, bỏ padding phải) —
   nhường ~72px bề ngang cho cột Tracking code, mã hiện to thêm. */
.trackingbigtbl th:first-child{width:52px}
.trackingbigtbl td:first-child{width:52px;color:var(--text-3);font-size:26px;text-align:left;vertical-align:middle;padding-right:0}
/* Mã bắt đầu sát ngay sau STT, không chừa khoảng trống thừa. */
.trackingbigtbl td.trk-code{padding-left:8px}
.trackingbigtbl td.empty{font-family:inherit;font-size:15px;font-weight:400}
.trackingbigtbl td.trk-code{white-space:nowrap;overflow:hidden}
/* Đo bề ngang thật của chuỗi mã để app.js co cỡ chữ cho vừa 1 dòng. */
.trackingbigtbl .trk-txt{display:inline-block;white-space:nowrap}
.trackingbigtbl tbody tr:nth-child(even){background:#F5F7F8}
/* Dòng 1 = mã VỪA BẮN (bản 116 sắp xếp id giảm dần) — màu nền: xem bản 169 bên dưới. */
/* Bản 167 (ảnh Hi gửi, khoanh dòng 1): mã VỪA BẮN in ĐẬM, màu đậm hơn.
   Bản 168 (Hi: "tô đậm hết"): MỌI mã trong bảng đều in đậm; dòng vừa bắn vẫn
   nổi nhờ nền xanh + vạch trái + màu chữ sẫm hơn. Chữ đậm rộng hơn, app.js mục
   13 đo lại từng dòng nên vẫn tự co vừa 1 dòng. Dùng chung Tracking + Bắn đơn ra kho. */
.trackingbigtbl td.trk-code{font-weight:700}
/* Bản 169 (Hi: "sang màu xanh đậm ở dòng đầu tiên"): dòng vừa bắn nền XANH ĐẬM,
   chữ trắng đậm (thay nền xanh nhạt bản 116) — nổi hẳn trên video camera. */
.trackingbigtbl tbody tr.trk-newest,
.trackingbigtbl tbody tr.trk-newest:nth-child(even){background:#0D47A1;box-shadow:inset 6px 0 0 #082C66}
.trackingbigtbl tbody tr.trk-newest td{border-bottom-color:#0D47A1}
.trackingbigtbl tbody tr.trk-newest td.trk-code{font-weight:700;color:#fff}
.trackingbigtbl tbody tr.trk-newest td:first-child{font-weight:700;color:#fff}

/* ---------- Tracking: cảnh báo "ĐƠN KHÔNG TỒN TẠI" (bản 120) ---------- */
/* Mã quét không khớp đơn hàng "Đã in" nào -> chặn lưu, báo chữ TO/ĐẬM ngay
   trên khung quay video (cùng tinh thần cỡ chữ lớn với .trackingbigtbl để
   camera bắt rõ được, không cần zoom vào dòng flash nhỏ ở trên cùng trang). */
.trk-notfound{background:#FCEAE8;border:3px solid var(--bad);border-radius:var(--r);padding:14px 20px;margin-bottom:16px;text-align:center}
.trk-notfound-title{color:var(--bad);font-weight:800;font-size:34px;letter-spacing:.5px;line-height:1.2}
.trk-notfound-code{color:var(--bad);font-weight:700;font-size:46px;margin-top:4px;word-break:break-all;line-height:1.15}
.trk-notfound-sub{color:var(--bad);font-size:20px;font-weight:600;margin-top:6px}

/* ---------- Tracking: thu gọn khung quét (bản 116) ---------- */
/* Thu gọn = ẩn đoạn hướng dẫn, nhãn, ô chọn nhân viên và nút bấm; CHỈ CHỪA ô
   quét mã một dòng mảnh — máy bắn mã vẫn bắn tiếp bình thường, không cần mở
   lại. <select> chỉ bị ẩn (display:none) nên vẫn nằm trong form và vẫn gửi
   đúng giá trị nhân viên đã chọn trước đó. */
.trkpanel .trk-box{transition:none}
/* Bản 132: dùng lại y nguyên bộ lớp này cho màn hình "Bắn đơn ra kho"
   (bangiaovc_scan.php) — thêm .trk-toolbar (form chọn ĐVVC/ngày/người giao
   nhận) và .trk-detail (bảng chi tiết 7 cột) vào danh sách bị ẩn. Trang
   Tracking không có 2 khối này nên khai thêm cũng không ảnh hưởng gì. */
.trkpanel.trk-collapsed .trk-intro,
.trkpanel.trk-collapsed .trk-fld-nv,
.trkpanel.trk-collapsed .trk-toolbar,
.trkpanel.trk-collapsed .trk-detail,
.trkpanel.trk-collapsed .trk-formbar,
.trkpanel.trk-collapsed .trk-fld-scan label{display:none}
/* Dòng "Đang bắn cho ĐVVC ... ngày ... đã bắn N đơn" KHÔNG ẩn (bắn nhầm ĐVVC
   là hỏng cả phiếu bàn giao), chỉ bóp lại cho gọn khung hình. */
.trkpanel.trk-collapsed .trk-status{margin:0 0 6px;font-size:13px;color:var(--text-2)}
.trkpanel.trk-collapsed .trk-box{margin-bottom:6px}
.trkpanel.trk-collapsed .trk-form{max-width:520px}
.trkpanel.trk-collapsed .trk-fld-scan{margin:0}
.trkpanel.trk-collapsed .trk-fld-scan input{height:34px;padding:4px 10px;font-size:14px}
.trk-toggle{white-space:nowrap}
/* Chế độ quay video: .main bị chặn max-width:1500px (bố cục đọc chữ cho dễ),
   trên màn hình lớn/TV ở trạm đóng gói thì đó là chỗ trống phí. Khi THU GỌN
   thì bỏ chặn để mã dùng trọn bề ngang -> mã ngắn đạt đủ 130px.
   Chỉ áp khi đang ở màn hình Tracking và đang thu gọn (app.js gắn/gỡ class
   này trên <body>), KHÔNG đụng trang nào khác. */
body.trk-camera .main{max-width:none}
.trackingpivot th,.trackingpivot td{white-space:nowrap}

/* Bản 162 — ô chọn có gõ tìm kiếm (app.js mục 12) */
.ss-wrap{position:relative}
.ss-wrap .ss-input{width:100%}
.ss-native{position:absolute!important;left:0;bottom:0;width:100%!important;height:1px!important;opacity:0;pointer-events:none;border:0!important;padding:0!important}
.ss-list{position:absolute;z-index:40;left:0;right:0;top:100%;margin-top:2px;max-height:280px;overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:6px;box-shadow:0 8px 24px rgba(16,24,40,.14)}
.ss-opt{padding:7px 10px;cursor:pointer;font-size:13px;line-height:1.35;border-bottom:1px solid #F1F3F5}
.ss-opt:last-child{border-bottom:0}
.ss-opt.act{background:#EAF3F5}
.ss-opt.on{font-weight:600}
.ss-empty{padding:9px 10px;color:#6B7785;font-size:13px}

/* Bản 162 — khung "Sửa nhanh" (app.js mục 13) */
.qe-panel.qe-collapsed{display:none}
.qe-panel{border-left:3px solid #0F6B78}

/* Bản 263 — ô chọn nhiều (type multi), video/tài liệu nhúng (Hướng dẫn sử dụng / Báo lỗi phần mềm) */
.multi-filter{width:100%;max-width:360px;margin-bottom:6px}
.multi-box{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:4px 12px;max-height:230px;overflow:auto;
  border:1px solid var(--line,#e2e8f0);border-radius:8px;padding:8px 10px;background:var(--card,#fff)}
.multi-opt{display:flex;align-items:center;gap:6px;font-weight:400;margin:0;cursor:pointer;min-width:0}
.multi-opt span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.multi-opt.is-hidden{display:none}
.multi-tags{display:inline-flex;flex-wrap:wrap;gap:4px}
.chip.chip-multi{font-size:12px;padding:1px 8px}
.thumbs-player{display:flex;flex-direction:column;gap:10px}
.thumbs-player .thumb-video{width:100%;max-width:820px;height:auto;aspect-ratio:16/9}
.thumbs-player .thumb-video iframe,.thumbs-player video.thumb-video-local{width:100%;height:100%}
.thumbs-player video.thumb-video-local{max-width:820px;height:auto}
.doc-embed{display:flex;flex-direction:column;gap:6px;width:100%;max-width:820px}
.doc-embed iframe{width:100%;height:480px;border:1px solid var(--line,#e2e8f0);border-radius:8px;background:#fff}
td .thumbs-player .thumb-video,td .doc-embed{max-width:220px}
td .doc-embed iframe{display:none}
@media (max-width:640px){.doc-embed iframe{height:360px}.multi-box{grid-template-columns:1fr 1fr}}

/* Bản 264 — nút Hướng dẫn sử dụng / Báo lỗi phần mềm trên thanh tiêu đề */
.hdr-top.on{background:var(--line,#e2e8f0);font-weight:600}

/* Bản 265 — CKEditor 4: nội dung hiển thị ở trang Xem */
.richtext-view img{max-width:100%;height:auto}
.richtext-view figure.image{display:inline-block;margin:8px 0;text-align:center}
.richtext-view figure.image figcaption{font-size:13px;color:var(--muted,#64748b)}
.richtext-view table{border-collapse:collapse;max-width:100%}
.richtext-view table td,.richtext-view table th{border:1px solid var(--line,#e2e8f0);padding:4px 8px}
.richtext-view iframe{max-width:100%}
.richtext-view .youtube-embed-wrapper{max-width:820px}
.richtext-view .widget-toc{border:1px solid var(--line,#e2e8f0);border-radius:8px;padding:8px 14px;margin:8px 0;background:var(--card,#fff)}
.cke{max-width:100%}
/* Bản 268 — CKEditor 5: đếm chữ dưới khung soạn thảo; video nhúng ở trang Xem */
.ck-wordcount{font-size:12px;color:var(--muted,#64748b);text-align:right;padding:2px 4px}
.ck-wordcount .ck-word-count{display:flex;justify-content:flex-end;gap:10px}
.richtext-view figure.media{margin:8px 0;max-width:820px}
.richtext-view figure.image.image-style-side{float:right;max-width:50%;margin-left:12px}
.ck-editor__editable{max-height:70vh}
/* Bản mobile (Hi): "Sản phẩm bán chạy" / "Dữ liệu cũ" (views/spbanchay_list.php) trên điện thoại.
   Trước: dòng TỔNG CỘNG ở <tfoot> không được chuyển thành thẻ như <tbody> -> ô trống + số xếp thành
   1 cột hẹp có viền xanh. Giờ: thẻ sản phẩm có tên làm tiêu đề, dòng tổng thành 1 thẻ tổng có nhãn,
   bảng đơn xổ ra ("Xem đơn") cũng thành thẻ có nhãn. Đặt cuối file để đè quy tắc thẻ chung ở trên. */
@media (max-width:640px){
  .spbc-sum{gap:4px 16px;padding:10px 12px;font-size:13.5px}
  .spbc-sum span{flex:1 1 calc(50% - 8px)}
  .spbc-note{padding:6px 12px 10px}

  /* Thẻ sản phẩm: STT + nút xổ đơn trên cùng, tên sản phẩm làm tiêu đề đậm, căn trái */
  .spbc-tbl tbody tr.spbc-top{background:#FFFBEF;border-color:#F5D88A}
  .spbc-tbl tbody tr.spbc-top td{background:transparent}
  .spbc-tbl td.spbc-stt{justify-content:flex-start;align-items:center;gap:0;padding:0 0 4px;border-bottom:0;
    font-weight:700;color:var(--primary);font-size:13px}
  .spbc-tbl td.spbc-ten{display:block;text-align:left;font-weight:600;font-size:15px;line-height:1.35;
    padding:0 0 8px;color:#111}
  .spbc-tbl td.spbc-ten::before{display:none}
  .spbc-tbl td.num{font-variant-numeric:tabular-nums}
  .spbc-tbl tbody > tr:not(.exprow) > td:last-child{justify-content:space-between}   /* "Lãi" cùng kiểu nhãn trái - số phải */
  /* Đường kẻ dọc giữa các cột (bảng máy tính) thành vạch thừa ở mép phải thẻ — bỏ cho mọi bảng dạng thẻ */
  .tbl:not(.matrixtbl) td{border-right:0!important}

  /* Dòng TỔNG CỘNG -> 1 thẻ tổng nền xanh nhạt, mỗi số 1 dòng có nhãn */
  .spbc-tbl tfoot{display:block;width:100%}
  .spbc-tbl tfoot tr.spbc-tong{display:block;margin:4px 0 10px;padding:11px 13px;border:1px solid #BFD3FB;
    border-left:4px solid #2F6FED;border-radius:10px;background:#EEF4FF}
  .spbc-tbl tfoot tr.spbc-tong td{background:transparent;border-top:0;border-bottom:1px dashed #D5E2FB;font-size:15px}
  .spbc-tbl tfoot tr.spbc-tong td:last-child{border-bottom:0;padding-top:5px;justify-content:space-between}
  .spbc-tbl tfoot td.spbc-rong{display:none}
  .spbc-tbl tfoot td.spbc-tong-h{display:block;text-align:left;color:#1D4ED8;font-size:14px;
    letter-spacing:.04em;padding:0 0 6px}
  .spbc-tbl tfoot td.spbc-tong-h::before{display:none}

  /* Danh sách đơn xổ ra: bỏ lề trái 48px, mỗi đơn thành thẻ con có nhãn */
  .spbc-tbl tbody tr.exprow{padding:8px;background:#F6FAFB}
  .tbl tbody tr.exprow > td,.tbl tbody tr.exprow:hover > td{display:block;padding:0!important;border:0;text-align:left}
  .tbl tbody tr.exprow > td::before{display:none}
  .spbc-tbl .spbc-don{min-width:0;width:100%;border:0;background:transparent;font-size:13.5px}
  .spbc-tbl .spbc-don tbody tr{margin-bottom:8px;padding:8px 11px;box-shadow:none}
  .spbc-tbl .spbc-don td:first-child{justify-content:flex-start;font-weight:700;color:var(--text-3)}
  .spbc-tbl .spbc-don td:first-child::before{display:block;content:"Đơn"}
  .spbc-tbl .spbc-don td:last-child{padding-top:5px;justify-content:space-between}
}
