/* =====================================================================
   CRM ECO PAK — giao diện
   Nguyên tắc nghiệp vụ: ít thao tác nhất có thể.
   Sửa tại chỗ là đường chính — bấm vào ô, rời ô là lưu, không nút Lưu.

   NGOẠI LỆ DUY NHẤT, thêm 08/09/2026: nút "✎ Sửa hồ sơ" ở góc trên bên
   phải hồ sơ khách, mở một hộp gom TOÀN BỘ trường được phép sửa. Lý do:
   ô sửa tại chỗ vẽ y hệt chữ thường, nên người mới không biết bấm vào là
   sửa được, và không ai trả lời được câu "rốt cuộc tôi được sửa những
   gì". Hộp đó trả lời đúng câu ấy, và có hẳn mục "không sửa được" kèm lý
   do. Nó KHÔNG thay sửa tại chỗ — hai đường cùng tồn tại, cùng đi qua
   những chốt sẵn có ở máy chủ. Đừng nhân ngoại lệ này ra các màn khác
   nếu chưa có lý do tương đương.

   Nguyên tắc hình thức (mượn cách làm của Odoo 18 và Frappe/ERPNext):
     1. Màu dùng rất tiết kiệm. Nền và khung toàn màu trung tính; màu
        thương hiệu chỉ dành cho thứ bấm được và cho trạng thái.
     2. Khung mỏng hơn bóng đổ. Thẻ là 1px viền nhạt, bóng gần như không
        thấy — nhìn ra phần mềm quản trị, không phải trang giới thiệu.
     3. Số phải soi được theo cột: mọi bảng dùng chữ số đều chiều rộng.
     4. Mỗi thành phần một thang màu duy nhất, khai báo ở :root, không
        rải mã màu vào từng chỗ.
   ===================================================================== */

:root{
  /* --- thang trung tính --------------------------------------------- */
  --n0:#ffffff;
  --n25:#fbfcfd;
  --n50:#f6f8fa;
  --n100:#eef1f5;
  --n200:#e4e8ee;
  --n300:#d4dae2;
  --n400:#a5b0bd;
  --n500:#6f7d8c;
  --n600:#54626f;
  --n700:#3a4653;
  --n900:#15202b;

  /* --- thang màu thương hiệu ----------------------------------------
     Giữ nguyên #0b6a8f của ECO PAK làm bậc 600; các bậc còn lại dựng
     quanh nó để trạng thái rê chuột / đang chọn / nền nhạt luôn khớp. */
  --c25:#f4fafd;
  --c50:#e9f3f9;
  --c100:#cfe5f0;
  --c200:#a6cfe4;
  --c500:#0d7ba4;
  --c600:#0b6a8f;
  --c700:#08536f;
  --c800:#063f55;

  /* --- màu trạng thái, dùng chung cho mọi nhãn trong ứng dụng -------- */
  --tt-xam-n:#eef1f5;  --tt-xam-c:#4e5c6a;
  --tt-lam-n:#e7f0fa;  --tt-lam-c:#1a5c9c;
  --tt-luc-n:#e3f5ea;  --tt-luc-c:#16794a;
  --tt-vang-n:#fdf1de; --tt-vang-c:#8a5a12;
  --tt-do-n:#fdeaea;   --tt-do-c:#a52121;
  --tt-nau-n:#f2eee6;  --tt-nau-c:#77653f;
  --tt-tim-n:#f0eafa;  --tt-tim-c:#6d4aa8;

  /* --- tên cũ, giữ nguyên để 9 tệp module không phải sửa ------------- */
  --nen:var(--n50);
  --the:var(--n0);
  --vien:var(--n200);
  --vien-dam:var(--n300);
  --chu:var(--n900);
  /* 21/09: đậm hơn --n500 một nấc. Nhãn cột (th) và số phụ dùng màu này,
     trên nền trắng chỉ được 4,15 — dưới ngưỡng đọc được. #5a6875 cho
     4,92 mà vẫn là chữ phụ, không tranh chỗ với chữ chính. */
  --chu-mo:#5a6875;
  --chu-nhat:var(--n400);
  /* --mo được dùng 25 chỗ trong bao-gia/bang-gia/cong-no/bao-cao nhưng
     chưa từng khai báo — tiêu đề cột và chữ phụ ở những chỗ đó vẫn đang
     ăn màu chữ đen. Khai báo ở đây là chúng về đúng màu xám. */
  --mo:var(--chu-mo);
  --chinh:var(--c600);
  --chinh-dam:var(--c700);
  --chinh-nhat:var(--c50);
  --xanh:var(--tt-luc-c);
  --xanh-nhat:var(--tt-luc-n);
  --cam:var(--tt-vang-c);
  --cam-nhat:var(--tt-vang-n);
  --do:#b4232a;
  --do-nhat:var(--tt-do-n);
  --tim:var(--tt-tim-c);

  /* --- bóng, bo góc, vòng focus ------------------------------------- */
  --bong:0 1px 2px rgba(16,24,40,.05);
  --bong-nhe:0 1px 3px rgba(16,24,40,.08), 0 1px 2px rgba(16,24,40,.04);
  --bong-cao:0 16px 40px rgba(16,24,40,.18), 0 4px 12px rgba(16,24,40,.08);
  --r:10px;      /* thẻ */
  --r-o:8px;     /* ô nhập, nút */
  --r-nho:6px;   /* nút nhỏ */
  --vong:0 0 0 3px rgba(11,106,143,.16);
}

*{box-sizing:border-box}
/* 14/09/2026 — body PHẢI là min-height, KHÔNG được là height.
   Anh Trọng chụp màn Quản trị › KiotViet: cuộn xuống thì nội dung hiện
   ra Ở PHÍA TRÊN thanh điều hướng, như thể thanh đó trong suốt.

   ĐO ĐƯỢC: `html,body{height:100%}` ép body cao đúng 765px (bằng màn
   hình) trong khi #khung bên trong cao 5051px và tràn ra ngoài. Thanh
   tiêu đề #dau nằm TRỰC TIẾP trong body, mà position:sticky chỉ dính
   được trong phạm vi hộp của cha — hết 765px là #dau trôi đi mất (đo
   được top = -486). Còn #dieu-huong nằm trong #khung cao 5051px nên
   vẫn dính ở top:51px. Kết quả: một dải 51px trống hoác phía trên
   thanh điều hướng, nội dung chạy qua đó nhìn thấy hết.

   Đổi sang min-height thì body cao theo nội dung (5102px), #dau dính
   lại ở top 0 và bịt kín dải đó. Không có phần tử nào trong dự án đặt
   height:100% dựa vào chiều cao của body, nên đổi không ảnh hưởng gì.

   Ai sửa file này về sau: đừng đổi lại thành height:100% cho "gọn". */
html{height:100%}
body{min-height:100%}
/* 13/09/2026 — chừa sẵn chỗ cho thanh cuộn dọc. Đo được: màn ít dòng
   (Trả hàng) không sinh thanh cuộn nên vùng nội dung rộng hơn màn nhiều
   dòng đúng 15px (1178 so với 1163) → đổi tab là cả thẻ trượt ngang 15px.
   Đây là một nhánh của "bấm vào các chip cũng nhảy loạn xạ". Chừa chỗ
   sẵn thì bề ngang không đổi dù có thanh cuộn hay không. Chỉ áp cho máy
   tính: điện thoại thanh cuộn nổi, không chiếm chỗ. */
@media(min-width:901px){html{scrollbar-gutter:stable}}
body{
  margin:0;background:var(--nen);color:var(--chu);
  font-family:Inter,"Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  font-size:14px;line-height:1.5;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  font-feature-settings:"cv05" 1;   /* chữ l có đuôi, đỡ nhầm với I và 1 */
}
a{color:var(--chinh);text-decoration:none}
a:hover{text-decoration:underline}
button{font:inherit;cursor:pointer;color:inherit}
input,select,textarea{font:inherit;color:inherit}
.an{display:none !important}
::selection{background:var(--c100)}

/* Bàn phím thì phải thấy mình đang ở đâu; chuột thì không hiện vòng. */
:focus-visible{outline:2px solid var(--c600);outline-offset:2px}

/* ---------- thanh trên ----------
   padding-top:env(...) là để khi chạy dạng ứng dụng trên iPhone tai thỏ,
   thanh tiêu đề không chui xuống dưới thanh trạng thái. Ở trình duyệt
   thường và trên máy tính giá trị này là 0 nên không đổi gì. */
#dau{background:var(--n0);border-bottom:1px solid var(--vien);position:sticky;top:0;z-index:40;
  padding-top:env(safe-area-inset-top)}
/* 185 — trang mở trong hộp đơn (lớp gắn ở đầu app.js, trước lượt vẽ đầu) */
html.trong-hop-don #dau,html.trong-hop-don #dieu-huong,html.trong-hop-don #duoi,html.trong-hop-don #phu-menu{display:none!important}
html.trong-hop-don #khung{padding-top:0!important}
html.trong-hop-don body{background:#fff}
.dau-trong{max-width:1560px;margin:0 auto;padding:9px 18px;display:flex;align-items:center;gap:12px}
.hieu{font-weight:700;font-size:15px;letter-spacing:-.1px;color:var(--c700);white-space:nowrap}
.day{display:flex;align-items:center;gap:8px}
.xa{margin-left:auto}

/* ---------- chip ----------
   .chip     — nhãn tĩnh ở thanh trên và ô xem trước thêm nhanh
   .chip-loc — nút lọc trong các màn danh sách. Bốn tệp module dùng lớp
               này nhưng chưa có luật nào, nên đến giờ nó vẫn hiện ra là
               nút xám mặc định của trình duyệt, lạc hẳn khỏi phần còn lại. */
.chip{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;
  background:var(--n100);color:var(--n600);font-size:11.5px;font-weight:600;
  letter-spacing:.1px;white-space:nowrap}
.chip.hoat{background:var(--c50);color:var(--c700);box-shadow:inset 0 0 0 1px var(--c100)}

/* Màn Cơ hội và dòng thời gian lọc bằng .chip.chip-nut, các màn danh sách
   lọc bằng .chip-loc. Hai kiểu chip lọc cạnh nhau trong cùng một ứng dụng
   nhìn rất lộ, nên cho .chip-nut mượn nguyên hình dáng của .chip-loc. */
.chip-nut{cursor:pointer}
.chip.chip-nut{padding:5px 12px;border:1px solid var(--n200);background:var(--n0);
  color:var(--n600);font-size:12.5px;font-weight:600;line-height:1.35;
  transition:background .12s,border-color .12s,color .12s}
.chip.chip-nut:hover:not(.hoat){background:var(--n50);border-color:var(--n300);color:var(--n700)}
.chip.chip-nut.hoat{background:var(--c600);border-color:var(--c600);color:#fff;box-shadow:none}

/* Chip lọc: 29px -> 25px cao. Dãy chip nhóm khách có tới 9 cái nằm ngay
   trên bảng; chip cao bằng nút bấm thì nó chiếm mất một băng ngang và
   đẩy bảng xuống. Chip là bộ lọc, không phải hành động — nhỏ hơn nút. */
.chip-loc{display:inline-flex;align-items:center;gap:5px;
  padding:3px 10px;border-radius:999px;border:1px solid var(--n200);
  background:var(--n0);color:var(--n600);
  font-size:12px;font-weight:600;line-height:1.4;white-space:nowrap;
  cursor:pointer;transition:background .12s,border-color .12s,color .12s}
.chip-loc:hover:not(.hoat){background:var(--n50);border-color:var(--n300);color:var(--n700)}
.chip-loc.hoat{background:var(--c600);border-color:var(--c600);color:#fff}
.chip-loc[disabled]{opacity:.5;cursor:default}
/* Vạch ngăn giữa các CỤM chip lọc (di trú 075).
   Màn Đơn hàng trộn hai loại chip: sáu TRẠNG THÁI đi theo một đường, và
   mấy LÁT CẮT không phải trạng thái (Tất cả, Đang chạy, Chờ thu tiền).
   Không ngăn ra thì người đọc tưởng tất cả đều là giai đoạn — và chính vì
   trộn mà chip "Hoàn thành" từng bị bỏ quên. Vạch mảnh, không nhãn chữ:
   đủ để mắt tách cụm mà không thêm chữ phải đọc. */
.chip-vach{display:inline-block;width:1px;height:18px;
  background:var(--n300);margin:0 3px;flex:none}
/* Hàng bộ lọc đứng riêng dưới hàng tiêu đề — xem chú thích trong
   don-hang.js. Chip nhiều thì xuống dòng trong chính hàng này, không
   đẩy nút hành động đi đâu cả. */
.dh-hang-loc{display:flex;flex-wrap:wrap;align-items:center;gap:6px}

/* ---------- nút quay lại ← (311 — anh Trọng chốt 03/10/2026) ----------
   MỘT nơi định nghĩa nút ← cho mọi trang XEM mở từ một danh sách (đơn,
   hồ sơ khách, công nợ, cơ hội, việc, bảng giá nhanh). Luật đi kèm:
   trang xem dùng ←, tờ đang soạn và hộp thoại dùng ✕ (.dong-x) — không
   bao giờ cả hai trên một màn. Nút có viền, kèm tên màn sẽ về (nhanLui),
   cao 36px; điện thoại chỉ còn mũi tên 40×40 (Apple 44pt, WCAG ≥ 24px).
   Mũi tên vẽ bằng mask SVG theo currentColor; chữ "←" trong .mui chỉ còn
   cho máy đọc màn hình. Trước 311: chip bo tròn 12.5px ở Công nợ, chữ
   trơn 74×20 ở xem đơn (.dx2-ve), chữ trơn ở hồ sơ khách (.a-lui),
   .nut thường "← …" ở cơ hội / việc / bảng giá nhanh. */
.nut-ve{display:inline-flex;align-items:center;gap:6px;margin-bottom:10px;
  height:36px;padding:0 12px 0 9px;border:1px solid var(--n300);border-radius:8px;
  background:var(--n0);color:var(--n700);text-decoration:none;
  font-size:13.5px;font-weight:600;line-height:1;white-space:nowrap;cursor:pointer;
  transition:background .12s,border-color .12s,color .12s}
.nut-ve:hover{background:var(--n100);border-color:var(--n400);color:var(--n900)}
.nut-ve:active{background:var(--n200)}
.nut-ve:focus-visible,.dong-x:focus-visible{outline:2px solid var(--chinh);outline-offset:2px}
.nut-ve .mui{flex:none;width:18px;height:18px;font-size:0;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 12H5M11 18l-6-6 6-6'/%3E%3C/svg%3E") center/18px 18px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 12H5M11 18l-6-6 6-6'/%3E%3C/svg%3E") center/18px 18px no-repeat}
.day>.nut-ve,.dx2-h1>.nut-ve,.gd-ten>.nut-ve,.the-dau>.nut-ve{margin-bottom:0}
/* Cơ hội: nút lui lên đầu trang; thẻ cuối chỉ còn nút dọn dẹp — không còn nút nào thì ẩn thẻ. */
.the.ch-don:has(.day.xa:empty){display:none}
@media (max-width:640px){
  .nut-ve{width:40px;height:40px;padding:0;gap:0;justify-content:center;font-size:0}
}

/* ---------- khung ---------- */
#khung{max-width:1560px;margin:0 auto;padding:16px 18px 60px;display:flex;gap:16px;align-items:flex-start}
#dieu-huong{width:192px;flex:0 0 192px;position:sticky;top:60px}
#dieu-huong button{position:relative;display:flex;align-items:center;gap:9px;width:100%;text-align:left;
  padding:8px 11px;margin-bottom:1px;border:0;border-radius:var(--r-o);background:transparent;
  color:var(--n600);font-weight:500;font-size:13.5px;transition:background .12s,color .12s}
#dieu-huong button:hover{background:var(--n100);color:var(--n900)}
/* Mục đang mở: nền nhạt + gạch dọc bên trái. Trước đây là cả khối xanh
   đặc, nặng hơn hẳn mọi thứ khác trên màn và hút hết mắt về thanh trái. */
#dieu-huong button.hoat{background:var(--c50);color:var(--c700);font-weight:650}
#dieu-huong button.hoat::before{content:"";position:absolute;left:0;top:7px;bottom:7px;
  width:3px;border-radius:0 3px 3px 0;background:var(--c600)}
#dieu-huong .dem{margin-left:auto;font-size:11px;font-weight:700;opacity:.9}
/* Biểu tượng + chữ của nút điều hướng (13/09/2026 — xem chú thích
   DH_ICON trong app.js). Chữ bọc trong .dh-chu để thu gọn được. */
#dieu-huong button .dh-ico{flex:none;width:18px;height:18px;display:inline-flex;color:var(--n500)}
#dieu-huong button .dh-ico svg{width:18px;height:18px}
#dieu-huong button:hover .dh-ico{color:var(--n700)}
#dieu-huong button.hoat .dh-ico{color:var(--c600)}
#dieu-huong button .dh-chu{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#than{flex:1;min-width:0}

/* =====================================================================
   NAV NGANG TRÊN ĐẦU — NAV CHÍNH THỨC CỦA KHỔ MÁY TÍNH (13/09/2026)

   Ra đời là bản thử để so với dải biểu tượng dọc; anh Trọng chọn ngang
   và chạy ổn cả ngày, nên tối 13/09 đã gỡ nhánh thua: khối "nav thu gọn
   56px" (body.nav-gon) và nút ☰ trên máy tính không còn nữa. Tiền tố
   `body.nav-ngang` GIỮ NGUYÊN — app.js gán class này vô điều kiện. Cố ý
   không gỡ tiền tố: nhiều luật dưới đây dựa vào độ dài của nó để thắng
   độ ưu tiên (xem #cn-hoi), gỡ là nút "Hướng dẫn" chạy về sai chỗ.
   Mấy luật #dieu-huong ở đầu tệp (nav dọc 192px) giờ chỉ còn là NỀN cho
   ngăn kéo điện thoại (<901px) — không phải một kiểu nav máy tính nữa.

   ĐO TRƯỚC KHI DỰNG (13 mục, chữ 13,5px, đệm 12px, hở 4px):
     có biểu tượng  = 1458px → KHÔNG vừa màn 1440 (khung 1425)
     chỉ chữ        = 1133px → vừa 1440, vừa 1366 (1330), vừa 1280 (1244)
   Nên hàng ngang BỎ biểu tượng. Biểu tượng giữ nguyên cho ngăn kéo điện
   thoại, nơi mỗi mục một dòng nên có chỗ.

   Thanh đầu đang chiếm 561px (tên hệ thống + 3 chip đơn vị + tên người +
   chuông + Thoát), nên nav ngang phải là HÀNG RIÊNG, không nhét chung
   được. Đổi lại bảng được trọn chiều ngang: ở 1366px bảng công nợ cần
   1113px thì còn 1106px (trước đó nav dọc để lại 898px).

   Hình dáng mượn .v-tab đã có sẵn trong dự án (gạch chân mục đang mở) —
   cùng lối với KiotViet và Zoho, không đặt kiểu thứ ba.

   "Hướng dẫn" và "⇅ Sắp xếp" là việc phụ nên đẩy sang mép phải.
   ===================================================================== */
@media(min-width:901px){
  /* Ngang thì không có gì để thu — nút ☰ chỉ còn cho ngăn kéo điện thoại. */
  body.nav-ngang #menu-nut{display:none}

  body.nav-ngang #khung{display:block;padding-top:0}
  body.nav-ngang #than{width:100%;min-width:0}

  /* ---- Dáng thanh: theo đúng KiotViet, đo tại ecopakvn.kiotviet.vn ----
     nav nền #0070F4 đặc, cao 48px; chữ 14px/600 màu trắng, đệm 8px 20px;
     mục đang mở nền #005AC3 (xanh đậm hơn) bo góc 8px.
     Mình theo cùng khuôn nhưng thay xanh KiotViet bằng xanh của hệ
     (--c700), và chữ 13px thay vì 14px — anh Trọng muốn nhỏ hơn, và
     mình có 13 mục trong khi KiotViet có 10.
     Âm 18px hai bên để nền trải hết bề ngang khung. 51px = chiều cao
     thật của #dau. */
  body.nav-ngang #dieu-huong{position:sticky;top:51px;z-index:30;
    display:flex;flex-wrap:wrap;align-items:center;gap:1px;
    width:auto;flex:none;
    margin:0 -18px 14px;padding:5px 18px;
    background:var(--c700);border-bottom:0;
    transition:none}
  body.nav-ngang #dieu-huong button{width:auto;flex:none;
    margin:0;padding:7px 12px;gap:0;
    border-radius:8px;border:0;
    font-size:13px;font-weight:600;letter-spacing:.1px;
    color:rgba(255,255,255,.86)}
  body.nav-ngang #dieu-huong button:hover{background:rgba(255,255,255,.13);color:#fff}
  body.nav-ngang #dieu-huong button.hoat{background:var(--c800);color:#fff;font-weight:650}
  /* Gạch dọc bên trái là của kiểu cột — ngang thì cả ô đã đổi nền. */
  body.nav-ngang #dieu-huong button.hoat::before{content:none}
  body.nav-ngang #dieu-huong button .dh-ico{display:none}
  /* Ô đếm trên nền xanh: viên trắng mờ, không dùng màu nhấn nữa vì nền
     đã là màu nhấn — chữ xanh trên xanh thì mất hút. */
  body.nav-ngang #dieu-huong button .dem{margin-left:6px;
    background:rgba(255,255,255,.22);color:#fff;border-radius:999px;
    padding:0 6px;min-width:17px;height:17px;line-height:17px;
    display:inline-block;text-align:center;font-size:10.5px;opacity:1}
  body.nav-ngang #dieu-huong button .dem:empty{display:none}
  /* Phải đủ mạnh để thắng luật `#dieu-huong button{margin:0}` ở trên —
     luật kia có hai thẻ nên độ ưu tiên cao hơn nếu viết `#cn-hoi` trống.
     Đã dính: Hướng dẫn đứng dính ngay sau Báo cáo thay vì ra mép phải. */
  body.nav-ngang #dieu-huong #cn-hoi{margin-left:auto}

  /* Quản trị và Sắp xếp dời vào menu bánh răng góc phải (anh Trọng
     13/09: "2 cái này chỉ cần hiển thị cho mình"). Vẫn nằm trong DOM để
     ngăn kéo điện thoại và cơ chế sắp xếp dùng lại được. */
  body.nav-ngang #dieu-huong button[data-man="quantri"],
  body.nav-ngang #dh-sap{display:none}
  /* Trừ lúc ĐANG sắp xếp: cần nút "✓ Xong" và "Về mặc định" ngay trên
     thanh, không thì bật chế độ sắp rồi không có đường ra. */
  body.nav-ngang #dieu-huong.sap-xep #dh-sap{display:inline-flex}
  body.nav-ngang #dieu-huong.sap-xep button[data-man="quantri"]{display:inline-flex}
  body.nav-ngang #dh-sap,body.nav-ngang #dh-goc{margin-top:0;
    color:rgba(255,255,255,.7);font-size:12px}

  /* Đang sắp xếp: hai mũi tên là TRÁI/PHẢI, nằm cạnh nhau ở đáy nút —
     nút ngang chỉ cao ~32px, không xếp chồng hai mũi tên được. */
  body.nav-ngang #dieu-huong.sap-xep button[data-man]{padding-bottom:23px}
  body.nav-ngang .dh-mui{top:auto;bottom:3px;width:18px;height:16px;
    background:rgba(255,255,255,.9);border-color:transparent;color:var(--c800)}
  body.nav-ngang .dh-len{right:24px}
  body.nav-ngang .dh-xuong{right:4px}
}

/* ---------- menu bánh răng góc phải: Quản trị + Sắp xếp ----------
   Xem chú thích dungMenuQuanTri() trong app.js. Chỉ quản trị mới có. */
#qt-boc{position:relative;display:inline-flex}
#qt-nut{font-size:15px;line-height:1;padding:4px 9px}
#qt-nut.hoat{background:var(--c50);border-color:var(--c100);color:var(--c700)}
#qt-bang{display:none;position:absolute;top:calc(100% + 6px);right:0;z-index:70;
  min-width:190px;padding:5px;
  background:var(--n0);border:1px solid var(--vien);border-radius:var(--r);
  box-shadow:0 8px 26px rgba(16,24,40,.16)}
#qt-boc.mo #qt-bang{display:block}
#qt-bang button{display:block;width:100%;text-align:left;border:0;background:transparent;
  padding:8px 11px;border-radius:var(--r-o);
  font:inherit;font-size:13.5px;font-weight:500;color:var(--n700);cursor:pointer}
#qt-bang button:hover{background:var(--n100);color:var(--n900)}
@media(max-width:900px){ #qt-boc{display:none} }

/* ---------- thẻ ---------- */
.the{background:var(--the);border:1px solid var(--vien);border-radius:var(--r);box-shadow:var(--bong)}
.the+.the{margin-top:14px}
/* Luật trên là để xếp thẻ chồng nhau theo chiều dọc. Khi thẻ nằm trong
   lưới (ô chỉ số ở Bảng điều khiển, phễu bán hàng) nó làm ô thứ 2 trở đi
   tụt xuống 14px so với ô đầu — cả hàng lệch nhau thấy rõ. */
.luoi>.the+.the{margin-top:0}
.the-dau{padding:11px 15px;border-bottom:1px solid var(--vien);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.the-dau h2{margin:0;font-size:14.5px;font-weight:650;letter-spacing:-.1px}
.the-dau>b{font-weight:650;letter-spacing:-.1px}
.the-than{padding:15px}
.the-chan{padding:10px 15px;border-top:1px solid var(--vien);display:flex;align-items:center;gap:10px}
.luoi{display:grid;gap:13px}
.c2{grid-template-columns:repeat(auto-fit,minmax(290px,1fr))}
.c3{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.c4{grid-template-columns:repeat(auto-fit,minmax(168px,1fr))}
.c-truong{grid-template-columns:repeat(auto-fit,minmax(268px,1fr));max-width:1180px}

/* ---------- nút ---------- */
.nut{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border:1px solid var(--n300);background:var(--n0);color:var(--n700);
  padding:6px 13px;border-radius:var(--r-o);
  font-weight:600;font-size:13px;line-height:1.45;white-space:nowrap;
  box-shadow:0 1px 1px rgba(16,24,40,.03);
  transition:background .12s,border-color .12s,box-shadow .12s}
.nut:hover{background:var(--n50);border-color:var(--n400)}
.nut:active{background:var(--n100);box-shadow:none;transform:translateY(.5px)}
/* .nut.chinh là cách viết dùng ở 14 chỗ trong bao-gia/don-hang/cong-no/
   quan-tri — trước giờ chưa có luật nào, nên "Lưu báo giá", "Ghi phiếu
   thu", "Xác nhận duyệt"… hiện y hệt nút Huỷ. Nhận cả hai cách viết. */
.nut-chinh,.nut.chinh{background:var(--c600);border-color:var(--c600);color:#fff;
  box-shadow:0 1px 2px rgba(8,83,112,.24)}
.nut-chinh:hover,.nut.chinh:hover{background:var(--c700);border-color:var(--c700)}
.nut-chinh:active,.nut.chinh:active{background:var(--c800);border-color:var(--c800)}
.nut-nho{padding:3px 10px;font-size:12px;border-radius:var(--r-nho)}
.nut-do{color:var(--do);border-color:#eec3c5}
.nut-do:hover{background:var(--tt-do-n);border-color:#e0a9ac}
.nut-phang{border-color:transparent;background:transparent;color:var(--chu-mo);box-shadow:none}
.nut-phang:hover{background:var(--n100);border-color:transparent;color:var(--n700)}
.nut[disabled]{opacity:.45;cursor:default;box-shadow:none}
.nut[disabled]:hover{background:var(--n0);border-color:var(--n300)}
.nut-chinh[disabled]:hover,.nut.chinh[disabled]:hover{background:var(--c600);border-color:var(--c600)}

/* ---------- nút chỉ có biểu tượng (Chọn cột, Tải lại) ----------
   13/09/2026, theo KiotViet: mấy việc phụ trên thanh công cụ để biểu
   tượng cho gọn, chữ dành cho hành động chính. Vuông 32px = cùng chiều
   cao với .nut thường nên hàng công cụ không so le. */
.nut-bt{display:inline-flex;align-items:center;justify-content:center;
  width:32px;height:32px;flex:none;padding:0;
  border:1px solid var(--n300);border-radius:var(--r-o);
  background:var(--n0);color:var(--n600);cursor:pointer;
  transition:background .12s,border-color .12s,color .12s}
.nut-bt svg{width:17px;height:17px}
.nut-bt:hover{background:var(--n50);border-color:var(--n400);color:var(--c700)}
.nut-bt:active{background:var(--n100)}

/* Bảng chọn cột bung ra từ biểu tượng sáu gạch. Ở body, position:fixed —
   thanh công cụ có bo góc và cắt tràn nên hộp bung từ trong đó bị xén. */
.cot-bang{display:none;position:fixed;z-index:80;min-width:216px;max-height:70vh;overflow-y:auto;
  padding:6px;background:var(--n0);border:1px solid var(--vien);border-radius:10px;
  box-shadow:0 10px 30px rgba(16,24,40,.17)}
.cot-bang.mo{display:block}
/* ĐỔI TÊN 13/09/2026: lớp này từng là `.cot-dau`, TRÙNG TÊN với đầu cột
   kanban ở dòng ~560 (.cot-dau .cham-gd). Cùng một tên cho hai thứ khác
   hẳn nhau, và luật khai sau đè lên trước — tiêu đề hộp chọn cột đang
   ăn nhầm font của kanban (700/12.5px/flex). Đặt tên riêng. */
.cot-bang-dau{font-size:11px;font-weight:600;color:var(--chu-mo);padding:5px 8px 7px}
/* Tiêu đề nhóm cột — bảng khách có 23 cột, chia theo nhóm mới đọc nổi. */
.cot-nhom{font-size:11.5px;font-weight:600;color:var(--chu-mo);
  padding:9px 8px 3px;margin-top:2px;border-top:1px solid var(--vien)}
.cot-bang-dau+.cot-nhom{margin-top:0;padding-top:3px;border-top:0}
.cot-muc{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:var(--r-o);
  font-size:13px;font-weight:400;color:var(--chu);cursor:pointer;
  text-transform:none;letter-spacing:0;margin:0;line-height:1.45}
.cot-muc:hover{background:var(--n100)}
.cot-muc input{margin:0;width:15px;height:15px;flex:none;accent-color:var(--c600);cursor:pointer}
.cot-ve{display:block;width:100%;text-align:left;margin-top:4px;border:0;border-top:1px solid var(--vien);
  background:transparent;padding:8px;font:inherit;font-size:12.5px;color:var(--chinh);cursor:pointer}
.cot-ve:hover{background:var(--n100)}

/* ---------- ĐỆM KHUNG ĐẦU THẺ ----------
   Anh Trọng 13/09: "thêm padding cho tên tab và icon 6 gạch, hiện thấy
   nó quá sát bên trái và bên phải … như trong module khách hàng là đẹp
   nhé … đệm 2 bên, trên dưới luôn".
   ĐO TRƯỚC KHI SỬA: thẻ bắt đầu ở x=242, tên màn ở x=243 → đúng 1px lề.
   Khách hàng không bị vì nó dùng .the-dau có sẵn padding 11px 15px.
   Lấy luôn con số đó làm chuẩn cho .bg-thanh, để hai lối dựng khung đầu
   (.the-dau và .bg-thanh) ra CÙNG một lề — không đẻ thêm số thứ ba. */
/* Hai lối dựng: có màn đặt .bg-thanh thẳng trong thẻ (Đơn hàng, Công
   nợ, Báo giá, Giao hàng), có màn bọc thêm một div để dựng lại riêng
   phần thanh (Chứng từ #hd-thanh, Hàng hoá #hh-thanh). Phải kể cả
   hai — đo 13/09: chỉ khai .the>.bg-thanh thì hai màn kia lề vẫn 0. */
.the>.bg-thanh,.the>div>.bg-thanh{padding:11px 15px;margin-bottom:0}
/* .bg-thanh gốc có margin-bottom:12px cho lối dựng cũ (thanh trôi tự
   do trên nền trang). Nằm trong thẻ thì lề dưới đã là padding, để cả
   hai thành đáy thẻ dày 23px. */
/* Thanh tab canh theo lề đó: 3px của thanh + 12px của nút = 15px, chữ
   tab thẳng hàng với tên màn. Trước là 10+12=22px, lệch 7px. */
.the>.cn-tab,.the>.dh-nguon,.the>.ct-tab,#hd-tab>.ct-tab,
#kho-ngan>.kho-ngan{padding-left:3px;padding-right:3px}

/* ---------- ô nhập ---------- */
.o{width:100%;padding:7px 11px;border:1px solid var(--n300);border-radius:var(--r-o);
  background:var(--n0);color:var(--chu);transition:border-color .12s,box-shadow .12s}
.o::placeholder{color:var(--n400)}
.o:hover:not(:focus){border-color:var(--n400)}
.o:focus{outline:none;border-color:var(--c500);box-shadow:var(--vong)}
select.o{cursor:pointer}
/* Ô tìm và ô lọc ở thanh công cụ đầu màn. Chiều rộng để ở đây chứ không
   đặt trong style nội tuyến từng chỗ — nội tuyến thì luật cho điện thoại
   không đè được, ô tìm cứ kẹt ở 230px giữa màn hình rộng 390px. */
/* ---------- ô tìm của màn danh sách ----------
   Dáng theo KiotViet (anh Trọng 13/09: "ô rất vừa phải, cũng rất thuận
   tiện khi sử dụng nếu cần đến"), đo tại ecopakvn.kiotviet.vn: một ô bo
   tròn vừa phải, kính lúp nằm TRONG ô bên trái, đặt ở đầu vùng nội dung.

   Kính lúp vẽ bằng ảnh nền SVG nội tuyến chứ không thêm thẻ — như vậy
   mọi màn đang dùng .o-tim tự có, không phải sửa tám chỗ vẽ.

   KHÁC KIOTVIET MỘT ĐIỂM, CÓ CHỦ Ý: họ có nút mở bảng ba ô tìm riêng
   (theo mã hoá đơn / theo hàng / theo khách). Mình KHÔNG làm, vì ô tìm
   của mình vốn đã nhận nhiều mảnh rời và quét cùng lúc mã, tên, MST,
   điện thoại, email, địa chỉ — gõ "anh An 379" ra đúng một dòng. Ba ô
   riêng là cách giải bài toán mà mình không có. Anh cần tìm theo từng
   trường riêng thì nói, em thêm sau. */
/* CHỈNH 13/09 (lượt 2) — anh Trọng: "khung tìm kiếm cần tinh chỉnh cho
   đẹp hơn". ĐO LẠI TRÊN KIOTVIET: ô của họ cao 31px, BO 8px (không phải
   viên thuốc), viền 1px #d1d5da, nền trắng, chữ 14px, chừa trái 29px
   cho kính lúp. Bản mình trước đó bo 999px — viên thuốc đứng cạnh thẻ
   góc vuông và các nút bo 8px nhìn lạc kiểu; đó là chỗ "chưa đẹp".
   Giữ 330px theo yêu cầu trước, cao 32px, kính lúp mảnh hơn (1.8) và
   nhạt đi khi chưa gõ, đậm lại khi đang gõ. */
.o-tim{width:330px;max-width:100%;height:32px;
  padding:6px 12px 6px 32px;border-radius:8px;font-size:13.5px;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238b969e' stroke-width='1.8' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:11px 50%;background-size:15px 15px}
.o-tim:focus{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230b6a8f' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%3E%3C/svg%3E")}
.o-tim::-webkit-search-cancel-button{cursor:pointer}
@media(max-width:900px){ .o-tim{width:100%} }
.o-loc{max-width:200px}

/* ---------- ô tìm + thanh đầu màn danh sách (312 — anh Trọng chốt 03/10/2026) ----------
   "Khung tìm kiếm trên cùng làm chiều cao nhỏ lại, chỉ cần bằng đúng cái khung tìm kiếm,
   cho nó nổi bật một chút". Đo trước: thẻ riêng cao 56–58px (Đơn hàng, Báo giá, Giao
   hàng, Công nợ, Cơ hội) trong khi ô tìm chỉ 32px.
   • Ô tìm: cao 36px, viền xanh, bóng nhẹ — áp cho MỌI ô .o-tim.
   • Thẻ chỉ chứa mỗi thanh tiêu đề (.bg-thanh / .the-dau là con duy nhất, có ô tìm) thì
     bỏ khung thẻ: còn đúng một hàng cao bằng ô tìm. Màn mà thanh nằm chung thẻ với bảng
     (Khách hàng, Việc, Hàng hoá, Hợp đồng) giữ khung — thanh đó không tốn thêm thẻ. */
.o-tim{height:36px;border:1.5px solid #8fb0c8;border-radius:10px;background-color:var(--n0);
  box-shadow:0 1px 2px rgba(16,40,64,.08),0 0 0 3px rgba(47,88,115,.06);font-size:14px;
  padding-left:34px;background-position:12px 50%}
.o-tim:focus{border-color:var(--chinh)}
.the:has(> .bg-thanh:only-child > .o-tim),.the:has(> .the-dau:only-child > .o-tim){
  background:transparent;border:0;box-shadow:none;border-radius:0}
.the > .bg-thanh:only-child:has(> .o-tim),.the > .the-dau:only-child:has(> .o-tim){
  padding:0;min-height:0;border:0;background:transparent;align-items:center}
.the > .bg-thanh:only-child:has(> .o-tim) > b:first-child,
.the > .the-dau:only-child:has(> .o-tim) > h2{font-size:17px;letter-spacing:-.2px}
@media (min-width:901px){
  .the > .bg-thanh:only-child > .o-tim,.the > .the-dau:only-child > .o-tim{width:440px}
}
/* Điện thoại: tên màn + nút Lọc + Tải lại chung MỘT hàng, ô tìm trọn hàng dưới (trước xếp 4 hàng). */
@media (max-width:900px){
  .the > .bg-thanh:only-child:has(> .o-tim) > *,.the > .the-dau:only-child:has(> .o-tim) > *{order:1;flex:0 1 auto;min-width:0;margin-left:0}
  .the > .bg-thanh:only-child:has(> .o-tim) > .day.xa,.the > .the-dau:only-child:has(> .o-tim) > .day.xa{flex:1 1 auto;justify-content:flex-end;flex-wrap:wrap}
  .the > .bg-thanh:only-child:has(> .o-tim) > b:first-child,.the > .the-dau:only-child:has(> .o-tim) > h2{flex:1 1 auto}
  .the > .bg-thanh:only-child:has(> .o-tim) > .o-tim,.the > .the-dau:only-child:has(> .o-tim) > .o-tim{order:2;flex:1 1 100%}
}
/* CHUẨN NHÃN NHỎ — chốt 13/09/2026, đo từ KiotViet: KHÔNG in hoa,
   KHÔNG giãn chữ, và phân biệt bằng ĐỘ ĐẬM chứ không bằng cỡ.
     · nhãn trường / nhãn cột      12px / 500
     · tiêu đề nhóm, tiêu đề khối  12px / 600
     · tem, chú thích              11px / 500
   Trước đó mười nơi cùng dùng 10–10.5px/700 IN HOA giãn .05–.1em: cỡ
   10.5 in hoa là cỡ khó đọc nhất trong cả màn (dấu tiếng Việt chồng lên
   nhau), mà lại đậm hơn chính nội dung nó chú thích. Ai thêm nhãn mới
   thì lấy một trong ba mức trên, đừng đặt cỡ riêng.

   Ô đánh dấu trong thanh công cụ (vd "Hiện cả hàng ngừng bán") dùng thẻ
   label nhưng là CÂU ĐỂ ĐỌC, không phải nhãn trường — cỡ 13px. */
.bg-thanh>label{text-transform:none;letter-spacing:0;
  font-size:13px;font-weight:500;color:var(--chu);margin-bottom:0}
label{display:block;font-size:12px;font-weight:500;color:var(--chu-mo);margin-bottom:4px;
  text-transform:none;letter-spacing:0}
.truong{margin-bottom:11px}

/* ---------- SỬA TẠI CHỖ: rời ô là lưu ---------- */
.oi{
  width:100%;border:1px solid transparent;background:transparent;border-radius:var(--r-nho);
  padding:5px 7px;margin:-5px -7px;font:inherit;color:inherit;transition:background .1s,border-color .1s;
}
.oi:hover{background:var(--n100)}
.oi:focus{outline:none;background:var(--n0);border-color:var(--c500);box-shadow:var(--vong)}
select.oi{cursor:pointer;appearance:none;padding-right:20px;
  background-image:linear-gradient(45deg,transparent 50%,var(--n400) 50%),linear-gradient(135deg,var(--n400) 50%,transparent 50%);
  background-position:calc(100% - 11px) 52%,calc(100% - 7px) 52%;
  background-size:4px 4px,4px 4px;background-repeat:no-repeat}
textarea.oi{resize:vertical;min-height:52px}
/* Ô tiêu đề: textarea nhưng cao theo nội dung, không kéo tay, không thanh cuộn. */
textarea.oi.oi-1dong{resize:none;overflow:hidden;min-height:0;line-height:1.3;white-space:pre-wrap}
.oi.dang-luu{background:#fff8e3;border-color:#e7cd80}
.oi.da-luu{background:var(--tt-luc-n);border-color:#a6d7bb;transition:background .6s,border-color .6s}
.oi.loi-luu{background:var(--tt-do-n);border-color:#e9b4b6}
.oi-trong::placeholder{color:var(--chu-nhat);font-style:italic}

/* ---------- bảng ----------
   Chữ số đều chiều rộng cho toàn bộ bảng: cột tiền và cột ngày thẳng
   hàng theo chiều dọc, soi lệch một chữ số là thấy ngay. */
.cuon{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
/* MẬT ĐỘ BẢNG — chỉnh ngày 05/09/2026 sau khi ĐO KiotViet.
   Số đo thật, cùng một trình duyệt, cùng mức thu phóng 100%:

                    KiotViet        CRM (trước)     CRM (giờ)
     cỡ chữ ô       14px            14px            13.5px
     đệm ô          10px 0 10px 5px 9px 13px        6px 10px
     cao một dòng   20px            21px            18px
     CAO MỘT HÀNG   ~40px           59px            ~44px

   Điều bất ngờ khi đo: CỠ CHỮ HAI BÊN GẦN NHƯ BẰNG NHAU. Thứ làm bảng
   của mình trông to và thưa hơn hẳn là CHIỀU CAO HÀNG — 59px so với
   40px. Hai nguyên nhân: đệm dọc 9px thay vì 6px, và nhiều ô của mình
   xếp hai dòng (tên + mã bên dưới, ngày + "x ngày trước").

   Nên chỗ sửa chính là đệm và dòng phụ, không phải cỡ chữ. Cỡ chữ chỉ
   hạ nửa điểm để lấy thêm bề ngang — màn khách giờ chọn được tới 23 cột.

   Đổi ở đây là đổi MỌI bảng trong CRM, cố ý: báo giá, đơn hàng, công nợ
   cùng một mật độ thì mắt không phải chỉnh lại mỗi lần đổi màn. */
th,td{padding:6px 10px;text-align:left;border-bottom:1px solid var(--vien);
  white-space:nowrap;vertical-align:middle;font-size:13.5px;line-height:18px}
/* Đầu bảng — chỉnh 13/09/2026 theo số đo thật của KiotViet (th 12px/600,
   KHÔNG in hoa, không giãn chữ). Bản cũ 10.5px/700 IN HOA giãn .4px vừa
   nhỏ vừa nặng: chữ hoa cỡ 10.5 khó đọc nhất trong bảng, mà lại đậm hơn
   cả dữ liệu bên dưới nó. */
th{font-size:12px;text-transform:none;letter-spacing:0;color:var(--chu-mo);
  background:var(--n25);font-weight:600;border-bottom:1px solid var(--n300);
  padding-top:7px;padding-bottom:7px}
/* Dòng phụ trong ô (mã khách, "x ngày trước"). Nhỏ và sát hơn .mo chung:
   nó là chú thích của ô, không phải một dòng dữ liệu thứ hai. */
td .mo{font-size:11px;line-height:15px}
/* Chữ đậm trong ô bảng: 700 → 600 (13/09/2026). Mã đơn, tên khách, số
   tiền đều bọc <b>, mà 700 cạnh 400 là chênh quá gắt — cả bảng trông
   như đang gạch chân mọi thứ. */
td b,th b{font-weight:600}
tbody tr{cursor:pointer;transition:background .1s}
tbody tr:hover{background:var(--c25)}
td.dai{white-space:normal;min-width:210px}
.phai{text-align:right}
tbody tr:last-child td{border-bottom:0}

/* ---------- kanban ---------- */
#kanban{display:flex;gap:11px;overflow-x:auto;padding:2px 2px 10px;align-items:flex-start}
.cot{flex:0 0 262px;background:var(--n100);border:1px solid var(--n200);border-radius:var(--r);
  padding:9px;min-height:110px;transition:background .12s,box-shadow .12s}
.cot.keo{background:var(--c50);box-shadow:inset 0 0 0 2px var(--c500)}
.cot-dau{display:flex;align-items:center;gap:7px;margin-bottom:2px;font-weight:700;font-size:12.5px}
.cot-dau .cham-gd{width:8px;height:8px;border-radius:50%;flex:0 0 8px}
.cot-dau .sl{color:var(--chu-mo);font-weight:600}
.cot-tong{font-size:11px;color:var(--chu-mo);font-weight:600;margin:2px 0 9px;font-variant-numeric:tabular-nums;
  display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}
/* Số theo xác suất đứng sau số thô và nhạt hơn một bậc: nó là số phái
   sinh, không được nặng ngang số tiền đang thật nằm trong cột. */
.cot-tong-ts{font-weight:500;opacity:.72;cursor:help}
.the-ch{background:var(--n0);border:1px solid var(--vien);border-radius:9px;padding:9px 10px;margin-bottom:7px;
  box-shadow:var(--bong);cursor:pointer;transition:box-shadow .12s,border-color .12s}
.the-ch:hover{box-shadow:var(--bong-nhe);border-color:var(--n300)}
.the-ch.dang-keo{opacity:.4}
.the-ch.moi-roi{animation:roi .5s ease}
@keyframes roi{0%{box-shadow:0 0 0 3px var(--c100)}100%{box-shadow:var(--bong)}}
.the-ch b{display:block;font-size:13px;font-weight:650;margin-bottom:2px;line-height:1.35}
.the-ch small{color:var(--chu-mo);display:block;font-size:11.5px}
.the-ch .chan{display:flex;align-items:center;gap:6px;margin-top:6px}
.the-ch .tien{font-weight:700;font-size:13px;font-variant-numeric:tabular-nums}

/* chấm bước tiếp theo */
.cham{width:9px;height:9px;border-radius:50%;flex:0 0 9px;display:inline-block}
.cham-do{background:var(--do)}
.cham-cam{background:#e08c11}
.cham-xanh{background:#1f9d5c}
.cham-xam{background:var(--n400);box-shadow:inset 0 0 0 2px var(--n0),0 0 0 1px var(--n400)}
.buoc-text{font-size:11px;color:var(--chu-mo);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ngủ quên — viền đỏ bên trái + tem số ngày im (di trú 027, đề xuất 1.2) */
.the-ch{position:relative}
.the-ch.ngu-quen{border-left:3px solid var(--do);background:color-mix(in srgb,var(--do) 6%,var(--n0))}
.the-ch .tem-ngu{position:absolute;top:7px;right:8px;font-size:11px;font-weight:600;letter-spacing:0;
  text-transform:none;color:var(--do);background:color-mix(in srgb,var(--do) 12%,var(--n0));padding:1px 6px;border-radius:4px}
.the-ch.ngu-quen b{padding-right:74px}
/* Tem "Đã lưu trữ" (di trú 081) — KHÔNG chồng lên tem ngủ quên: một thẻ
   đã cất đi thì tính ngủ quên hết nghĩa, và máy chủ cũng không đếm nó
   vào ô ngủ quên nữa. Đặt cùng chỗ, màu xám để đọc là biết "không phải
   cảnh báo, chỉ là trạng thái". */
.the-ch .tem-luu-tru{position:absolute;top:7px;right:8px;font-size:11px;font-weight:600;
  color:var(--chu-mo);background:var(--n100);border:1px solid var(--vien);
  padding:1px 6px;border-radius:4px}
.the-ch:has(.tem-luu-tru) b{padding-right:74px}
.cot-dau .ngu-dem{color:var(--do);font-size:11px;margin-left:auto}
/* nút → cột kế: một chạm thay cho kéo thả, cần nhất trên điện thoại */
.the-ke{border:1px solid var(--vien);background:var(--n0);color:var(--chu-mo);border-radius:6px;width:24px;height:22px;
  font-size:13px;line-height:1;padding:0;cursor:pointer;flex:0 0 auto;opacity:.55}
.the-ch:hover .the-ke,.the-ke:focus-visible{opacity:1;color:var(--c700);border-color:var(--c500)}
@media(pointer:coarse){.the-ke{opacity:1;width:30px;height:28px;font-size:15px}}
.canh-ngu{background:color-mix(in srgb,var(--do) 8%,var(--n0));border:1px solid color-mix(in srgb,var(--do) 35%,transparent);
  border-left:3px solid var(--do);padding:9px 12px;font-size:13px;line-height:1.5;margin-bottom:14px;border-radius:6px}
/* Hôm nay của tôi */
.hn-luoi{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px 22px}
.hn-khoi{min-width:0}
.hn-dau{display:flex;align-items:center;gap:7px;margin-bottom:4px;font-size:13px}
.hn-dong{padding:6px 0;border-bottom:1px solid var(--vien);cursor:pointer}
.hn-dong:last-child{border-bottom:0}
.hn-dong b{font-size:13px;display:block;line-height:1.35}
.hn-dong:hover b{color:var(--c700)}
/* đợt B (10/09/2026) — thẻ "Đang kẹt" trên bảng điều khiển */
.the.ket{border-color:#e9b4b6}
.the.ket .the-dau{background:var(--tt-do-n);border-bottom-color:#e9b4b6;border-radius:var(--r) var(--r) 0 0}
.the.ket .the-dau h2{color:var(--tt-do-c)}
.ket-tien{font-variant-numeric:tabular-nums;font-weight:600;color:var(--chu)}
.ket-tre{color:var(--do);font-weight:600}
/* đợt C (10/09/2026) — thẻ "Việc của từng bộ phận" + hạn mức */
.vb-dong{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px solid var(--vien);cursor:pointer}
.vb-dong:last-child{border-bottom:0}
.vb-dong b{font-size:13px;font-weight:500;color:var(--chu)}
.vb-dong .so{font-size:17px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.3px;min-width:28px;text-align:right}
.vb-dong:hover b{color:var(--c700)}
.vb-dong.rong{cursor:default}
.vb-dong.rong:hover b,.vb-dong.rong b,.vb-dong.rong .so{color:var(--chu-nhat)}
.vb-dong.do .so{color:var(--do)}
.vb-dong.cam .so{color:var(--cam)}
/* dòng xổ danh sách việc */
.vb-nhom{border-bottom:1px solid var(--vien)}
.vb-nhom .vb-dong{border-bottom:0}
.vb-nhom:last-child{border-bottom:0}
.vb-dong.mo-xo b{color:var(--c700)}
.vb-con{padding:0 0 8px 10px;border-left:2px solid var(--c100);margin:0 0 6px 4px}
.vb-muc{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:4px 0 4px 8px;cursor:pointer;font-size:12.5px;border-radius:6px}
.vb-muc:hover{background:var(--c25)}
.vb-muc b{font-weight:600;color:var(--c700)}
.vb-muc .mo{font-size:12px}
.vb-vai{font-size:11px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--chu-mo)}
.hm-bang{width:100%;border-collapse:collapse;font-size:13px;margin:8px 0 2px}
.hm-bang td{padding:5px 0;border-bottom:1px solid var(--vien)}
.hm-bang tr:last-child td{border-bottom:0}
.hm-bang td.phai{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.hm-bang td.vuot{color:var(--do)}
.chip.giai-toa{background:var(--tt-luc-n);color:var(--tt-luc-c);border-color:transparent}
/* 208 (27/09/2026) — màn quản lý năm tầng của Bảng điều khiển (bản vẽ anh Trọng duyệt).
   Chỉ vai quản lý; sales / kho / kế toán vẫn dùng các lớp hn- / vb- ở trên. */
.ql-dau{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin:2px 0 13px}
.ql-dau h1{font-size:19px;margin:0;font-weight:700;letter-spacing:-.2px}
.ql-dau .mo{font-size:13px}
.ql-dau .mo.tre{color:var(--do)}
.ql-chip{display:inline-flex;gap:4px;margin-left:auto}
.ql-chip button{border:1px solid var(--vien);background:var(--n0);border-radius:999px;padding:3px 11px;font:inherit;font-size:12.5px;color:var(--chu-mo);cursor:pointer}
.ql-chip button:hover{border-color:var(--c500)}
.ql-chip button.on{background:var(--chinh);color:#fff;border-color:var(--chinh)}
.ql-tang{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--chinh);color:#fff;font-size:11.5px;font-weight:700;flex:none}
.the-dau .ql-phai{margin-left:auto;font:inherit;font-size:12.5px;color:var(--chinh);background:none;border:0;padding:0;cursor:pointer}
.the-dau .ql-phai:hover{text-decoration:underline}
.ql-kpi{display:grid;grid-template-columns:repeat(4,1fr)}
.ql-kpi>div{padding:14px 16px;border-right:1px solid var(--vien);cursor:pointer;min-width:0}
.ql-kpi>div:last-child{border-right:0}
.ql-kpi>div:hover{background:var(--n50)}
.ql-nhan{font-size:12.5px;color:var(--chu-mo)}
.ql-so{font-size:24px;font-weight:700;letter-spacing:-.3px;font-variant-numeric:tabular-nums;margin:2px 0}
.ql-so small{font-size:14px;font-weight:600;color:var(--chu-mo)}
.ql-ss{font-size:12.5px;display:flex;flex-direction:column;gap:1px}
.ql-dv{display:block;font-size:11.5px;margin-top:5px;padding-top:5px;border-top:1px dashed var(--vien);font-variant-numeric:tabular-nums} /* 319 — tách theo đơn vị dưới ô tổng */
.ql-ss .len{color:var(--xanh)}
.ql-ss .xuong{color:var(--do)}
.ql-thanh{height:6px;border-radius:3px;background:var(--n100);position:relative;margin:6px 0 2px}
.ql-thanh i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:var(--chinh)}
.ql-thanh.no i{background:#d95f3b}
.ql-thanh b{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--chu);opacity:.5}
.ql-spark{display:flex;align-items:flex-end;gap:3px;height:30px;margin-top:8px}
.ql-spark i{flex:1;background:#9db6c8;border-radius:2px 2px 0 0;min-height:2px}
.ql-spark i.cuoi{background:var(--chinh)}
.ql-dat{display:inline-block;margin-top:4px;font:inherit;font-size:12px;color:var(--chinh);background:none;border:1px dashed var(--chinh);border-radius:6px;padding:1px 7px;cursor:pointer}
.ql-hai{display:grid;grid-template-columns:1.15fr 1fr;gap:13px;align-items:start;margin-bottom:13px}
.ql-hai.mot{grid-template-columns:1fr}
.ql-hai>.the{min-width:0;margin:0}
.ql-xl{list-style:none;margin:0;padding:0}
.ql-xl>li{display:grid;grid-template-columns:8px 1fr auto;gap:10px;align-items:center;padding:10px 16px;border-bottom:1px solid var(--vien);cursor:pointer}
.ql-xl>li:last-child{border-bottom:0}
.ql-xl>li:hover{background:var(--n50)}
.ql-xl>li[hidden]{display:none}
.ql-xl>li.rong{cursor:default}
.ql-xl>li.rong:hover{background:none}
.ql-xl>li.rong b,.ql-xl>li.rong .ql-gt{color:var(--chu-mo);font-weight:500}
.ql-xl>li.mo-xo b{color:var(--c700)}
.ql-xl>li.ql-con{display:block;padding:0 16px 10px 34px;cursor:default}
.ql-xl>li.ql-con[hidden]{display:none}
.ql-xl>li.ql-con:hover{background:none}
.ql-cham{width:8px;height:8px;border-radius:50%}
.ql-cham.do{background:#c0392b}
.ql-cham.cam{background:#d98a1c}
.ql-cham.xam{background:#b6c1cc}
.ql-xl .t{min-width:0}
.ql-xl .t b{font-weight:600}
.ql-xl .t div{font-size:12.5px;color:var(--chu-mo)}
.ql-gt{font-weight:700;font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.ql-gt small{display:block;font-weight:400;color:var(--chu-mo);font-size:11.5px}
.ql-ai{font-size:11.5px;font-weight:500;background:var(--c50);color:var(--chinh);border-radius:999px;padding:1px 7px;margin-left:6px;white-space:nowrap}
.ql-chan{font-size:12.5px;color:var(--chu-mo);padding:10px 16px;border-top:1px solid var(--vien)}
table.ql-bang{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
table.ql-bang th,table.ql-bang td{padding:8px 10px;border-bottom:1px solid var(--vien);text-align:left}
table.ql-bang th{font-size:12px;color:var(--chu-mo);font-weight:600}
table.ql-bang th.so,table.ql-bang td.so{text-align:right}
table.ql-bang tbody tr:last-child td{border-bottom:0}
.ql-loai{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;font-weight:700;font-size:11.5px}
.ql-loai.lA{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.ql-loai.lB{background:var(--c50);color:var(--chinh)}
.ql-loai.lC{background:var(--tt-vang-n);color:var(--tt-vang-c)}
.ql-bar{height:8px;border-radius:4px;background:var(--n100);position:relative;min-width:64px}
.ql-bar i{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:var(--chinh)}
.ql-pill{font-size:12px;border-radius:999px;padding:1px 8px;white-space:nowrap}
.ql-pill.do{background:var(--tt-do-n);color:var(--tt-do-c)}
.ql-pill.xanh{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.ql-pill.vang{background:var(--tt-vang-n);color:var(--tt-vang-c)}
.ql-cot12{display:flex;align-items:flex-end;gap:6px;height:170px;padding:12px 16px 0}
.ql-cot12>div{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;min-width:0}
.ql-cot12 span{font-size:10.5px;color:var(--chu-mo);margin-bottom:3px;white-space:nowrap}
.ql-cot12 i{width:70%;background:#9db6c8;border-radius:3px 3px 0 0}
.ql-cot12 i.cuoi{background:var(--chinh)}
.ql-thang12{display:flex;gap:6px;padding:4px 16px 12px}
.ql-thang12>div{flex:1;text-align:center;font-size:11px;color:var(--chu-mo)}
.ql-pheu{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--vien)}
.ql-pheu>div{background:var(--n0);padding:10px 14px;cursor:pointer}
.ql-pheu>div:hover{background:var(--n50)}
.ql-pheu b{font-size:17px}
@media(max-width:900px){
  .ql-kpi{grid-template-columns:1fr 1fr!important}
  .ql-kpi>div:nth-child(2n){border-right:0}
  .ql-kpi>div:nth-child(-n+2){border-bottom:1px solid var(--vien)}
  .ql-hai{grid-template-columns:1fr}
  .ql-pheu{grid-template-columns:1fr 1fr!important}
  .ql-chip{margin-left:0}
}
/* báo cáo phễu */
.bc-pheu-thanh{display:flex;align-items:flex-end;gap:6px;height:150px;padding:0 4px}
.bc-pheu-thanh .cot-pheu{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0}
.bc-pheu-thanh .cot-pheu i{display:block;width:100%;border-radius:4px 4px 0 0;min-height:2px}
.bc-pheu-thanh .cot-pheu small{font-size:11px;color:var(--chu-mo);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.bc-pheu-thanh .cot-pheu b{font-size:12.5px;font-variant-numeric:tabular-nums}
.bc-nhac{background:var(--n100);border-left:3px solid var(--cam);padding:9px 12px;font-size:12.5px;line-height:1.5;border-radius:6px;margin-bottom:10px}
/* đợt 5 — vùng thả THẮNG / THUA khi kéo (Pipedrive), ngày chốt trễ, + đầu cột, cảnh báo trùng */
#vung-dong{position:fixed;left:0;right:0;bottom:0;display:flex;gap:10px;padding:10px 16px;z-index:60;
  background:color-mix(in srgb,var(--n900) 82%,transparent);backdrop-filter:blur(4px)}
.vung-tha{flex:1;height:64px;border:2px dashed rgba(255,255,255,.55);border-radius:10px;display:flex;align-items:center;justify-content:center;
  color:#fff;font-weight:800;letter-spacing:.08em;font-size:14px;transition:background .12s,transform .12s}
.vung-tha.thang.keo{background:#1f9d5c;border-color:#1f9d5c;transform:scale(1.02)}
.vung-tha.thua.keo{background:var(--do);border-color:var(--do);transform:scale(1.02)}
/* Hai ô thêm 13/09/2026 (di trú 081). Màu KHÁC hẳn thắng/thua vì đây
   không phải kết quả bán hàng mà là việc dọn dẹp: lưu trữ xám trung
   tính, xoá nâu sẫm — đủ nghiêm để tay ngập ngừng, không đỏ chói tranh
   chỗ với THUA ngay bên cạnh. */
.vung-tha.luu_tru.keo{background:#64748b;border-color:#64748b;transform:scale(1.02)}
.vung-tha.xoa.keo{background:#7f1d1d;border-color:#7f1d1d;transform:scale(1.02)}
/* Bảng thùng rác cơ hội (di trú 081). Cột đầu NHẬN HẾT chỗ thừa, hai
   cột sau co về đúng nội dung — để nút "Khôi phục" luôn nằm trong khung
   hộp. Bản đầu bày 7 cột và nút bị đẩy ra ngoài, phải cuộn ngang mới
   thấy: đo trên màn thật mới lộ. */
.tr-bang{width:100%;table-layout:auto}
.tr-bang td:first-child{width:100%}
.tr-bang td,.tr-bang th{vertical-align:top}
.chot-tre{color:var(--do);font-weight:600}
.cot-dau .cot-them{margin-left:auto;border:1px solid var(--vien);background:var(--n0);color:var(--chu-mo);border-radius:6px;
  width:22px;height:20px;font-size:14px;line-height:1;padding:0;cursor:pointer;opacity:0}
.cot:hover .cot-them,.cot-them:focus-visible{opacity:1}
.cot-dau .ngu-dem+.cot-them{margin-left:6px}
@media(pointer:coarse){.cot-dau .cot-them{opacity:1}}
.canh-trung{margin-top:6px;padding:8px 11px;background:color-mix(in srgb,var(--cam) 12%,var(--n0));border-left:3px solid var(--cam);
  border-radius:6px;font-size:12.5px;line-height:1.5}
.canh-trung a{color:var(--c700);text-decoration:underline dotted}
.tuoi-ch{display:flex;flex-wrap:wrap;gap:4px 0;font-size:12px;margin:-6px 0 12px}
.tuoi-ch span+span::before{content:'·';margin:0 7px;color:var(--n400)}
.doi-han a{color:var(--c700);text-decoration:underline dotted;text-underline-offset:2px}

/* ---------- dòng thời gian ---------- */
.dtg{list-style:none;margin:0;padding:0}
.dtg li{position:relative;padding:0 0 13px 18px;border-left:2px solid var(--vien)}
.dtg li:last-child{border-left-color:transparent;padding-bottom:0}
.dtg li::before{content:"";position:absolute;left:-5px;top:5px;width:8px;height:8px;
  border-radius:50%;background:var(--chinh);box-shadow:0 0 0 2px var(--n0)}
.dtg li.l-goi::before{background:#1f9d5c}
.dtg li.l-dong::before{background:var(--tim)}
.dtg li.l-doi_giai_doan::before{background:#e08c11}
.dtg .khi{font-size:11px;color:var(--chu-nhat)}
.dtg .nd{margin-top:1px}

/* ---------- ngăn kéo ---------- */
/* .lop-phu: nền mờ của MỖI lớp trong ngăn xếp hộp (di trú 105). Lớp trên
   cùng có z-index cao hơn, đặt bằng JS ở moLop(). */
#phu,.lop-phu{position:fixed;inset:0;background:rgba(16,24,40,.36);z-index:60;opacity:0;transition:opacity .16s}
#phu.hien,.lop-phu.hien{opacity:1}
.ngan{position:fixed;top:0;right:0;bottom:0;width:min(680px,100%);background:var(--n0);z-index:61;
  box-shadow:var(--bong-cao);display:flex;flex-direction:column;
  transform:translateX(100%);transition:transform .2s cubic-bezier(.3,.8,.4,1)}
.ngan.hien{transform:none}
.ngan-dau{padding:12px 16px;border-bottom:1px solid var(--vien);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ngan-dau h2,.ngan-dau h3{margin:0;font-size:15px;font-weight:650;letter-spacing:-.1px}
.ngan-than{padding:16px;overflow:auto;flex:1;background:var(--n25)}
.ngan-chan{padding:11px 16px;border-top:1px solid var(--vien);display:flex;gap:8px;align-items:center;background:var(--n0)}

/* hộp thoại giữa màn hình */
.hop{position:fixed;left:50%;top:50%;transform:translate(-50%,-48%);width:min(620px,calc(100% - 28px));
  background:var(--n0);border-radius:14px;box-shadow:var(--bong-cao);z-index:62;opacity:0;
  transition:opacity .14s,transform .14s;max-height:calc(100vh - 60px);display:flex;flex-direction:column}
.hop.hien{opacity:1;transform:translate(-50%,-50%)}
.hop-dau{padding:14px 18px;border-bottom:1px solid var(--vien);display:flex;align-items:center;gap:10px}
.hop-dau h3{margin:0;font-size:15.5px;font-weight:650;letter-spacing:-.1px}
.hop-than{padding:18px;overflow:auto}
.hop-chan{padding:12px 18px;border-top:1px solid var(--vien);display:flex;gap:8px;justify-content:flex-end;
  background:var(--n25);border-radius:0 0 14px 14px}
/* Chân hộp chi tiết việc: các nút thao tác, luôn nhìn thấy, tự xuống dòng
   khi hẹp. Nút chính (Bắt đầu làm / Báo xong) đứng đầu. */
.hop-chan.v-hop-tac{justify-content:flex-start;flex-wrap:wrap}
/* Nút phân đoạn "Đang chạy | Đã kết thúc" của bảng quy trình (18/09/2026) —
   thay ô tích cũ, để hồ sơ đã huỷ có một chỗ đứng nhìn thấy được. */
.qt-doan{display:inline-flex;border:1px solid var(--vien);border-radius:var(--r);overflow:hidden}
.qt-doan button{border:0;background:var(--n0);padding:6px 12px;font:inherit;font-size:13px;color:var(--chu-mo);cursor:pointer}
.qt-doan button + button{border-left:1px solid var(--vien)}
.qt-doan button.hoat{background:var(--c50);color:var(--c700);font-weight:600}
/* Chi tiết việc ở khung hẹp (đo 18/09/2026, khung 400px): thanh tiến độ và
   thanh kéo không co được nên đẩy cả cột rộng ra 547px trong ô 347px. Cho
   xuống dòng và co theo bề ngang màn — sửa cho cả hộp lẫn trang. */
.v-ct > div{min-width:0}
.v-td-lon{flex-wrap:wrap}
@media(max-width:760px){
  .v-td-lon .v-thanh,.v-td-lon input[type=range]{width:min(200px,44vw)}
}
.hop-chan.v-hop-tac .nut{white-space:nowrap}
.hop .v-ct{margin-top:12px}
.hop .v-dau h2{font-size:16px}
/* ---------- nút đóng ✕ (311 — anh Trọng chốt 03/10/2026) ----------
   MỘT nơi định nghĩa ✕ cho hộp thoại, khung xem in và tờ đang soạn (đơn,
   báo giá). Ký tự × trong nút giữ cho máy đọc màn hình; hình vẽ bằng mask
   SVG nên nét đều, không phụ thuộc phông. 36×36, điện thoại 40×40. Xám
   trung tính — đóng không phải xoá; đang soạn dở thì luiVe() hỏi trước.
   Ghim góc trên bên phải ở hai chỗ: thanh đầu thẻ 1 của tờ soạn
   (.bg-thanh) và đầu hộp có thanh nút xuống dòng (.dong-x.goc) — để nó
   không trôi theo hàng chip / hàng nút khi khung hẹp. */
.dong-x{display:inline-grid;place-items:center;flex:none;width:36px;height:36px;padding:0;
  border:0;border-radius:8px;background:transparent;color:var(--chu-mo);
  font-size:0;line-height:0;cursor:pointer}
.dong-x::before{content:"";width:20px;height:20px;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6L6 18'/%3E%3C/svg%3E") center/20px 20px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6L6 18'/%3E%3C/svg%3E") center/20px 20px no-repeat}
.dong-x:hover{background:var(--n100);color:var(--n900)}
.dong-x:active{background:var(--n200)}
.bg-thanh:has(>.dong-x),.hop-dau:has(>.dong-x.goc){position:relative;padding-right:56px}
.bg-thanh>.dong-x{position:absolute;top:4px;right:8px;margin:0}
.dong-x.goc{position:absolute;top:8px;right:8px;margin:0}

/* ---------- gợi ý (hộp sổ xuống của ô tìm khách/hàng) ----------
   ĐỪNG đặt lại lớp .goi-y ở chỗ khác trong tệp này. Trước 10/09 có một
   khối "Ghi chú KiotViet" cũng dùng .goi-y và đặt display:flex — nó đè
   lên hộp gợi ý, làm danh sách khách hàng sổ NGANG thay vì sổ dọc
   (anh Trọng bắt lỗi 10/09). Khối đó nay là .goi-y-nhac. */
.goi-y{position:absolute;z-index:70;background:var(--n0);border:1px solid var(--n200);
  border-radius:var(--r);box-shadow:var(--bong-cao);overflow:hidden;min-width:260px;max-height:300px;overflow-y:auto}
.goi-y div{padding:8px 12px;cursor:pointer;font-size:13px;border-bottom:1px solid var(--n100)}
.goi-y div:last-child{border-bottom:0}
.goi-y div:hover,.goi-y div.chon{background:var(--c50)}
.goi-y small{display:block;color:var(--chu-mo);font-size:11px}
.goi-y .them{color:var(--chinh);font-weight:600}

/* ---------- ô chọn có gõ tìm (tỉnh/thành, phường/xã) ----------
   Sau sáp nhập còn 34 tỉnh/thành nhưng mỗi tỉnh hàng trăm phường/xã —
   sổ xuống rồi kéo tay không ra. Ô gõ úp lên <select>; <select> bị ẩn
   nhưng VẪN là nơi duy nhất giữ giá trị, nên bộ tự lưu .oi không đổi gì.
   Vì <select> đứng trước ô gõ nên ba trạng thái lưu vẽ sang được. */
.chontim{position:relative;min-width:0}
.chontim>.o-chontim{width:100%}
.chontim>select.dang-luu+.o-chontim{background:#fff8e3;border-color:#e7cd80}
.chontim>select.da-luu+.o-chontim{background:var(--tt-luc-n);border-color:#a6d7bb;transition:background .6s,border-color .6s}
.chontim>select.loi-luu+.o-chontim{background:var(--tt-do-n);border-color:#e9b4b6}
.goi-y-chon{left:0;right:0;top:100%;margin-top:2px;min-width:0;max-height:260px}
.goi-y-chon .mo{cursor:default;color:var(--chu-mo);font-style:italic}

/* ---------- dải khách đang chờ nhận (di trú 109) ----------
   Màu cam: theo bảng nghĩa ở QĐ 48, cam là "cần chú ý ngay". Khách
   chưa ai phụ trách đúng là việc cần làm ngay, không phải lỗi (đỏ)
   cũng không phải đã xong (xanh lá). */
.hang-cho{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  margin:10px 0 0;padding:10px 14px;border-radius:var(--r);
  background:#fdf3e3;border:1px solid #e7cd80;font-size:13px}
.hang-cho b{color:#6f4108}
/* Điện thoại: 131px cho "Thành phố Hồ Chí Minh" là không gõ nổi, cho hai ô
   xuống hai hàng thay vì chia đôi một hàng. */
.day-dg>.chontim:first-child{flex:1}
.day-dg>.chontim:last-child{flex:1.4}
@media(max-width:560px){
  .day-dg{flex-wrap:wrap}
  /* Phải nêu :first-child/:last-child để đè hai dòng tỉ lệ ở trên — chúng
     đặc hiệu hơn, đứng trong @media vẫn thua. */
  .day-dg>.chontim:first-child,.day-dg>.chontim:last-child{flex:1 1 100%}
}

/* Đã gỡ #nhanh / #nhanh-o / #nhanh-xem — thanh thêm nhanh của màn khách
   hàng, bỏ ngày 05/09/2026 vì nó là đường tạo khách thứ hai gây rối.
   Xem chú thích ở manKhach() trong app.js. */

/* ---------- ô tích có nhãn nằm cùng dòng ----------
   Dùng cho "Tạo kèm một cơ hội" trong hộp thêm khách, và cho danh sách
   chọn cột. Ghi đè luật label chung (viết hoa, đậm, xám) — luật đó hợp
   với nhãn ô nhập, còn đây là một dòng để đọc. */
.o-tich{display:flex;align-items:center;gap:8px;margin:0;padding:2px 0;
  font-size:13px;font-weight:500;color:var(--chu);cursor:pointer;
  text-transform:none;letter-spacing:0}
.o-tich>input{margin:0;flex:0 0 auto}

/* ---------- khối báo trùng trong hộp thêm khách ---------- */
.hop-trung{background:var(--tt-vang-n);border:1px solid var(--tt-vang-c);
  border-radius:var(--r);padding:10px 12px;font-size:13px}
.hop-trung-dong{padding:6px 0;cursor:pointer;border-top:1px solid rgba(0,0,0,.06)}
.hop-trung-dong:hover{opacity:.75}

/* ---------- nhãn trạng thái ---------- */
/* Nhãn trạng thái nằm TRONG ô bảng, nên phải thấp hơn chiều cao dòng
   (18px) chứ không được tự đẩy hàng cao lên. 21px -> 18px. */
.nhan{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;font-weight:650;
  letter-spacing:.1px;white-space:nowrap;line-height:16px}
.n-xanh{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.n-do{background:var(--tt-do-n);color:var(--tt-do-c)}
.n-cam{background:var(--tt-vang-n);color:var(--tt-vang-c)}
.n-xam{background:var(--tt-xam-n);color:var(--tt-xam-c)}
.n-tim{background:var(--tt-tim-n);color:var(--tt-tim-c)}
.n-lam{background:var(--tt-lam-n);color:var(--tt-lam-c)}

/* ---------- màn Khách hàng: thanh lọc theo nhóm và chia khách ----------
   Số đếm trên chip phải đọc được cả khi chip đang bật (nền xanh đậm),
   nên dùng độ mờ chứ không đặt màu chữ cố định. */
.kh-chia{display:flex;gap:8px;flex-wrap:wrap;align-items:center;
  background:var(--c50);border:1px solid var(--c100);border-radius:8px;
  padding:8px 12px;margin-bottom:10px}
.kh-chia b{font-size:13px}
.kh-so{font-variant-numeric:tabular-nums;white-space:nowrap}
/* Số dư ÂM bên KiotViet = gần như luôn là sales ghi nhận sai, cần tìm ra
   để xử lý. Bản đầu tô XANH vì tưởng là "khách trả thừa, không sao" —
   anh Trọng sửa lại ngay hôm 07/09. Nay tô cam (cảnh báo), cố ý không
   dùng đỏ: đỏ ở hệ này đang dành cho nợ quá hạn, tức tiền đòi được; đây
   là chuyện ghi chép sai, khác loại việc. */
.kh-no-am{color:var(--cam);font-weight:600}
.kh-lich{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:0;
  border:1px solid var(--vien);border-radius:8px;overflow:hidden}
.kh-lich > div{padding:10px 14px;border-right:1px solid var(--vien)}
.kh-lich > div:last-child{border-right:0}
.kh-lich .n{font-size:15px;font-weight:600;letter-spacing:-.1px;font-variant-numeric:tabular-nums}
.kh-lich .t{font-size:11.5px;color:var(--mo);font-weight:600}
@media(max-width:900px){
  .kh-lich > div{border-right:0;border-bottom:1px solid var(--vien)}
  .kh-chia{position:sticky;bottom:0;z-index:5}
}

.so-lon{font-size:26px;font-weight:700;letter-spacing:-.7px;line-height:1.15;font-variant-numeric:tabular-nums}
.mo{color:var(--chu-mo);font-size:12.5px}
.trong{padding:34px 18px;text-align:center;color:var(--chu-mo)}
.trong b{display:block;color:var(--chu);margin-bottom:4px;font-size:14.5px}

/* ---------- báo ---------- */
/* ---------- thanh "có bản mới" ----------
   Anh Trọng 12/09/2026: "mỗi lần cập nhật thấy câu này, làm cho nổi bật
   hơn". Bản cũ là viên thuốc xanh đậm cỡ chữ 13 nằm sát đáy — cùng tông
   với thanh .bao báo lỗi thường ngày nên mắt lướt qua, và trên điện
   thoại nó nằm ĐÈ lên thanh điều hướng dưới.

   Bản mới: tông hổ phách (màu nhấn của hệ, khác hẳn mọi thanh báo khác),
   hai dòng chữ, chấm nhịp bên trái, nút trắng đậm. Vẫn KHÔNG dùng đỏ —
   đỏ trong CRM này nghĩa là hỏng/quá hạn, mà đây là tin tốt.
   Có nút × để người đang soạn dở dẹp đi, nhưng để mờ, không tranh chỗ
   với nút Tải lại. */
.ban-moi{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:95;
  display:flex;align-items:center;gap:14px;max-width:min(94vw,520px);
  background:linear-gradient(135deg,#b4740f,#8a5a12);color:#fff;
  padding:12px 14px 12px 18px;border-radius:14px;font-size:14px;line-height:1.3;
  border:1px solid rgba(255,255,255,.28);
  box-shadow:0 10px 34px rgba(138,90,18,.42),0 2px 8px rgba(0,0,0,.18);
  animation:banMoiLen .26s ease-out, banMoiNhip 1.5s ease-in-out .3s 2}
.ban-moi .bm-chu{display:flex;flex-direction:column;gap:2px;min-width:0}
.ban-moi .bm-chu b{font-size:14.5px;font-weight:700}
.ban-moi .bm-chu span{font-size:12.5px;color:rgba(255,255,255,.82)}
/* Chấm nhịp: dấu hiệu "có gì đó mới", dừng hẳn sau 6 nhịp để không
   nhấp nháy suốt buổi làm việc. */
.ban-moi .bm-cham{flex:none;width:10px;height:10px;border-radius:50%;background:#ffd98a;
  box-shadow:0 0 0 0 rgba(255,217,138,.8);animation:banMoiCham 1.8s ease-out 6}
.ban-moi .nut{background:#fff;color:#7a4f10;border-color:#fff;font-weight:700;
  padding:7px 14px;font-size:13.5px;white-space:nowrap}
.ban-moi .nut:hover{background:#fff7e8;border-color:#fff7e8}
.ban-moi .bm-dep{flex:none;border:0;background:transparent;color:rgba(255,255,255,.6);
  font-size:17px;line-height:1;padding:2px 4px;cursor:pointer;border-radius:6px}
.ban-moi .bm-dep:hover{color:#fff;background:rgba(255,255,255,.14)}
@keyframes banMoiLen{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}
@keyframes banMoiNhip{0%,100%{box-shadow:0 10px 34px rgba(138,90,18,.42),0 2px 8px rgba(0,0,0,.18)}
  50%{box-shadow:0 10px 34px rgba(138,90,18,.42),0 0 0 7px rgba(180,116,15,.20)}}
@keyframes banMoiCham{0%{box-shadow:0 0 0 0 rgba(255,217,138,.8)}
  70%{box-shadow:0 0 0 9px rgba(255,217,138,0)}100%{box-shadow:0 0 0 0 rgba(255,217,138,0)}}
/* Người tắt hiệu ứng chuyển động thì chỉ còn màu và cỡ chữ — vẫn nổi. */
@media(prefers-reduced-motion:reduce){
  .ban-moi,.ban-moi .bm-cham{animation:none}
}
#bao{position:fixed;right:16px;bottom:16px;z-index:90;display:flex;flex-direction:column;gap:7px;align-items:flex-end}
.bao{background:var(--n900);color:#fff;padding:10px 15px;border-radius:var(--r-o);font-size:13px;
  box-shadow:var(--bong-cao);max-width:340px;animation:len .18s ease}
.bao.loi{background:#8f1c22}
.bao.tot{background:#12603a}
@keyframes len{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- đăng nhập ---------- */
#nap-dn{max-width:420px;margin:70px auto}

/* ---------- lối tắt lọc ---------- */
.loi-tat{display:flex;gap:6px;flex-wrap:wrap}

/* ---------- mời cài lên màn hình chính ---------- */
#cai-app{position:fixed;z-index:88;left:16px;bottom:16px;max-width:420px;
  display:flex;align-items:center;gap:10px;
  background:var(--n0);border:1px solid var(--n200);border-radius:var(--r);
  box-shadow:var(--bong-cao);padding:11px 10px 11px 14px;
  font-size:13px;line-height:1.45;color:var(--n700)}
#cai-app b{font-weight:650;color:var(--chu)}
#cai-app .nut{flex:0 0 auto}

/* ---------- khi đang chạy dạng ứng dụng ---------- */
@media(display-mode:standalone){
  /* Không có thanh địa chỉ để kéo lại, nên chặn hiệu ứng kéo nảy của
     trình duyệt — kéo quá đầu danh sách mà nền trắng lộ ra nhìn như lỗi. */
  html,body{overscroll-behavior:none}
}

/* ---------- phần chỉ dùng ở điện thoại (ẩn trên máy tính) ---------- */
#menu-nut{display:none;border:1px solid var(--n300);background:var(--n0);border-radius:var(--r-o);
  padding:0 10px;height:34px;align-items:center;font-size:17px;line-height:1;color:var(--n700)}
#phu-menu{display:none;position:fixed;inset:0;background:rgba(16,24,40,.36);z-index:64;
  opacity:0;transition:opacity .16s}
#phu-menu.hien{opacity:1}
#duoi{display:none}
/* =====================================================================
   ĐIỆN THOẠI / MÁY TÍNH BẢNG DỰNG ĐỨNG
   ===================================================================== */
@media(max-width:900px){

  /* --- Gốc của mọi lỗi tràn ngang ---------------------------------
     #khung có align-items:flex-start. Khi xếp dọc, con của nó co lại
     vừa nội dung (shrink-to-fit), mà shrink-to-fit đo bằng max-content
     — nên mọi hàng flex-wrap bên trong KHÔNG BAO GIỜ chịu xuống dòng
     và kéo cả trang rộng ra 700–2000px. Ép stretch là hết. */
  #khung{flex-direction:column;align-items:stretch;gap:12px;
    padding:12px 12px calc(74px + env(safe-area-inset-bottom))}
  #than{width:100%;min-width:0}

  /* --- thanh trên --- */
  .dau-trong{padding:7px 10px;gap:8px}
  .dau-trong .chip{display:none}
  .hieu{font-size:14px}
  #menu-nut{display:inline-flex}
  #goc-nguoi .mo{max-width:34vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

  /* --- điều hướng: ngăn kéo trượt từ trái, đủ 13 màn --- */
  #dieu-huong{position:fixed;top:0;left:0;bottom:0;width:258px;max-width:82vw;
    flex:none;display:block;z-index:65;background:var(--n0);border-right:1px solid var(--vien);
    box-shadow:var(--bong-cao);overflow-y:auto;
    padding:10px 10px calc(14px + env(safe-area-inset-bottom));
    transform:translateX(-100%);visibility:hidden;
    transition:transform .2s cubic-bezier(.3,.8,.4,1),visibility 0s .2s}
  #dieu-huong.hien{transform:none;visibility:visible;transition:transform .2s cubic-bezier(.3,.8,.4,1)}
  #dieu-huong button{font-size:15px;padding:11px 12px;margin-bottom:1px}
  #phu-menu.mo{display:block}

  /* --- thanh dưới: các màn dùng hằng ngày, trong tầm ngón cái --- */
  #duoi{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:50;gap:2px;
    background:var(--n0);border-top:1px solid var(--vien);
    padding:4px 4px calc(4px + env(safe-area-inset-bottom))}
  #duoi button{flex:1;min-width:0;border:0;background:transparent;border-radius:9px;
    padding:6px 2px;min-height:46px;font-size:11.5px;font-weight:600;line-height:1.2;
    color:var(--n500);overflow:hidden;text-overflow:ellipsis}
  #duoi button.hoat{color:var(--c700);background:var(--c50)}

  /* Thanh "có bản mới" phải nằm TRÊN thanh điều hướng dưới, không đè lên.
     54px là chiều cao thật của #duoi (46px nút + 2×4px đệm). */
  /* Tên keyframes RIÊNG, không dùng lại "banMoiLen". @keyframes là toàn
     cục kể cả khi khai trong @media — khai trùng tên là bản sau ghi đè
     bản trước cho CẢ hai khổ, và ở màn rộng thanh đang translateX(-50%)
     sẽ bị animation kéo lệch sang phải lúc hiện ra. Đã dính: đo xong
     thấy transform còn sót translateY(16px). */
  /* 78px = thanh #duoi cao 55px + khoảng hở. Rộng tay như vậy vì hiệu
     ứng trượt lên bị trình duyệt TẠM DỪNG khi tab đang ẩn — thanh này
     lại sinh ra đúng lúc người dùng quay lại tab, nên có thể đứng ở
     khung hình đầu (thấp hơn 8px) trong tích tắc. Hở sẵn thì dù kẹt
     cũng không đè lên thanh điều hướng. Đo thật: kẹt 16px với bottom
     64px là đè 7px lên #duoi. */
  .ban-moi{bottom:calc(78px + env(safe-area-inset-bottom));left:12px;right:12px;
    transform:none;max-width:none;
    animation:banMoiLenDoc .26s ease-out, banMoiNhip 1.5s ease-in-out .3s 2}
  @keyframes banMoiLenDoc{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

  /* --- hàng công cụ đầu mỗi màn: xếp thành bốn tầng ---
     Trên máy tính cả cụm nằm gọn một hàng ngang. Trên điện thoại nó tràn
     xuống lộn xộn — tên màn dính chung hàng với chip lọc, nhìn không ra
     đâu là tiêu đề, đâu là bộ lọc. Dùng order để cố định thứ tự:

       1. tên màn        (một hàng riêng)
       2. ô tìm + nút chính
       3. chip lọc
       4. mọi thứ còn lại

     Làm bằng CSS nên tám màn dùng .bg-thanh đều theo, không phải sửa
     từng chỗ vẽ trong sáu tệp. */
  .bg-thanh,.bc-thanh{align-items:flex-start}
  .bg-thanh>*,.bc-thanh>*{order:4}
  .bg-thanh>b:first-child,.bc-thanh>b:first-child{
    order:1;flex:1 1 100%;font-size:15px;letter-spacing:-.1px;padding-top:1px}
  .bg-thanh>.o,.bg-thanh>.day.xa,.bc-thanh>.day.xa{order:2;flex:1 1 100%;margin-left:0}
  /* Ô tìm chiếm trọn một hàng, nút bấm dồn xuống hàng kế. Để chung hàng
     thì nút bị đẩy so le, hàng nào cũng lệch một kiểu. */
  .bg-thanh>.day.xa>.o,.the-dau>.day.xa>.o{flex:1 1 100%;min-width:0}
  .bg-thanh>.chip-loc,.bg-thanh>.chip,.bc-thanh>.chip-loc{order:3}

  /* --- thẻ, hàng công cụ --- */
  .the-dau{padding:10px 12px}
  .the-dau>.day.xa{flex:1 1 100%;margin-left:0}
  .the-than{padding:12px}
  .the-chan{padding:10px 12px;flex-wrap:wrap}
  .day{flex-wrap:wrap}
  .day>.o,.the-dau .o{min-width:0}
  /* Ô tìm và ô lọc chiếm trọn chiều ngang màn hình */
  .o-tim,.o-loc{width:100%;max-width:none;flex:1 1 100%}

  /* --- ô nhập: 16px để iOS không phóng to trang khi bấm vào ô ---
     #than / .ngan / .hop cho đủ specificity, vì các bảng nhập trong
     báo giá và đơn hàng đặt font:inherit ở mức .bg-luoi input. */
  #than input,#than select,#than textarea,
  .ngan input,.ngan select,.ngan textarea,
  .hop input,.hop select,.hop textarea{font-size:16px}

  /* --- nút: đủ to để bấm bằng ngón tay --- */
  .nut{padding:8px 14px;min-height:38px}
  .nut-nho{padding:5px 11px;min-height:32px;font-size:12.5px}
  .chip{padding:3px 11px}
  .chip-nut{min-height:30px}
  .chip-loc{min-height:34px;padding:6px 13px}
  .dong-x{width:40px;height:40px} /* 311 */

  /* --- bảng: luôn cuộn trong khung của nó, không đẩy cả trang ---
     Bọc .cuon do bocBang() trong app.js làm tự động cho mọi bảng. */
  .cuon{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
  th,td{padding:8px 10px}
  th{position:static}

  /* --- ngăn kéo, hộp thoại --- */
  .ngan{width:100%;border-radius:0}
  .ngan-dau{padding:11px 12px}
  .ngan-than{padding:12px}
  .ngan-chan{padding:10px 12px calc(10px + env(safe-area-inset-bottom));flex-wrap:wrap}
  .hop{left:0;right:0;top:auto;bottom:0;width:100%;max-width:none;
    border-radius:16px 16px 0 0;max-height:88vh;transform:translateY(100%)}
  .hop.hien{transform:none}
  .hop-than{padding:14px}
  .hop-chan{padding:12px 14px calc(12px + env(safe-area-inset-bottom));flex-wrap:wrap;border-radius:0}
  .hop-chan .nut{flex:1 1 auto;justify-content:center}

  /* --- kanban --- */
  #kanban{scroll-snap-type:x proximity}
  /* min-width:0 là chìa khoá: .cot là flex item, mặc định min-width:auto nên
     nội dung thẻ (min-content ~458px) đẩy cột rộng ra bất kể flex-basis 86vw —
     thẻ bị cắt mất mép phải, phải vuốt ngang mới đọc hết MỘT thẻ (đo 18/09/2026
     ở khung 390px: cột 458px trong màn 370px). */
  .cot{flex:0 0 86vw;min-width:0;max-width:86vw;scroll-snap-align:start}

  /* --- báo --- */
  #bao{left:12px;right:12px;bottom:calc(76px + env(safe-area-inset-bottom));align-items:stretch}
  .bao{max-width:none}

  /* --- mời cài: nằm ngay trên thanh dưới --- */
  #cai-app{left:12px;right:12px;max-width:none;
    bottom:calc(78px + env(safe-area-inset-bottom))}
}

/* =====================================================================
   MÀN HẸP: mỗi dòng bảng thành một thẻ đọc dọc.
   Chỉ áp cho bảng danh sách thuần đọc — bảng có ô nhập giữ nguyên dạng
   lưới và cuộn ngang, vì nhập liệu theo cột vẫn dễ hơn.
   Nhãn cột lấy từ thead, do bocBang() trong app.js gắn vào data-nhan.
   ===================================================================== */
@media(max-width:620px){
  /* Bốn ô số của bảng điều khiển: hai cột, không phải bốn dòng. Bốn dòng
     là mất trọn một màn trước khi thấy "Hôm nay của tôi". */
  /* minmax(0,1fr): track "1fr" mặc định không co xuống dưới min-content, nên
     ô số dài (tiền + chú thích) đẩy lưới rộng hơn màn — đo 18/09/2026 ở khung
     390px: Báo cáo › Theo khách tràn 54px, Công nợ & thu tiền 31px. Dưới 430px
     thì xếp một cột: hai cột số trên màn điện thoại đằng nào cũng chật. */
  .luoi.c4{grid-template-columns:repeat(auto-fit,minmax(min(160px,100%),1fr))}
  .luoi>*{min-width:0}
  .bc-o .nhan,.bc-o .so,.bc-o .so-sub{overflow-wrap:anywhere}
  /* Chip .nhan mặc định nowrap — trong ô báo cáo thì một chip dài ("Tập trung —
     khách lớn nhất") giữ nguyên 179px và đẩy lưới tràn 15px ở khung 390px. */
  .bc-o .nhan{white-space:normal;max-width:100%}
  .so-lon{font-size:22px}
  /* Bộ lọc màn Cơ hội / Khách: hai ô chọn nằm cạnh nhau, nút tạo lên
     cùng hàng tiêu đề. Xếp dọc từng cái là mất nửa màn cho bộ lọc. */
  .the-dau>.day.xa>select.o{flex:1 1 40%;min-width:0;width:auto!important}
  .the-dau>.day.xa>input.o{flex:1 1 100%}
  .the-dau>.day.xa>.nut-chinh{flex:1 1 100%}
  #kanban .cot{flex:0 0 86vw;min-width:0;max-width:86vw}
  .cuon-the{overflow-x:visible}
  /* Thẻ trong thẻ nhìn thừa một lớp khung: bỏ vỏ ngoài, để danh sách nằm
     thẳng trên nền trang. */
  .the:has(>.cuon-the){background:transparent;border-color:transparent;box-shadow:none}
  /* Phải phủ CẢ tfoot, không riêng tbody. Dòng tổng nằm ở tfoot; bỏ sót
     nó thì tfoot vẫn là hàng bảng đủ 11 cột, rộng ~490px, đẩy tràn cả
     trang — mà .cuon-the lại tắt cuộn ngang nên không vuốt lại được. */
  .cuon-the>table,
  .cuon-the>table>:is(tbody,tfoot),
  .cuon-the>table>:is(tbody,tfoot)>tr,
  .cuon-the>table>:is(tbody,tfoot)>tr>td{display:block}
  .cuon-the>table>thead{display:none}
  .cuon-the>table>:is(tbody,tfoot)>tr{background:var(--n0);border:1px solid var(--vien);
    border-radius:var(--r);padding:10px 12px;margin-bottom:8px;box-shadow:var(--bong)}
  .cuon-the>table>:is(tbody,tfoot)>tr:hover{background:var(--n0)}
  .cuon-the>table>tfoot>tr:last-child,
  .cuon-the>table>tbody:last-child>tr:last-child{margin-bottom:0}
  /* Thẻ dòng tổng: viền đậm hơn để tách khỏi các dòng dữ liệu bên trên. */
  .cuon-the>table>tfoot>tr{border-color:var(--n300);background:var(--n25)}
  .cuon-the>table>:is(tbody,tfoot)>tr>td{border:0;padding:2.5px 0;white-space:normal;text-align:left;
    display:flex;align-items:baseline;justify-content:space-between;gap:14px}
  /* Nhãn cột dùng --n500 chứ không phải --chu-nhat: xám nhạt trên nền
     trắng chỉ được ~2,4:1, đọc ngoài nắng là mất chữ. */
  .cuon-the>table>:is(tbody,tfoot)>tr>td::before{content:attr(data-nhan);flex:0 0 auto;
    font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;
    color:var(--n500);line-height:1.7}
  .cuon-the>table>:is(tbody,tfoot)>tr>td:first-child{display:block;font-size:14.5px;font-weight:650;
    letter-spacing:-.1px;margin-bottom:7px;padding-bottom:7px;border-bottom:1px solid var(--vien)}
  .cuon-the>table>:is(tbody,tfoot)>tr>td:first-child::before{display:none}
  .cuon-the>table>:is(tbody,tfoot)>tr>td.o-rong{display:none}
  .cuon-the>table>:is(tbody,tfoot)>tr>td.dai{min-width:0}
  /* Bảng đã thành THẺ DỌC thì bề rộng cố định do JS đặt không còn nghĩa gì.
     Style inline thắng CSS thường nên phải !important: bảng Cơ hội đặt
     table-layout:fixed và width = tổng bề rộng 10 cột (1322px), ở khung 390px
     nó kéo cả trang ngang 1322px — đo 18/09/2026, tràn 964px. */
  .cuon-the>table{width:auto!important;min-width:0!important;table-layout:auto!important}
  .cuon-the>table>colgroup{display:none}
}

/* =====================================================================
   Hồ sơ khách hàng — khối trường (xem khoiTruong() trong app.js)
   =====================================================================
   Chia hồ sơ thành từng khối có tiêu đề thay vì một lưới dài. Đường kẻ
   mảnh phía trên đủ để mắt tách khối, không cần khung viền — hồ sơ đã có
   khung thẻ bao ngoài rồi, lồng thêm khung nữa là rối.
   ===================================================================== */
.kh-khoi + .kh-khoi{margin-top:16px;padding-top:14px;border-top:1px solid var(--vien)}
.kh-khoi-dau{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.kh-khoi-dau>span:first-child{font-size:12px;font-weight:600;letter-spacing:0;
  text-transform:none;color:var(--n500)}
/* Nhãn "KiotViet giữ" / "CRM giữ". Cố tình nhạt: nó là chú thích, không
   phải trạng thái cần chú ý. Nhưng vẫn phải đọc được — đây là thứ giải
   thích trước vì sao lát nữa có ô báo "sửa bên KiotViet". */
.kh-chu{font-size:10.5px;font-weight:600;letter-spacing:.2px;color:var(--n500);
  background:var(--n50);border:1px solid var(--vien);border-radius:999px;padding:1px 8px}

/* Ô chữ dài trong bảng khách hàng (địa chỉ, tên pháp nhân). Cắt một dòng
   và để nguyên văn trong title — bảng có tới 23 cột chọn được, một ô địa
   chỉ dài là cả hàng cao gấp ba. */
.kh-cat{display:block;max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Ô chỉ đọc trong hồ sơ (ghi chú KiotViet). Trông gần giống ô nhập để
   nằm cùng lưới cho gọn, nhưng nền xám và không có viền sáng khi rê
   chuột — nhìn là biết bấm vào không gõ được, khỏi thử rồi thất vọng.
   white-space:pre-wrap vì ghi chú bên đó xuống dòng có nghĩa: mỗi dòng
   thường là một chành xe hoặc một dặn dò riêng. */
.kh-chi-doc{white-space:pre-wrap;font-size:13px;line-height:1.55;color:var(--chu);
  background:var(--n25);border:1px solid var(--vien);border-radius:var(--r);
  padding:7px 9px;max-height:170px;overflow:auto}

/* Một dòng tích chọn cột trong hộp "Chọn cột hiển thị".
   Ghi đè luật label chung (viết hoa, đậm, xám) — luật đó hợp với nhãn ô
   nhập, nhưng 23 dòng tên cột viết hoa hết thì đọc rất mệt. */
/* .kh-cot-o cũ đã gộp vào .o-tich ở trên — cùng một hình dáng. */


/* ---------- [hidden] phải thắng mọi display ----------
   Bẫy CSS kinh điển, vừa dính ngày 05/09/2026: khối "Việc cần chào" đặt
   hidden nhưng vẫn hiện, vì luật của trình duyệt cho [hidden] chỉ là
   display:none ở mức UA — thua bất kỳ lớp nào đặt display, ở đây là
   .luoi{display:grid}.
   Đặt một luật !important ở đây thì mọi chỗ dùng el.hidden về sau đều
   chạy đúng, khỏi phải nhớ. */
[hidden]{display:none!important}

/* ---------- lưới 2 cột bên trong hộp thoại ----------
   .c2 dùng chung là auto-fit minmax(290px). Thân hộp thoại rộng 569px,
   hai cột 290 cộng khoảng cách là 593 — thiếu 24px, nên nó rơi về MỘT
   cột và hộp thêm khách dài gấp đôi, phải cuộn. Trong hộp thoại hạ mức
   tối thiểu xuống 220px. */
.hop .luoi.c2{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}

/* =====================================================================
   Sắp xếp cột điều hướng — xem khối chú thích trong app.js
   ===================================================================== */
/* Nút bật/tắt chế độ sắp. Nhạt và nhỏ: nó là cài đặt, không phải một
   màn hình, không được trông ngang hàng với 13 nút phía trên. */
#dh-sap{margin-top:8px;font-size:11.5px;color:var(--n500);opacity:.75;
  justify-content:flex-start;gap:6px}
#dh-sap:hover{opacity:1;background:var(--n100)}

/* Đang sắp: viền đứt để thấy ngay là menu đang ở trạng thái khác thường,
   và con trỏ đổi thành hình bàn tay kéo. */
#dieu-huong.sap-xep{outline:1px dashed var(--n300);outline-offset:4px;border-radius:var(--r)}
#dieu-huong.sap-xep button[data-man]{cursor:grab;padding-right:44px}
#dieu-huong.sap-xep button[data-man]:active{cursor:grabbing}
#dieu-huong.sap-xep button[data-man].hoat::before{display:none}
#dieu-huong.sap-xep #dh-sap{color:var(--c700);opacity:1;font-weight:650}
.dh-keo{opacity:.4}

/* Mũi tên lên/xuống. BẮT BUỘC có, không chỉ kéo thả: kéo thả HTML5 không
   chạy trên màn cảm ứng, mà điện thoại mới là chỗ sales dùng nhiều nhất.
   Vùng bấm 20x18 đủ rộng cho ngón tay mà không chiếm mất chỗ chữ. */
.dh-mui{position:absolute;right:4px;width:20px;height:18px;
  display:flex;align-items:center;justify-content:center;
  font-size:9px;line-height:1;color:var(--n500);
  border:1px solid var(--n200);border-radius:4px;background:var(--n0)}
.dh-mui:hover{background:var(--c50);border-color:var(--c500);color:var(--c700)}
.dh-len{top:3px}
.dh-xuong{bottom:3px}

@media (max-width:820px){
  /* Trên điện thoại menu là ngăn kéo, chạm nhầm dễ hơn — mũi tên to hơn. */
  .dh-mui{width:26px;height:20px;font-size:10px}
  #dieu-huong.sap-xep button[data-man]{padding-right:52px}
}
#dh-goc{font-size:11.5px;color:var(--n500);opacity:.75;justify-content:flex-start;
  margin-top:2px}
#dh-goc:hover{opacity:1;background:var(--n100)}

/* ---------------------------------------------------------------------
   SỔ CHÀNH XE trong hồ sơ khách 360.

   Danh sách chứ không phải lưới ô nhập: một khách có nhiều chành, và
   thứ sales cần thấy ngay là ĐỊA CHỈ ĐẦY ĐỦ để chép cho tài xế — nên
   địa chỉ đứng thành dòng riêng, không nhét vào ô input hẹp.
   --------------------------------------------------------------------- */
.chanh-ds{display:flex;flex-direction:column;gap:8px;padding:10px 12px 12px}
.chanh-dong{border:1px solid var(--n200);border-radius:var(--r);padding:8px 10px;
  background:var(--nen)}
.chanh-dong.chanh-md{border-color:var(--c300);background:var(--c50)}
.chanh-tren{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.chanh-ten{font-weight:650}
.chanh-dt a{font-variant-numeric:tabular-nums}
.chanh-dc{color:var(--n600);font-size:12.5px;margin-top:2px}
.chanh-gc{color:var(--tt-vang-c);font-size:12.5px;margin-top:2px}
/* Tên gọi khác nhạt hơn địa chỉ: đọc lướt phải thấy chỗ giao trước, tên
   phụ chỉ cần tới khi gọi mãi không được người chính. */
.chanh-tk{color:var(--n600);font-size:12.5px;margin-top:2px;font-style:italic;opacity:.85}
.chanh-nut{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}

/* =====================================================================
   HỒ SƠ 360 — DỰNG LẠI 08/09/2026
   Xem khối chú thích đầu man360() trong app.js để biết vì sao đổi.
   ===================================================================== */

/* ---- khối nhận diện ---- */
.a-ho{background:var(--the);border:1px solid var(--vien);border-radius:var(--r);
  box-shadow:var(--bong);padding:13px 16px 12px}
.a-ho .gd-ten{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:9px}
/* Tên khách là một ô sửa-tại-chỗ (input), mà input thì không xuống dòng —
   hẹp là cắt cụt chữ cuối. Cho nó GIÃN chiếm phần trống còn lại; mã khách
   và hai con số vẫn bị .gd-canh đẩy sang phải bằng margin-left:auto. */
.a-ho .gd-ten h4{margin:0;font-size:18px;font-weight:700;letter-spacing:-.25px;
  flex:1 1 300px;min-width:0}
/* .a-lui (nút về của hồ sơ khách) gộp vào .nut-ve — 311 */

/* hai con số ở góc phải: nợ và mua lần cuối */
.gd-canh{margin-left:auto;display:flex;gap:20px;text-align:right}
.gd-canh>div{white-space:nowrap}
/* 13/09/2026 rà chữ: nhãn 10px/700 IN HOA giãn .06em → 11.5px/500 chữ
   thường. Chữ hoa cỡ 10 là cỡ khó đọc nhất trong màn, mà lại nặng hơn
   cả số nó chú thích. Số 16px/700 → 15px/600 (cùng mức với ô số ở Công
   nợ, Báo giá, Báo cáo sau đợt rà hôm nay). */
.gd-canh .t{font-size:11.5px;font-weight:500;letter-spacing:0;text-transform:none;
  color:var(--chu-mo);display:block}
.gd-canh .n{font-size:15px;font-weight:600;letter-spacing:0;line-height:1.35;
  font-variant-numeric:tabular-nums;display:block}
.gd-canh .n.no{color:var(--do)}
.gd-canh .p{font-size:11px;color:var(--chu-mo);display:block}

/* nút Sửa hồ sơ — góc trên bên phải, chỗ các CRM khác đều để */
.b-sua{align-self:center;margin-left:14px}
.b-sua .but{font-size:13px;line-height:1}

/* thanh bảy bậc vòng đời khách */
.gd-buoc{display:flex;gap:3px}
.gd-buoc>div{flex:1;min-width:0;background:var(--n100);color:var(--n500);padding:5px 6px;
  font-size:10.5px;font-weight:650;text-align:center;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;
  clip-path:polygon(0 0, calc(100% - 7px) 0, 100% 50%, calc(100% - 7px) 100%, 0 100%)}
.gd-buoc>div:first-child{border-radius:4px 0 0 4px}
.gd-buoc>div:last-child{clip-path:none;border-radius:0 4px 4px 0}
.gd-buoc>div.qua{background:var(--c100);color:var(--c700)}
.gd-buoc>div.nay{background:var(--c600);color:#fff}
.gd-chu{font-size:11.5px;color:var(--chu-mo);margin-top:6px}

/* điện thoại và địa chỉ — MỖI THỨ MỘT DÒNG, có nhãn để quét mắt ra ngay */
.a-lh{margin-top:10px;font-size:13.5px}
.a-lh .d{display:flex;align-items:baseline;gap:10px;padding:2px 0}
.a-lh .k{flex:0 0 82px;font-size:12px;font-weight:500;letter-spacing:0;
  text-transform:none;color:var(--chu-mo);line-height:1.7}
.a-lh .dt{display:block;flex:1;min-width:0;font-weight:650;font-variant-numeric:tabular-nums}
.a-lh .dc{display:block;flex:1;min-width:0}
/* Dòng "đủ mảnh": chỉ đọc, chính là chuỗi in ra phiếu giao. Thụt vào cho
   thấy rõ nó phụ thuộc dòng Địa chỉ ngay trên. */
.a-lh .dc-du{display:block;flex:1;min-width:0;font-size:12.5px;color:var(--chu-mo);
  padding:2px 0 0}
.mua-so .v.qua-han{color:var(--do)}

/* hàng nút tạo mới: gọn, nhỏ, sát nhau */
.a-tao{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:12px}
.a-tao .ngan{width:1px;height:20px;background:var(--vien);margin:0 3px;flex:none}

/* ---- dải phụ: Bán hàng · Mua trên KiotViet · Người liên hệ ---- */
.a-phu{display:grid;grid-template-columns:1.3fr 1.05fr 1fr;gap:1px;background:var(--vien);
  border:1px solid var(--vien);border-radius:var(--r);overflow:hidden;margin-top:13px}
.a-phu.hai-cot{grid-template-columns:1.3fr 1fr}
.a-phu>div{background:var(--the);padding:10px 15px 13px;min-width:0}
.phu-dau{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.phu-dau .nh{font-size:12px;font-weight:600;letter-spacing:0;
  text-transform:none;color:var(--chu-mo)}
.phu-dau .cong{margin-left:auto;display:flex;gap:4px;align-items:center}
.chu-so{font-size:11px;font-weight:500;letter-spacing:0;padding:1px 6px;border-radius:4px;
  background:var(--n100);color:var(--n500);text-transform:none;white-space:nowrap}

.bh{display:grid;grid-template-columns:repeat(auto-fit,minmax(122px,1fr));gap:8px 14px}
.bh>div{min-width:0}
.bh .l{font-size:10.5px;color:var(--chu-mo);display:block;line-height:1.3}
.bh .v{font-size:13px;display:block;min-width:0}
.bh .v>.oi{font-weight:550}
/* .oi có width:100% nên mọi ô bọc nó phải là block, không thì input co lại 0 */
.a-ho .gd-ten h4>.oi{font:inherit}

.mua-so{display:grid;grid-template-columns:1fr 1fr;gap:7px 12px}
.mua-so .l{font-size:10.5px;color:var(--chu-mo);display:block;line-height:1.3}
.mua-so .v{font-size:13px;font-weight:650;display:block;font-variant-numeric:tabular-nums;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.lh-ds .d{display:flex;align-items:baseline;gap:7px;padding:4px 0;font-size:13px;
  border-bottom:1px solid var(--n100)}
.lh-ds .d:last-child{border-bottom:0}
.lh-ds .ten{font-weight:650}
.lh-ds .cv{color:var(--chu-mo);font-size:12px}
.lh-ds .sdt{margin-left:auto}
.lh-trong{font-size:12.5px;color:var(--chu-nhat);padding:5px 0}
.ghi-nho{font-size:11.5px;color:var(--chu-mo);margin-top:7px;padding-top:7px;
  border-top:1px dashed var(--vien)}

/* ---- thanh tab, dính khi cuộn ---- */
.a-thanh{position:sticky;top:0;z-index:8;background:var(--the);
  border:1px solid var(--vien);border-bottom:0;border-radius:var(--r) var(--r) 0 0;
  padding:0 14px;margin-top:13px;display:flex;align-items:center;gap:12px}
.a-tab{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;flex:1;min-width:0}
.a-tab::-webkit-scrollbar{display:none}
/* 13/09/2026 — cho khớp .cn-tab / .dh-nguon / .ct-tab / .kho-ngan:
   13px MỎNG (500) cho tab thường, chỉ tab đang xem mới đậm 600. Trước
   đây cả năm tab đều 13.5/600 nên không nhìn ra cái nào đang mở nếu
   không để ý gạch chân. */
.a-tab button{border:0;background:none;padding:10px 12px 9px;font-size:13px;font-weight:500;
  color:var(--chu-mo);border-bottom:2px solid transparent;white-space:nowrap;margin-bottom:-1px}
.a-tab button:hover{color:var(--n700)}
.a-tab button[aria-selected="true"]{color:var(--c700);font-weight:600;border-bottom-color:var(--c600)}
/* tab rỗng làm MỜ, không ẩn: ẩn thì thanh tab đổi hình theo từng khách
   và sales không biết chỗ đó tồn tại. */
.a-tab button.rong{color:var(--chu-nhat)}
.a-tab button.rong:hover{color:var(--chu-mo)}
/* Số đếm: 700 → 500. Màu vẫn là thứ mang nghĩa (đỏ = cần chú ý), không
   phải độ đậm. */
.a-tab .dem{font-size:11px;font-weight:500;color:var(--chu-nhat);margin-left:4px;
  font-variant-numeric:tabular-nums}
.a-tab button[aria-selected="true"] .dem{color:var(--c600)}
.a-tab .dem.canh{color:var(--do)}
.a-than{background:var(--the);border:1px solid var(--vien);border-top:0;
  border-radius:0 0 var(--r) var(--r);padding:15px 14px 18px}
.a-than>div>.the:first-child{margin-top:0}

/* ---- Trọng tâm ---- */
.tt{border:1px solid var(--vien);border-radius:var(--r);background:var(--the);overflow:hidden}
.tt-dau{padding:9px 14px;border-bottom:1px solid var(--vien);display:flex;align-items:center;gap:9px}
.tt-dau .nh{font-size:12px;font-weight:600;letter-spacing:0;text-transform:none;
  color:var(--chu-mo)}
.tt-h{display:flex;gap:11px;align-items:flex-start;padding:11px 14px;
  border-bottom:1px solid var(--n100)}
.tt-h:last-child{border-bottom:0}
.tt-h .bi{flex:none;width:22px;height:22px;border-radius:6px;display:flex;
  align-items:center;justify-content:center;font-size:12px;background:var(--n100);color:var(--n500)}
.tt-h.canh{background:var(--do-nhat)}
.tt-h.canh .bi{background:var(--n0);color:var(--do)}
.tt-h.canh .t1{color:var(--do)}
.tt-h .noi{flex:1;min-width:0}
.tt-h .t1{font-size:13.5px;font-weight:650}
.tt-h .t2{font-size:12px;color:var(--chu-mo);margin-top:1px}
.tt-h>.nut{margin-left:auto;flex:none}

/* ---- Lưu ý bán hàng (ghi chú KiotViet) ---- */
.luu-y{white-space:pre-line;font-size:13.5px;line-height:1.65;color:var(--n700)}
.nguon{font-size:11.5px;color:var(--chu-mo);margin-top:9px;padding-top:8px;
  border-top:1px dashed var(--vien)}

/* ---- Lịch sử có tab lọc ---- */
.ls-loc{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;
  border-bottom:1px solid var(--vien);margin-bottom:4px}
.ls-loc::-webkit-scrollbar{display:none}
.ls-loc button{border:0;background:none;padding:7px 10px;font-size:12.5px;font-weight:600;
  color:var(--chu-mo);border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.ls-loc button:hover{color:var(--n700)}
.ls-loc button[aria-selected="true"]{color:var(--c700);border-bottom-color:var(--c600)}
.trong-r{padding:20px 12px;text-align:center;color:var(--chu-mo);font-size:13px}

/* ---- hộp Sửa hồ sơ ---- */
.hop-dan{font-size:12.5px;color:var(--chu-mo);margin:0 0 16px;padding-bottom:14px;
  border-bottom:1px solid var(--vien)}
.nhom+.nhom{margin-top:16px;padding-top:14px;border-top:1px solid var(--vien)}
.nhom-dau{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.nhom-dau>span:first-child{font-size:12px;font-weight:600;letter-spacing:0;
  text-transform:none;color:var(--chu-mo)}
.nhom-luoi{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px 16px}
.nhom-luoi .r1{grid-column:1/-1}
.o-l{display:block;font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;
  color:var(--chu-mo);margin-bottom:3px}
.nhom.kho{background:var(--n25);border:1px solid var(--vien);border-radius:9px;
  padding:11px 12px;margin-top:16px}
.kho-hang{display:flex;gap:10px;padding:3px 0;font-size:13px;align-items:baseline}
.kho-hang .l{flex:0 0 150px;color:var(--chu-mo);font-size:12px}
.kho-hang .v{color:var(--n700);min-width:0}

/* ---- điện thoại ---- */
@media(max-width:900px){
  .a-ho .gd-ten h4{font-size:16px;flex:1 1 100%;order:2;margin-top:2px}
  .gd-canh{order:3;margin-left:0;width:100%;justify-content:space-between;text-align:left;
    gap:0;margin-top:9px;padding-top:9px;border-top:1px solid var(--n100)}
  .b-sua{order:1;margin-left:auto;padding:5px 10px}
  .b-sua .chu-sua{display:none}
  .a-lh .k{flex:0 0 76px;letter-spacing:.02em}
  .a-phu,.a-phu.hai-cot{grid-template-columns:1fr}
  .a-tao .ngan{display:none}
  .kho-hang{flex-wrap:wrap;gap:2px 10px}
  .kho-hang .l{flex:1 1 100%}
  .a-thanh{padding:0 10px}
  .a-than{padding:13px 11px 16px}
  /* thanh tab dính dưới thanh trên của điện thoại, không dính lên tận đỉnh */
  .a-thanh{top:0}
}

/* ---------------------------------------------------------------------
   LỊCH SỬ MUA KIOTVIET — trong tab Giao dịch (di trú 051, 08/09/2026)

   Bảng chỉ đọc. Bấm một hàng thì bung hàng chi tiết ngay dưới nó, nên
   con trỏ phải là bàn tay và hàng phải có phản hồi khi rê chuột — không
   có dấu hiệu nào thì không ai biết bấm được.
   --------------------------------------------------------------------- */
.mua-tk{display:flex;flex-wrap:wrap;gap:4px 18px;font-size:13px;
  padding-bottom:10px;margin-bottom:2px;border-bottom:1px solid var(--n100)}
.mua-tk b{font-variant-numeric:tabular-nums}
table.mua-hd{width:100%;border-collapse:collapse;font-size:13px}
table.mua-hd th{font-size:12px;font-weight:600;letter-spacing:0;text-transform:none;
  color:var(--chu-mo);text-align:left;padding:8px 8px 6px;border-bottom:1px solid var(--vien);
  white-space:nowrap}
table.mua-hd th.phai,table.mua-hd td.phai{text-align:right}
table.mua-hd td{padding:7px 8px;border-bottom:1px solid var(--n100);vertical-align:top}
table.mua-hd td.phai{font-variant-numeric:tabular-nums;font-weight:600}
table.mua-hd tbody tr:not(.mua-ct){cursor:pointer}
table.mua-hd tbody tr:not(.mua-ct):hover{background:var(--n25)}
/* Đơn đã huỷ: làm mờ chứ không ẩn. Sales phải thấy là "có đơn ngày đó
   nhưng đã huỷ", không phải thấy một khoảng trống rồi tự đoán. */
table.mua-hd tr.mua-huy td{color:var(--chu-mo);text-decoration:line-through}
table.mua-hd tr.mua-huy td .nhan{text-decoration:none}
tr.mua-ct>td{background:var(--n25);padding:9px 12px}
.mua-hang{display:flex;flex-direction:column;gap:5px}
.mua-hang .d{display:flex;flex-wrap:wrap;gap:2px 12px;align-items:baseline;font-size:12.5px}
.mua-hang .t{flex:1 1 220px;min-width:0}
.mua-hang .mh{font-style:normal;color:var(--chu-mo);font-size:11px;margin-left:7px;
  font-variant-numeric:tabular-nums}
.mua-hang .sl,.mua-hang .tt{font-variant-numeric:tabular-nums;color:var(--chu-mo)}
.mua-hang .tt{font-weight:600;color:inherit;min-width:92px;text-align:right}
.mua-hang .tra{color:var(--do);font-size:11.5px}
.mua-chan{padding-top:10px}

@media(max-width:900px){
  /* Cột Người bán là thứ hy sinh được đầu tiên trên màn hẹp: tên người
     bán dài, mà sales mở hồ sơ khách thì đang tìm ngày và số tiền. */
  table.mua-hd th:nth-child(3),table.mua-hd td:nth-child(3),
  table.mua-hd th:nth-child(5),table.mua-hd td:nth-child(5){display:none}
  .mua-hang .tt{text-align:left;min-width:0}
}

/* Gợi ý đọc từ ghi chú KiotViet (hạn mức / kỳ hạn nợ). Cố ý trông như
   một lời nhắc chứ không như một ô dữ liệu: con số này CHƯA phải dữ
   liệu của CRM cho tới khi có người bấm nút. */
.goi-y-nhac{margin-top:6px;font-size:11.5px;color:var(--chu-mo);line-height:1.55;
  display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px}
.goi-y-nhac i{font-style:normal;color:var(--n700);background:var(--n50);
  border-radius:5px;padding:1px 5px}

/* =====================================================================
   HÀNG TỔNG NGAY DƯỚI TIÊU ĐỀ BẢNG (anh Trọng chốt 12/09/2026)
   =====================================================================
   Giống KiotViet: nhìn tiêu đề cột là thấy luôn tổng của cột đó, không
   phải ngước lên dải ô rồi dóng xuống xem cột nào ứng với số nào.

   Độ ưu tiên cố ý cao hơn .bg-luoi th (khai trong khối CSS của bao-gia.js)
   để không phụ thuộc thứ tự nạp. Viền dưới đậm tách hẳn khỏi vùng dữ liệu
   — nếu để viền mảnh như mọi dòng thì mắt đọc nhầm nó là khách đầu tiên.
   ===================================================================== */
.bg-luoi thead tr.hang-tong th,#kh-bang thead tr.hang-tong th{background:var(--n50);color:var(--chu);
  text-transform:none;letter-spacing:0;
  font-size:13.5px;font-weight:700;font-variant-numeric:tabular-nums;
  white-space:nowrap;border-bottom:2px solid var(--n300);padding-top:7px;padding-bottom:7px}
.bg-luoi thead tr.hang-tong th .n,#kh-bang thead tr.hang-tong th .n{display:block;font-size:11px;font-weight:600;
  color:var(--chu-mo);letter-spacing:.2px}
.bg-luoi thead tr.hang-tong th .p{display:block;font-size:11.5px;font-weight:600;color:var(--n500)}


/* =====================================================================
   GIAI ĐOẠN CỦA MỘT CHUYẾN GIAO — MỘT BỘ TỪ, MỘT BỘ MÀU (082)
   =====================================================================
   Trước 082 cùng một phiếu giao có ba cách gọi tên tuỳ màn đang mở:
   màn đơn hàng in trạng thái thô ("Kế hoạch"), Lịch giao in bộ chữ
   riêng, còn hàng đợi kho chia năm ngăn theo việc còn lại. Sales và kho
   nói chuyện với nhau không khớp vì mỗi người đọc một bảng chữ.

   Nay chữ lấy từ một chỗ (NGAN trong kho.js), giai đoạn tính ở một chỗ
   (khoNganSql() trong crm_kho.php), và màu ở đây. Đặt trong app.css chứ
   không trong kho.js hay don-hang.js vì cả hai màn cùng dùng — khai hai
   bản là sớm muộn hai bản lệch màu.

   Màu đi theo đường hàng chạy, không phải theo cảm tính (đổi 13/09 khi
   bỏ ngăn "chờ chốt đơn" — chỉ đơn đã xác nhận mới được soạn):
     xám  đơn tạm — kho chỉ biết, chưa có việc
     lam  chờ soạn / đang soạn — việc của kho
     tím  hàng đã soạn, chờ lên xe (cùng tím với "Đã xác nhận" của đơn)
     vàng đang trên đường    › lục  xong   › đỏ  huỷ
   ===================================================================== */
.tt-ngan{display:inline-block;padding:2px 9px;border-radius:99px;
  font-size:11.5px;font-weight:650;white-space:nowrap}
.ngtt-tam{background:var(--tt-xam-n);color:var(--tt-xam-c);border:1px dashed var(--vien-dam)}
.ngtt-xac_nhan{background:var(--tt-lam-n);color:var(--tt-lam-c)}
.ngtt-dang_soan{background:var(--tt-nau-n);color:var(--tt-nau-c)}
.ngtt-cho_giao{background:var(--tt-tim-n);color:var(--tt-tim-c)}
.ngtt-cho_xn{background:var(--tt-vang-n);color:var(--tt-vang-c)}
.ngtt-xong{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.ngtt-huy{background:var(--tt-do-n);color:var(--tt-do-c)}
/* Đường lui: bản ghi cũ còn trong bộ nhớ trình duyệt chưa có `ngan` thì
   nhanGiao() rơi về trạng thái thô — vẫn phải ra màu, không được trắng. */
.ngtt-ke_hoach{background:var(--tt-xam-n);color:var(--tt-xam-c)}
.ngtt-dang_giao{background:var(--tt-vang-n);color:var(--tt-vang-c)}
.ngtt-da_giao{background:var(--tt-luc-n);color:var(--tt-luc-c)}

/* ---------------------------------------------------------------------
   TÌNH TRẠNG THANH TOÁN CỦA ĐƠN (083)
   ---------------------------------------------------------------------
   Trục THỨ HAI, tách hẳn khỏi giai đoạn giao hàng ở trên. Cùng hình
   dạng viên thuốc .tt-ngan để hai trục nhìn cân nhau, nhưng bảng màu
   đọc theo tiền chứ không theo hàng:
     xám  chưa giao nên chưa có gì để thu
     lam  đã giao, chưa thu — bình thường, đang trong hạn
     nâu  đã thu một phần
     lục  thu đủ            đỏ  quá hạn nợ
   Nâu cho "một phần" chứ không vàng: vàng ở trục kia nghĩa là hàng đang
   trên đường, hai trục mà trùng màu là mắt lại gộp chúng làm một.
   --------------------------------------------------------------------- */
.tttt-chua_thu{background:var(--tt-lam-n);color:var(--tt-lam-c)}
.tttt-da_coc{background:var(--tt-nau-n);color:var(--tt-nau-c)}
.tttt-thu_du{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.tttt-qua_han{background:var(--tt-do-n);color:var(--tt-do-c)}

/* ---------------------------------------------------------------------
   TÁM NẤC GIAO HÀNG CỦA MỘT ĐƠN — cách nhìn "Theo đơn" (đề xuất 13/09)
   ---------------------------------------------------------------------
   Khác với .ngtt-* (giai đoạn của một LÔ) và .dtt-* (sáu trạng thái thô
   của đơn): đây là nấc xa nhất đơn đã đạt, tính từ đơn + các lô của nó.
   Tím CHỈ cho "Đã xác nhận" — luật đã chạy từ 12/09, vì đó là nấc trừ
   tồn KiotViet, nhìn phát biết đơn nào đã ăn vào tồn.
   --------------------------------------------------------------------- */
.nac-tam{background:var(--tt-xam-n);color:var(--tt-xam-c)}
.nac-xac_nhan{background:var(--tt-lam-n);color:var(--tt-lam-c)} /* 164 — cùng bộ màu năm nấc với bậc thang Soạn và giao và chip đợt (ngtt-*) */
.nac-dang_soan{background:var(--tt-lam-n);color:var(--tt-lam-c)}
.nac-da_soan{background:var(--tt-tim-n);color:var(--tt-tim-c);font-weight:700} /* 164 */
.nac-dang_di{background:var(--tt-vang-n);color:var(--tt-vang-c)}
.nac-giao_mot_phan{background:var(--tt-nau-n);color:var(--tt-nau-c)}
.nac-giao_du{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.nac-huy{background:var(--tt-do-n);color:var(--tt-do-c)}


/* Hộp Sửa hồ sơ — nhóm "Người liên hệ" (15/09/2026) dùng ô SỬA TẠI CHỖ
   (.oi) trong khi các nhóm khác dùng ô .o. Mặc định .oi không viền (nó
   sinh ra để nằm lẫn trong dòng chữ của hồ sơ), đặt cạnh ô .o trong cùng
   một hộp thì trông như ô hỏng. Cho nó mượn hình dáng của .o — chỉ trong
   hộp này, không đụng .oi ở màn hồ sơ. */
.nhom .oi{width:100%;border:1px solid var(--vien);border-radius:7px;
  padding:6px 9px;font:inherit;background:#fff;min-height:32px}
.nhom .oi:focus{border-color:var(--chinh);outline:none}

/* Bảng cơ hội tab Danh sách: cột đầu dính khi cuộn ngang — 10 cột mặc định rộng ~1330px
   mà khung chỉ 1163px trên màn 1440 (đo 16/09/2026), cuộn sang phải vẫn thấy tên cơ hội. */
table.co-cot-dinh th:first-child,table.co-cot-dinh td:first-child{position:sticky;left:0;z-index:2;background:var(--n0);box-shadow:1px 0 0 var(--vien)}
table.co-cot-dinh th:first-child{background:var(--n25);z-index:3}
table.co-cot-dinh tbody tr:hover td:first-child{background:var(--c25)}
/* Điện thoại: cột đầu 260px chiếm 2/3 màn 390px, dính lại thì không còn chỗ xem cột khác — bỏ dính. */
@media (max-width:600px){table.co-cot-dinh th:first-child,table.co-cot-dinh td:first-child{position:static;box-shadow:none}}

/* ĐẦU BẢNG DÍNH + bảng cuộn trong khung (anh Trọng 16/09/2026) — đi cùng canhCuon()
   trong app.js (đặt max-height cho .cuon theo phần màn hình còn lại). Chỉ màn rộng.
   table{border-collapse:collapse} làm viền th biến mất khi dính → kẻ bằng box-shadow.
   Khe giữa thanh điều hướng và thẻ đầu 14px → 8px ("sát lên thanh Navigation"). */
@media(min-width:901px){
  #than .cuon>table>thead th{position:sticky;top:0;z-index:3;box-shadow:inset 0 -1px 0 var(--n300)}
/* 204 — bảng VỪA bề ngang: bỏ khung cuộn, cả trang cuộn, đầu bảng dính dưới thanh menu
   (top do canhCuon() đặt). Bảng rộng giữ khung cuộn (max-height do canhCuon() đặt). */
#than .cuon.cuon-vua,#than .cuon-khung.cuon-vua{overflow:visible !important}
  #than .cuon>table>thead tr.hang-tong th{box-shadow:inset 0 -2px 0 var(--n300)}
  #than .cuon>table.co-cot-dinh>thead th:first-child{z-index:4}
  body.nav-ngang #dieu-huong{margin-bottom:8px}
  /* 60px đáy là chỗ cho thanh #duoi của điện thoại; màn rộng không có thanh đó — 16px đủ,
     để trang không phải cuộn thêm một mẩu chỉ vì lề. canhCuon() trừ 36px = 16 lề + 20 thẻ. */
  body.nav-ngang #khung{padding-bottom:16px}
  /* Kanban cơ hội (anh Trọng 16/09/2026: "vừa cuộn xuống vừa cuộn ngang rất khó dùng"):
     canhCuon() đặt height cho #kanban = phần màn hình còn lại; mỗi cột là flex dọc, đầu cột
     và dòng tổng đứng yên, .the-list tự cuộn. Cột không phình theo thẻ dài nữa (min-width
     262px thay cho auto = min-content, trước đây cột rộng 457–486px làm cả TRANG cuộn ngang
     1583px trên màn 1440) — 4 cột giãn đều vừa khung; nhiều cột hơn thì cuộn ngang trong
     bảng, không phải cả trang. */
  #kanban{overflow-y:hidden}
  #kanban .cot{flex:1 1 262px;min-width:262px;max-width:360px;display:flex;flex-direction:column;max-height:100%}
  #kanban .cot .the-list{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain}
}

/* ── KPI CỦA TÔI (di trú 098) ──────────────────────────────────────────
   Thẻ cá nhân trên màn Báo cáo › KPI. Lưới tự xuống dòng theo bề ngang,
   nên ở điện thoại thành một cột mà không cần truy vấn màn hình riêng. */
.kpi-luoi{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:8px}
.kpi-o{background:var(--nen-nhat,#f7f8fa);border-radius:8px;padding:8px 10px}
.kpi-nhan{font-size:12px;color:var(--mo)}
.kpi-so{font-size:17px;font-weight:600;margin-top:2px;font-variant-numeric:tabular-nums}
.kpi-so.dam{font-size:21px}
.kpi-phu{font-size:12px;color:var(--mo);margin-top:2px}
.kpi-thanh{height:10px;border-radius:999px;background:var(--vien,#e5e7eb);overflow:hidden}
.kpi-thanh-trong{height:100%;background:var(--chinh);border-radius:999px;transition:width .3s}
.kpi-thanh-trong.dat{background:var(--xanh,#16a34a)}

/* ── NHÂN SỰ (di trú 099) ─────────────────────────────────────────────
   Dòng thời gian ghi nhận: gạch bên trái thay vì viền quanh, để nhiều
   dòng liên tiếp đọc như một mạch chứ không thành một đống thẻ. */
.ns-dong{border-left:3px solid var(--vien,#e5e7eb);padding:6px 0 6px 10px;margin-bottom:8px}
.ns-dong:hover{border-left-color:var(--chinh)}

/* Ô số bấm được trong hồ sơ nhân sự và màn KPI: dấu › cùng lối với màn
   Báo cáo, đổi nền khi rê chuột để biết là bấm được chứ không phải chữ. */
.kpi-o.bam{cursor:pointer}
.kpi-o.bam:hover{background:var(--chinh-nhat,#eef2ff)}
.kpi-mui{color:var(--chinh);font-weight:700}
table.bang tr.bam{cursor:pointer}
table.bang tr.bam:hover{background:var(--chinh-nhat,#eef2ff)}

/* Cột tên bên trái ở hồ sơ nhân sự: mỗi tên một nút, tên đậm và chức danh mờ
   bên dưới — đọc lướt thấy ngay ai là ai. Người đang mở thì gạch trái. */
.ns-ten{display:block;width:100%;text-align:left;background:none;border:0;border-radius:6px;
  padding:6px 8px;cursor:pointer;line-height:1.3}
.ns-ten:hover{background:var(--chinh-nhat,#eef2ff)}
.ns-ten b{display:block;font-size:13px;font-weight:600}
.ns-ten span{display:block;font-size:11.5px;color:var(--mo)}
.ns-ten.hoat{background:var(--chinh-nhat,#eef2ff);box-shadow:inset 3px 0 0 var(--chinh)}
.ns-ten.mo b{color:var(--mo);font-weight:500}

/* Tiêu đề nhóm phòng ban trong cột trái. */
.ns-nhom{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  color:var(--c700);background:var(--c50);border-radius:6px;box-shadow:inset 3px 0 0 var(--c500);margin:10px 0 3px;padding:4px 8px 4px 10px} /* 319 — tên phòng màu riêng, người thụt vào */
.ns-ten{padding-left:20px!important}
.ns-nhom:first-child{margin-top:2px}

/* Nội dung trong thẻ và trong hộp: đừng để chữ ép sát mép (anh Trọng 17/09/2026).
   Chỉ nới phần thân, không đụng .bg-thanh để tiêu đề vẫn thẳng hàng với bảng. */
.the .kpi-luoi{padding:0 2px}
.hop .hop-than{padding:14px 18px}
.hop .hop-dau{padding:14px 18px 6px}
.hop .hop-chan{padding:10px 18px 14px}
.hop table.bg-luoi th,.hop table.bg-luoi td{padding-left:10px;padding-right:10px}
.hop table.bg-luoi th:first-child,.hop table.bg-luoi td:first-child{padding-left:14px}
.hop table.bg-luoi th:last-child,.hop table.bg-luoi td:last-child{padding-right:14px}


/* ---------------------------------------------------------------------
   QUY TRÌNH VÀ HỒ SƠ (di trú 102) — bảng theo bước, lịch, ngăn hồ sơ
   --------------------------------------------------------------------- */
.qt-chon { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin-bottom: 12px; }
.qt-chon > button { border: 1px solid var(--vien, #dde4ec); background: var(--the, #fff); border-radius: 20px; padding: 4px 12px; font-size: 13px; color: var(--mo, #66788a); display: inline-flex; gap: 6px; align-items: center; cursor: pointer; }
.qt-chon > button.hoat { border-color: var(--chinh, #0e6ba8); background: color-mix(in srgb, var(--chinh, #0e6ba8) 10%, transparent); color: var(--chinh, #0e6ba8); font-weight: 600; }
.qt-cham { width: 8px; height: 8px; border-radius: 50%; display: inline-block; flex: none; }
.qt-lbl { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; cursor: pointer; }
.qt-tre { color: var(--do, #c0342b); font-weight: 600; }
.qt-gan { color: #8a6100; font-weight: 600; }
.qt-kb { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(230px, 1fr); gap: 10px; overflow-x: auto; padding-bottom: 6px; }
.qt-cot { background: var(--the, #fff); border: 1px solid var(--vien, #dde4ec); border-radius: 6px; display: flex; flex-direction: column; min-height: 200px; }
.qt-cot-dau { padding: 9px 11px; border-bottom: 1px solid var(--vien, #dde4ec); background: var(--nen-2, #f7f9fb); }
.qt-cot-dau b { font-size: 12.5px; display: flex; gap: 6px; align-items: center; }
.qt-so { width: 18px; height: 18px; border-radius: 50%; background: #17384f; color: #fff; font-size: 11px; display: inline-grid; place-items: center; flex: none; }
.qt-the { margin: 8px; padding: 9px 10px; border: 1px solid var(--vien, #dde4ec); border-left-width: 3px; border-radius: 5px; background: var(--the, #fff); cursor: pointer; }
.qt-the:hover { border-color: var(--chinh, #0e6ba8); }
.qt-the.tre { background: #fbeae8; }
.qt-the.gan { background: #fdf3d6; }
.qt-han { margin: 6px 0 3px; font-size: 12px; }
.qt-dong { display: grid; grid-template-columns: minmax(0,1fr) auto auto; gap: 12px; align-items: center; padding: 9px 13px; border-bottom: 1px solid var(--vien, #dde4ec); cursor: pointer; }
.qt-dong:hover { background: var(--nen-2, #f7f9fb); }
.tt-hs { display: inline-block; padding: 1px 8px; border-radius: 20px; font-size: 11.5px; font-weight: 600; }
.tt-hs.hoan_tat { background: #e6f4ea; color: #1c7a45; }
.tt-hs.tu_choi, .tt-hs.huy { background: #fbeae8; color: #c0342b; }
.qt-lich { background: var(--the, #fff); border: 1px solid var(--vien, #dde4ec); border-radius: 6px; overflow: hidden; }
.qt-lich-dau { display: grid; grid-template-columns: repeat(7, 1fr); background: var(--nen-2, #f7f9fb); border-bottom: 1px solid var(--vien, #dde4ec); }
.qt-lich-dau div { padding: 7px 8px; font-size: 11.5px; color: var(--mo, #66788a); text-transform: uppercase; letter-spacing: .4px; }
.qt-lich-o { display: grid; grid-template-columns: repeat(7, 1fr); }
.qt-ngay { min-height: 92px; border-right: 1px solid var(--vien, #dde4ec); border-bottom: 1px solid var(--vien, #dde4ec); padding: 5px 6px; }
.qt-ngay:nth-child(7n) { border-right: 0; }
.qt-ngay.ngoai { background: var(--nen-2, #f7f9fb); }
.qt-ngay .sn { font-size: 12px; color: var(--mo, #66788a); }
.qt-ngay.nay .sn { background: var(--chinh, #0e6ba8); color: #fff; border-radius: 20px; padding: 0 6px; font-weight: 700; display: inline-block; }
.qt-v { font-size: 11.5px; margin-top: 3px; padding: 2px 5px; border-radius: 4px; background: var(--nen-2, #f7f9fb); border-left: 2px solid var(--chinh, #0e6ba8); cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.qt-v.tre { background: #fbeae8; border-left-color: #c0342b; color: #c0342b; }
.qt-v.xong { opacity: .55; text-decoration: line-through; }
@media (max-width: 640px) { .qt-ngay { min-height: 60px; } .qt-v { font-size: 10.5px; } }
.qt-cap { display: grid; grid-template-columns: 120px minmax(0,1fr); gap: 6px 10px; font-size: 13px; align-items: baseline; margin: 0 0 4px; }
.qt-cap dt { color: var(--mo, #66788a); font-size: 12px; }
.qt-cap dd { margin: 0; }
.qt-h3 { font-size: 12px; text-transform: uppercase; letter-spacing: .6px; color: var(--mo, #66788a); margin: 16px 0 7px; font-weight: 650; }
.qt-hang { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; flex-wrap: wrap; }
.qt-hang > input.o, .qt-hang > select.o, .qt-hang > textarea.o { flex: 1; min-width: 140px; }
.qt-ck { display: flex; align-items: center; gap: 8px; padding: 5px 0; font-size: 13px; cursor: pointer; border-bottom: 1px dashed var(--vien, #dde4ec); }
.qt-ck.roi > span:first-of-type { color: var(--mo, #66788a); text-decoration: line-through; }
.qt-ls-dong { display: grid; grid-template-columns: 22px minmax(0,1fr) auto; gap: 8px; padding: 6px 0; border-bottom: 1px dashed var(--vien, #dde4ec); font-size: 13px; align-items: start; }
.qt-dot { width: 10px; height: 10px; border-radius: 50%; margin-top: 5px; display: block; background: #1c7a45; }
.qt-dot.nay { background: var(--chinh, #0e6ba8); box-shadow: 0 0 0 3px color-mix(in srgb, var(--chinh, #0e6ba8) 18%, transparent); }
.qt-dot.sau { background: var(--vien, #dde4ec); }
.qt-dot.bo { background: var(--vien, #dde4ec); border: 2px dashed var(--mo, #66788a); box-sizing: border-box; }
.qt-ghi { background: #fdf3d6; color: #8a6100; border: 1px solid #f0d9a0; border-radius: 5px; padding: 8px 10px; font-size: 12.5px; margin-bottom: 10px; }
.qt-tac { padding: 10px 12px; background: #fbeae8; color: #c0342b; font-size: 13px; border-radius: 5px; margin: 10px 0; }
.qt-bc { display: grid; grid-template-columns: 170px minmax(0,1fr) 120px; gap: 12px; align-items: center; padding: 9px 0; border-bottom: 1px solid var(--vien, #dde4ec); font-size: 13px; }
.qt-vach { position: relative; height: 18px; background: var(--nen-2, #f7f9fb); border: 1px solid var(--vien, #dde4ec); border-radius: 4px; overflow: hidden; }
.qt-tb { position: absolute; top: 0; bottom: 0; left: 0; background: var(--chinh, #0e6ba8); opacity: .85; }
.qt-tb.qua { background: #c0342b; }
.qt-moc { position: absolute; top: -2px; bottom: -2px; width: 2px; background: #16222e; opacity: .55; }
@media (max-width: 640px) { .qt-bc { grid-template-columns: 1fr; gap: 6px; } }
.qt-buoc-soan { border: 1px solid var(--vien, #dde4ec); border-radius: 6px; padding: 10px 12px; margin-bottom: 10px; background: var(--nen-2, #f7f9fb); }
.nut-do { color: var(--do, #c0342b); }

.nut-so { border: 0; background: transparent; padding: 2px 8px; border-radius: 20px; font-weight: 650; cursor: pointer; color: var(--chinh, #0e6ba8); font: inherit; font-variant-numeric: tabular-nums; }
.nut-so:hover { background: color-mix(in srgb, var(--chinh, #0e6ba8) 10%, transparent); }
.nut-so.do { color: #c0342b; } .nut-so.do:hover { background: #fbeae8; }
.nut-so.tim { color: #6b4fa0; } .nut-so.tim:hover { background: #efeaf8; }


/* =====================================================================
   BÀN XẾP XE (20/09/2026)

   Kẻ chia ĐƠN dày, kẻ chia DÒNG HÀNG mảnh — anh Trọng 20/09: "mỗi đơn
   cho 1 khung bao quanh, mỗi dòng hàng hoá 1 đường kẻ mờ dễ tách biệt".
   Nhìn vào phải tách được đơn này với đơn kia trước, rồi mới tới dòng.

   Màu lấy hết từ thang --tt-* ở :root, không rải mã màu vào đây.
   ===================================================================== */
/* Bảng cuốn ngang trong khung của nó, KHÔNG bóp cột lại. Ở khung
   430px mà để table co theo width:100% thì chín cột dồn thành một mớ
   không đọc được; cho min-width rồi cuốn là vẫn đọc từng cột. Trang
   không bị kéo ngang vì cái cuốn nằm ở đây, không ở body. */
.xx-cuon{ overflow-x:auto; }
.xx-cuon .xx-bang{ min-width:880px; }

.xx-bang{ width:100%; border-collapse:collapse; font-size:13px; }
.xx-bang th{ text-align:left; font-weight:600; font-size:12px; color:var(--chu-mo);
             padding:6px 8px; border-bottom:2px solid var(--vien-dam); white-space:nowrap; }
.xx-bang th.so, .xx-bang td.so{ text-align:right; font-variant-numeric:tabular-nums; }
.xx-bang td{ padding:9px 8px; vertical-align:top; border-top:3px solid var(--vien-dam); }
.xx-bang tbody tr:first-child td{ border-top:0; }
.xx-bang tbody tr:hover td{ background:var(--n25); }

.xx-hang{ width:100%; border-collapse:collapse; font-size:12.5px; }
.xx-hang th{ text-align:left; font-weight:600; color:var(--chu-mo); font-size:11.5px;
             padding:0 8px 3px 0; white-space:nowrap; }
.xx-hang th.so{ text-align:right; }
.xx-hang td{ padding:3px 8px 3px 0; vertical-align:top; border-top:1px solid var(--vien); }
.xx-hang tr:first-child td{ border-top:0; }
.xx-hang td.so{ text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
/* Ô chữ trong hộp Hàng đợi (Vì sao · Nếu được mã này) phải xuống dòng được —
   chip + nút mà nowrap (luật chung th,td) thì hộp tràn ngang (22/09/2026). */
.xx-hang td.xx-vi{white-space:normal;min-width:150px}
.xx-qd{ color:var(--chu-nhat); font-size:11.5px; }

.xx-chip{ display:inline-block; padding:1px 8px; border-radius:20px; font-size:11.5px;
          line-height:18px; margin:0 4px 3px 0; white-space:nowrap; }
.xx-chip.du   { background:var(--tt-luc-n);  color:var(--tt-luc-c); }
.xx-chip.thieu{ background:var(--tt-do-n);   color:var(--tt-do-c); }
.xx-chip.sx   { background:var(--tt-vang-n); color:var(--tt-vang-c); }
.xx-chip.giu  { background:var(--tt-tim-n);  color:var(--tt-tim-c); }
.xx-chip.ghim { background:var(--tt-nau-n);  color:var(--tt-nau-c); }
.xx-chip.di   { background:var(--tt-lam-n);  color:var(--tt-lam-c); }
.xx-chip.xam  { background:var(--tt-xam-n);  color:var(--tt-xam-c); }

/* Dải chuyến của ngày. Ô đặc là chuyến đã có, ô nhạt là số chưa tạo. */
.xx-dai{ display:flex; flex-wrap:wrap; gap:6px; margin:6px 0 10px; }
.xx-cx{ min-width:34px; padding:4px 9px; border-radius:8px; font:inherit; font-size:12px;
        border:1px solid var(--vien-dam); background:var(--the); color:var(--chu-mo);
        cursor:pointer; text-align:center; }
.xx-cx.day{ background:var(--c600); border-color:var(--c600); color:#fff; }

/* Thẻ chuyến trong hộp Xếp chuyến: bày thẳng xe, tài xế và các nơi
   chuyến sẽ ghé, nên không còn là ô vuông nhỏ trong dải mà là thẻ
   nhiều dòng. Chữ phụ lấy màu của thẻ để còn đọc được trên nền đậm. */
.xx-cx-the{ display:block; flex:1 1 236px; min-width:0; padding:8px 11px; text-align:left;
            font-size:13px; line-height:1.4; }
.xx-cx-the .xx-cx-dau{ display:flex; align-items:center; gap:7px; flex-wrap:wrap;
            margin-bottom:2px; }
.xx-cx-the .xx-qd{ display:block; color:inherit; opacity:.85; font-size:12px; }
.xx-cx-the.chon{ outline:2px solid var(--c700,#123240); outline-offset:1px; }
/* Chuyến đã chạy hoặc đã về: đổi sang màu trạng thái, để nhìn dải là
   biết xe nào còn xếp được, xe nào đã đi. */
.xx-cx.day.chay{ background:var(--tt-lam-c); border-color:var(--tt-lam-c); }
.xx-cx.chon{ outline:2px solid var(--c500); outline-offset:1px; }

@media (max-width:430px){
  .xx-bang th, .xx-bang td{ padding:7px 5px; font-size:12px; }
  .xx-bang th{ font-size:11px; }
  .xx-chip{ font-size:11px; padding:1px 6px; }
}

/* 195 — A4 | A5 trên đầu lớp xem bản in (ganKhoIn trong app.js) */
.kho-lop{display:inline-flex;border:1px solid var(--n300);border-radius:var(--r-o);overflow:hidden;flex-shrink:0;background:var(--n0)}
.kho-lop.an{display:none}
.kho-lop button{border:0;background:transparent;padding:6px 12px;font:inherit;font-size:13px;font-weight:600;line-height:1.45;color:var(--n600);cursor:pointer}
.kho-lop button + button{border-left:1px solid var(--n300)}
.kho-lop button:hover{background:var(--n50)}
.kho-lop button.hoat{background:var(--c600);color:#fff}

/* 196 — chọn mẫu in khi loại chứng từ có từ hai mẫu (quaChonBanIn / ganChonMau trong app.js) */
.bi-chon{position:fixed;z-index:400;min-width:260px;max-width:min(360px,calc(100vw - 16px));background:var(--n0);border:1px solid var(--n300);border-radius:10px;box-shadow:0 12px 32px rgba(16,24,40,.18);padding:5px}
.bi-chon-dau{font-size:11px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--n500);padding:5px 9px 4px}
.bi-chon-muc{display:grid;gap:1px;width:100%;text-align:left;border:0;background:transparent;border-radius:7px;padding:7px 9px;font:inherit;cursor:pointer;color:var(--n900)}
.bi-chon-muc b{font-size:13.5px;font-weight:600}
.bi-chon-muc small{font-size:11.5px;color:var(--n500)}
.bi-chon-muc:hover,.bi-chon-muc:focus-visible{background:var(--c25);outline:none}
.bi-chon-muc.dang{background:var(--c50)}
.bi-chon-lop{font:inherit;font-size:13px;border:1px solid var(--n300);border-radius:var(--r-o);padding:5px 8px;background:var(--n0);color:var(--n700);max-width:260px}

/* 200 — khối Giảm giá tổng + Thu khác (SC.khoiGiamThu, đơn hàng + báo giá) */
.bg-tong .d.gt-giam{grid-template-columns:auto minmax(0,1fr)!important;align-items:center}
.bg-tong .d.gt-giam .gt-phai{display:flex;gap:6px;align-items:center;justify-content:flex-end;min-width:0}
.gt-seg{display:inline-flex;flex:none;border:1px solid var(--vien-dam);border-radius:var(--r-nho,6px);overflow:hidden}
.gt-seg button{font:inherit;font-size:12px;font-weight:700;border:0;background:var(--the);color:var(--chu-mo);padding:3px 9px;min-height:28px;cursor:pointer}
.gt-seg button+button{border-left:1px solid var(--vien-dam)}
.gt-seg button.hoat{background:var(--c600);color:#fff}
.gt-seg button:disabled{cursor:default;opacity:.7}
.gt-o{font:inherit;font-size:13px;color:var(--chu);background:var(--the);border:1px solid var(--vien-dam);border-radius:var(--r-nho,6px);padding:4px 8px;min-height:30px;min-width:0}
.gt-o:disabled{background:var(--n50);color:var(--n500)}
.gt-so{text-align:right;font-variant-numeric:tabular-nums}
.gt-giam .gt-phai .gt-o{width:120px}
.gt-tru{color:var(--tt-do-c);font-variant-numeric:tabular-nums}
.bg-tong .d.gt-quy span:last-child{text-align:right}
/* 201 — dòng "Tương đương x% / Quy ra tiền" đọc rõ (anh Trọng: chữ mờ quá) */
.bg-tong .d.mo.gt-quy,.dh-soan .bg-tong.dh-tong-gon .d.mo.gt-quy{font-size:13px;color:var(--chu);font-weight:500}
.bg-tong .d.mo.gt-quy .gt-tru{font-weight:600}
.gt-tk{display:grid;gap:7px;padding:7px 0 9px;border-top:1px dashed var(--vien);border-bottom:1px dashed var(--vien);margin:3px 0}
.gt-tk-dau{display:flex;justify-content:space-between;align-items:center;gap:10px}
.gt-ds{display:grid;gap:7px}
.gt-dong{display:grid;grid-template-columns:minmax(0,1fr) 110px 30px;gap:6px;align-items:center;background:var(--n50);border:1px solid var(--n200);border-radius:8px;padding:7px}
.gt-dong select.gt-o{width:100%;cursor:pointer}
.gt-rong{grid-column:1/-1;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.gt-rong input.gt-o{flex:1 1 200px}
.gt-xoa{border:0;background:none;color:var(--chu-mo);font-size:20px;line-height:1;min-height:30px;cursor:pointer}
.gt-xoa:hover{color:var(--tt-do-c)}
.gt-tich{display:flex;gap:6px;align-items:center;font-size:12.5px;white-space:nowrap;cursor:pointer}
.gt-chip{display:inline-block;font-size:11px;font-weight:700;border-radius:5px;padding:1px 6px;margin-left:6px;background:var(--tt-tim-n);color:var(--tt-tim-c);vertical-align:1px}
.gt-trong{font-size:12px;color:var(--chu-nhat)}
.gt-tk .d{display:grid;grid-template-columns:1fr auto;gap:10px}

/* 260: nút chép cạnh mã / số (nutChep trong app.js) */
.nut-chep{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;margin-left:4px;padding:0;border:1px solid transparent;border-radius:6px;background:none;color:#8a97a0;cursor:pointer;vertical-align:middle;flex:0 0 auto}
.nut-chep:hover,.nut-chep:focus-visible{background:#eef3f6;color:#1d2b36;border-color:#dfe6ea}
.nut-chep.da{color:#1d7348}
/* 261: trong bảng, nút chép chỉ hiện khi rê chuột vào dòng (máy có chuột); điện thoại luôn hiện. */
.nut-chep{transition:opacity .12s}
@media (hover:hover){tr:not(:hover) .nut-chep:not(:focus-visible):not(.da),.kd-dong:not(:hover) .nut-chep:not(:focus-visible):not(.da){opacity:0}}

/* =====================================================================
   316 — Bảng điều khiển của sales (bdkKhoiSales trong app.js) và khối Đội
   sales của quản lý. Màu lấy đúng thang trạng thái --tt-* ở :root.
   ===================================================================== */
.bs-khoi{margin-bottom:13px}
.bs-xem{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 14px;margin-bottom:13px;border-radius:var(--r);
  background:var(--tt-vang-n);border:1px solid #efd3a4;color:var(--tt-vang-c)}
.bs-xem .nut{margin-left:auto}
.bs-xem select.o{max-width:220px}
.bs-cham{display:inline-block;width:9px;height:9px;border-radius:50%;flex:none;background:#b6c1cc}
.bs-cham.do{background:#c0392b}.bs-cham.luc{background:#1f9d5b}.bs-cham.vang{background:#e0b228}
.bs-cham.cam{background:#d98a1c}.bs-cham.xam{background:#b6c1cc}
.bs-muc{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:10px 15px 4px}
.bs-m{display:inline-flex;align-items:center;gap:6px;font:inherit;font-size:12.5px;padding:4px 10px;border-radius:999px;
  border:1px solid var(--vien);background:var(--the);color:var(--chu);cursor:pointer}
.bs-m:hover{border-color:var(--vien-dam)}
.bs-m.on{border-color:var(--chinh);box-shadow:inset 0 0 0 1px var(--chinh)}
.bs-m.rong{color:var(--chu-mo)}
.bs-m b{font-variant-numeric:tabular-nums}
.bs-lan{margin-left:auto}
.bs-hang{padding:4px 0}
.bs-d{display:grid;grid-template-columns:12px 118px minmax(0,1fr) auto auto;gap:10px;align-items:center;
  padding:8px 15px;border-bottom:1px solid var(--n100)}
.bs-d:last-child{border-bottom:0}
.bs-loai{font-size:12px;color:var(--chu-mo)}
.bs-nd{min-width:0}
.bs-nd b{display:block;font-weight:600;overflow-wrap:anywhere}
.bs-nd .mo{display:block;font-size:12px;overflow-wrap:anywhere}
.bs-han{white-space:nowrap}
.bs-tac{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.bs-chip{display:inline-block;font-size:11.5px;font-weight:600;border-radius:999px;padding:1px 8px;white-space:nowrap;
  background:var(--tt-xam-n);color:var(--tt-xam-c)}
.bs-chip.do{background:var(--tt-do-n);color:var(--tt-do-c)}
.bs-chip.luc,.bs-chip.xanh{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.bs-chip.vang{background:var(--tt-vang-n);color:var(--tt-vang-c)}
.bs-chip.cam{background:#fdecd9;color:#8f4a07}
.bs-chan{display:flex;gap:14px;flex-wrap:wrap;align-items:baseline;font-size:12.5px;padding:10px 15px;border-top:1px solid var(--vien)}
.bs-chan .mo{flex:1 1 320px}
.bs-chan a{color:var(--chinh);white-space:nowrap}
.bs-o4{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;padding:12px 15px 2px}
.bs-o{border:1px solid var(--vien);border-radius:var(--r);padding:10px 12px;min-width:0}
.bs-o .mo{font-size:12px}
.bs-so{font-size:22px;font-weight:700;letter-spacing:-.3px;font-variant-numeric:tabular-nums;margin:2px 0}
.bs-so small{font-size:13px;font-weight:500;color:var(--chu-mo)}
.bs-so.xau,.bs-bang td.xau,.bs-doi .xau,.bs-khoi .mo.xau{color:var(--tt-do-c)}
.bs-so.tot,.bs-khoi .mo.tot,.bs-doi .tot{color:var(--tt-luc-c)}
.bs-bang tr.bam{cursor:pointer}
.bs-bang tr.bam:hover td{background:var(--n25)}
.bs-bang tr.bs-tre td{background:var(--tt-do-n)}
.bs-bang .bs-tac{justify-content:flex-start}
.bs-hai{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding:12px 15px}
.bs-hd{display:grid;grid-template-columns:1fr 40px 110px;gap:8px;align-items:baseline;padding:4px 0;border-bottom:1px dashed var(--n100)}
.bs-hd b{text-align:right;font-variant-numeric:tabular-nums}
.bs-hd .mo{font-size:12px}
.bs-doi tr.bam{cursor:pointer}
.bs-doi tr.bam:hover td{background:var(--n25)}
.bs-doi td{vertical-align:top}
.bs-noi{display:flex;flex-direction:column;gap:3px;align-items:flex-start;min-width:200px}
.bs-noi .bs-chip{white-space:normal;font-weight:500}
@media (max-width:760px){
  .bs-d{grid-template-columns:10px minmax(0,1fr);row-gap:4px}
  .bs-loai{grid-column:2}
  .bs-nd,.bs-han,.bs-tac{grid-column:2}
  .bs-tac{justify-content:flex-start}
  .bs-lan{margin-left:0}
  .bs-hai{grid-template-columns:1fr}
}

/* =====================================================================
   318 — Nhân sự gọn (nhan-su.js): bảng phép năm như sheet "THÔNG TIN NHÂN
   VIÊN", hồ sơ 4 khối. Màu lấy đúng thang --c* / --tt-* ở :root.
   ===================================================================== */
.ns2-bang-the{padding:0;overflow:hidden}
.ns2-dau{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 16px 12px}
.ns2-dau h2{display:inline;font-size:17px;margin:0 10px 0 0}
.ns2-dau .mo{font-size:12.5px}
.ns2-nam{width:auto;min-width:110px;font-weight:600}
.ns2-bang{border-collapse:separate;border-spacing:0;width:100%;font-size:13px;font-variant-numeric:tabular-nums}
.ns2-bang th{font-size:11.5px;font-weight:600;color:var(--chu-mo);text-transform:none;background:var(--n50);
  padding:7px 8px;border-bottom:1px solid var(--vien);white-space:nowrap;text-align:left}
.ns2-bang th.so,.ns2-bang td.so{text-align:right}
.ns2-bang tr.ns2-nhom th{background:var(--the);border-bottom:0;padding:6px 8px 0}
.ns2-bang th.ns2-nhom-nghi{text-align:center;color:var(--c700);font-weight:700;letter-spacing:.02em;
  border-bottom:2px solid var(--c200)}
.ns2-bang td{padding:9px 8px;border-bottom:1px solid var(--n100);vertical-align:middle;white-space:nowrap}
.ns2-bang tbody tr.bam{cursor:pointer}
.ns2-bang tbody tr.bam:hover td{background:var(--c25)}
.ns2-bang tbody tr:last-child td{border-bottom:0}
.ns2-bang tr.ns2-nghi td{opacity:.55}
.ns2-bang tr.ns2-pb td{background:var(--c50);color:var(--c700);font-weight:700;font-size:11.5px;letter-spacing:.03em;text-transform:uppercase;padding:7px 10px 6px;border-bottom:1px solid var(--c100);box-shadow:inset 3px 0 0 var(--c500)} /* 319 — dòng tên phòng: dải xanh nhạt + vạch trái; người trong phòng thụt vào (anh Trọng 04/10) */
.ns2-bang tbody tr.bam td.ns2-ten{padding-left:24px}
.ns2-ten{min-width:180px;position:sticky;left:0;background:var(--the);z-index:1}
.ns2-bang tbody tr.bam:hover .ns2-ten{background:var(--c25)}
.ns2-ten b{display:block;font-weight:600;color:var(--chu)}
.ns2-ten span{display:block;font-size:11.5px;color:var(--chu-mo);margin-top:1px}
.ns2-ngay{color:var(--n700)}
.ns2-phep b{font-weight:600}
.ns2-phep i{font-style:normal;color:var(--c600);font-weight:700;margin-left:1px}
.ns2-bang .ns2-t1,.ns2-bang .ns2-t2,.ns2-bang .ns2-t3,.ns2-bang .ns2-t4,.ns2-bang .ns2-t5,.ns2-bang .ns2-t6,
.ns2-bang .ns2-t7,.ns2-bang .ns2-t8,.ns2-bang .ns2-t9,.ns2-bang .ns2-t10,.ns2-bang .ns2-t11,.ns2-bang .ns2-t12{
  min-width:34px;padding-left:4px;padding-right:6px;color:var(--n700)}
.ns2-bang th.nay,.ns2-bang td.nay{background:var(--c25);box-shadow:inset 1px 0 0 var(--c100),inset -1px 0 0 var(--c100)}
.ns2-bang th.nay{color:var(--c700)}
.ns2-bang td.toi{color:var(--n400)}
.ns2-con{display:inline-block;min-width:38px;text-align:center;font-weight:700;border-radius:999px;padding:2px 9px;font-size:12.5px}
.ns2-con.luc{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.ns2-con.do{background:var(--tt-do-n);color:var(--tt-do-c)}
.ns2-con.xam{background:var(--tt-xam-n);color:var(--tt-xam-c)}
.ns2-ng{color:var(--n700)}
.ns2-hs{min-width:110px}
.ns2-kpi{display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:var(--chu)}
.ns2-kpi b{font-weight:700}
.ns2-chua{font-size:12px;color:var(--n400);font-style:italic}
.ns2-chan{padding:10px 16px;border-top:1px solid var(--n100);font-size:12px;color:var(--chu-mo);background:var(--n25)}
.ns2-khac{padding:8px 16px 12px;font-size:12px;background:var(--n25)}
.ns2-khac a{color:var(--chu-mo)}

/* ---- hồ sơ ---- */
.ns2-ho-so{display:flex;flex-direction:column;gap:12px}
.ns2-dau-hs{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:16px 18px}
.ns2-av{width:52px;height:52px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
  background:var(--c50);color:var(--c700);font-weight:700;font-size:20px;box-shadow:inset 0 0 0 1px var(--c100)}
.ns2-ai{flex:1 1 240px;min-width:0}
.ns2-ten-lon{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:18px;font-weight:700;color:var(--chu);margin-bottom:2px}
.ns2-tt{font-size:11.5px;font-weight:600;border-radius:999px;padding:2px 9px}
.ns2-tt.luc{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.ns2-tt.xam{background:var(--tt-xam-n);color:var(--tt-xam-c)}
.ns2-ky{text-align:right;padding:0 6px}
.ns2-nhan{font-size:12px;color:var(--chu-mo);font-weight:600;display:flex;align-items:center;gap:6px}
.ns2-ky .ns2-nhan{justify-content:flex-end}
.ns2-ky-so{font-size:19px;font-weight:700;color:var(--chu);font-variant-numeric:tabular-nums;margin:1px 0}
.nho2{font-size:12px}
.ns2-the-dau{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:13px 16px;border-bottom:1px solid var(--n100)}
.ns2-the-dau h3{font-size:15px;margin:0}
.ns2-gian{flex:1}
.ns2-thang{width:auto}
.ns2-3o{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:14px 16px 4px}
.ns2-so-o{border:1px solid var(--vien);border-radius:var(--r);padding:11px 13px;background:var(--the)}
.ns2-so-o.luc{background:var(--tt-luc-n);border-color:#c5e8d3}
.ns2-so-o.luc .ns2-so{color:var(--tt-luc-c)}
.ns2-so-o.do{background:var(--tt-do-n);border-color:#f3c9c9}
.ns2-so-o.do .ns2-so{color:var(--tt-do-c)}
.ns2-so{font-size:26px;font-weight:700;letter-spacing:-.3px;font-variant-numeric:tabular-nums;line-height:1.15;margin:3px 0 2px;color:var(--chu)}
.ns2-but{border:0;background:none;color:var(--c600);cursor:pointer;font-size:13px;padding:0 2px;line-height:1}
.ns2-but:hover{color:var(--c800)}
.ns2-12{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:6px;padding:12px 16px}
.ns2-o{display:flex;flex-direction:column;align-items:center;gap:2px;border:1px solid var(--n100);border-radius:8px;
  padding:6px 0 7px;background:var(--n25);font:inherit;color:var(--n400);cursor:default}
button.ns2-o{cursor:pointer}
.ns2-o span{font-size:11px;font-weight:600}
.ns2-o b{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums}
.ns2-o.co{background:var(--tt-vang-n);border-color:#f2dcb3;color:var(--tt-vang-c)}
.ns2-o.nay{box-shadow:0 0 0 2px var(--c200)}
.ns2-o.toi{opacity:.55}
.ns2-o.chon{background:var(--c600);border-color:var(--c600);color:#fff;opacity:1}
button.ns2-o:hover{border-color:var(--c200)}
.ns2-ds{width:100%;border-collapse:collapse;font-size:13px}
.ns2-ds td{padding:8px 6px;border-top:1px solid var(--n100);vertical-align:middle}
.ns2-ds td:first-child{padding-left:16px}
.ns2-ds td:last-child{padding-right:16px}
.ns2-ds-th{width:42px;color:var(--chu-mo);font-weight:600}
.ns2-ds-so{width:80px;font-weight:600;white-space:nowrap}
.ns2-ds-ly{color:var(--chu)}
.ns2-ds-ly b{font-weight:600}
.ns2-ds-ai{width:110px;font-size:12px;color:var(--chu-mo);white-space:nowrap}
.ns2-ds-nut{width:54px;text-align:right}
.ns2-rong{padding:12px 16px 14px;color:var(--chu-mo);font-size:13px}
/* 320 — bảng từng ngày ngoài giờ trong hồ sơ */
.ns2-ng-ds th{text-align:left;font-size:11.5px;font-weight:600;color:var(--chu-mo);padding:4px 6px 6px;border-top:1px solid var(--n100)}
.ns2-ng-ds th:first-child,.ns2-ng-ds tfoot td:first-child{padding-left:16px}
.ns2-ng-ngay{width:120px;white-space:nowrap}
.ns2-ng-ngay b{font-weight:600}
.ns2-ng-gio{color:var(--chu);font-variant-numeric:tabular-nums;white-space:nowrap}
.ns2-ng-phut{text-align:right!important;font-weight:600;white-space:nowrap;width:110px;padding-left:28px!important}
.ns2-ds td.ns2-ds-ly{min-width:160px}
.ns2-ds td.ns2-ds-ai{width:auto}
.ns2-ng-ds tfoot td{font-weight:600;color:var(--chu-mo);background:var(--n25)}
.ns2-ng-ds tfoot td.ns2-ng-phut{color:var(--chu)}
.ns2-ng a,.ns2-t-a{color:inherit;text-decoration:underline dotted;text-underline-offset:3px}
/* 320 — Sổ ngày nghỉ + hộp quy định */
.ns2-cong{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px 16px 4px}
.ns2-cong .o{font-size:13px}
.ns2-homnay{margin:0 16px 10px;padding:8px 12px;border-radius:8px;background:var(--c50);border:1px solid var(--c100);font-size:13px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.ns2-homnay b{color:var(--c700);font-weight:600}
.ns2-chip{display:inline-block;background:var(--the);border:1px solid var(--c200);border-radius:999px;padding:1px 9px;font-size:12.5px;color:var(--chu);text-decoration:none}
.ns2-chip:hover{border-color:var(--c500);color:var(--c700)}
.ns2-nhan{display:inline-block;border-radius:999px;padding:1px 8px;font-size:11.5px;font-weight:600;background:var(--n50);color:var(--chu-mo);white-space:nowrap}
.ns2-nhan.luat{background:var(--tt-luc-n);color:var(--tt-luc-c)}
.ns2-qd-nut{border-color:var(--c500)!important;color:var(--c700)!important;background:var(--c25)!important;font-weight:600}
.ns2-qd-nut:hover{background:var(--c50)!important}
.ns2-qd{max-width:740px}
.ns2-qd-dau{padding:8px 12px;margin-bottom:6px;border-radius:8px;background:var(--c50);border:1px solid var(--c100);font-size:13px;color:var(--c900)}
.ns2-qd h4{margin:16px 0 6px;padding:6px 10px;font-size:13.5px;color:var(--c900);background:var(--c25);border-left:3px solid var(--c500);border-radius:0 6px 6px 0}
.ns2-qd table{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed}
.ns2-qd td{padding:6px 8px 6px 0;border-top:1px solid var(--n100);vertical-align:top;white-space:normal;overflow-wrap:anywhere}
.ns2-qd td.so{width:170px}
.ns2-qd .cuon,.ns2-qd .xuat-dong{display:contents}
.ns2-qd td.so{text-align:right;font-weight:600;white-space:nowrap;padding-right:0}
.ns2-qd-ghi{margin-top:16px;padding:12px 14px;background:var(--tt-vang-n);border:1px solid #f2dcb3;border-radius:8px;font-size:13px;color:var(--chu);line-height:1.55}
.ns2-qd-ghi b{display:block;margin-bottom:4px;color:var(--tt-vang-c)}
.ns2-qd td.so{font-size:14px;color:var(--c900)}
.ns2-ng a,.ns2-t-a:hover{color:var(--c700)}
.ns2-diem{display:flex}
.ns2-diem .ns2-kpi{background:var(--c25);border:1px solid var(--c100);border-radius:999px;padding:2px 4px 2px 10px;font-size:12.5px}
.ns2-ho-so .kpi-luoi{padding:12px 16px 14px;margin-top:0}
.ns2-gap>summary{cursor:pointer;padding:13px 16px;font-weight:600;color:var(--chu-mo);list-style:none}
.ns2-gap>summary::-webkit-details-marker{display:none}
.ns2-gap>summary::before{content:'▸';display:inline-block;margin-right:8px;transition:transform .15s}
.ns2-gap[open]>summary::before{transform:rotate(90deg)}
.ns2-gap-trong{display:flex;flex-direction:column;gap:12px;padding:0 12px 12px}
.ns2-hop{display:flex;flex-direction:column;gap:12px;min-width:min(460px,86vw)}
.ns2-hop-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.ns2-truong{display:flex;flex-direction:column;gap:4px;font-size:13px}
.ns2-truong>span{font-weight:600;color:var(--n700)}
.ns2-truong em{font-style:normal;font-size:11.5px;color:var(--chu-mo)}
@media (max-width:760px){
  .ns2-3o{grid-template-columns:1fr 1fr 1fr;gap:6px;padding:12px 12px 2px}
  .ns2-so-o{padding:9px 9px}
  .ns2-so{font-size:21px}
  .ns2-12{grid-template-columns:repeat(6,minmax(0,1fr));padding:12px}
  .ns2-ky{text-align:left;padding:0}
  .ns2-ky .ns2-nhan{justify-content:flex-start}
  .ns2-hop-2{grid-template-columns:1fr}
  .ns2-ds-ai{display:none}
}

/* =====================================================================
   319 — Tìm nhanh toàn hệ thống (app.js moTimToan): nút ở góc trên,
   hộp neo gần đỉnh màn, kết quả gom nhóm. Màu theo thang --c* / --n*.
   ===================================================================== */
.tim-nut{display:inline-flex;align-items:center;gap:6px}
.tim-nut svg{width:15px;height:15px}
.hop.tim-hop{top:9vh;transform:translate(-50%,6px)}
.hop.tim-hop.hien{transform:translate(-50%,0)}
.hop.tim-hop .hop-than{padding:12px 14px 14px}
.tim-toan{display:flex;flex-direction:column;gap:10px}
.tim-o{font-size:15px;padding:10px 12px;min-height:42px}
.tim-kq{max-height:min(60vh,520px);overflow:auto;border:1px solid var(--n100);border-radius:10px;background:var(--n0)}
.tim-goi{padding:14px 12px;font-size:13px;color:var(--chu-mo)}
.tim-nhom{position:sticky;top:0;padding:6px 12px;font-size:11.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;
  color:var(--c700);background:var(--n25);border-top:1px solid var(--n100);border-bottom:1px solid var(--n100)}
.tim-nhom:first-child{border-top:0}
.tim-dong{display:block;padding:8px 12px;text-decoration:none;color:var(--chu);border-bottom:1px solid var(--n100);cursor:pointer}
.tim-dong:last-child{border-bottom:0}
.tim-dong b{display:block;font-weight:600;font-size:13.5px}
.tim-dong small{display:block;color:var(--chu-mo);font-size:11.5px;margin-top:1px}
.tim-dong:hover,.tim-dong.chon{background:var(--c25)}
.tim-dong.chon{box-shadow:inset 3px 0 0 var(--c600)}
@media (max-width:760px){
  .tim-nhan{display:none}
  .hop.tim-hop{top:0;transform:none}
  .tim-kq{max-height:none;border:0;border-radius:0}
}

/* 319 — dòng "Xuất Excel" dưới mỗi bảng danh sách (app.js ganNutXuat) */
.xuat-dong{display:flex;justify-content:flex-end;padding:4px 8px 2px}
.xuat-nut{border:0;background:none;color:var(--chu-mo);font:inherit;font-size:12px;cursor:pointer;padding:3px 6px;border-radius:6px}
.xuat-nut:hover{color:var(--c700);background:var(--c25)}
.xuat-nut:disabled{opacity:.5;cursor:default}
@media print{.xuat-dong{display:none}}

/* =====================================================================
321 — HỒ SƠ NHÂN VIÊN GỌN (anh Trọng 04/10/2026: "trải ngang quá, rộng
quá… các chỉ tiêu dễ nhìn thấy"). Nội dung tối đa 1040px, khối đầu một
dòng, DẢI CHỈ TIÊU ngay dưới tên, nội dung chia TAB (.qt-tab của quản
trị — một lối tab cho cả hệ). Chỉ sắp lại, không đổi cách dựng khối.
===================================================================== */
.ns2-ho-so{max-width:1040px}
.ns2-dau-hs{padding:13px 18px}
.ns2-dong2{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;font-size:13px}
.ns2-dong2 b{color:var(--chu);font-weight:600}
.ns2-cach{color:var(--n400)}
.ns2-dai{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));background:var(--the);border:1px solid var(--vien);border-radius:var(--r);overflow:hidden}
.ns2-dai-o{display:flex;flex-direction:column;gap:1px;padding:10px 14px;border-right:1px solid var(--n100);text-decoration:none;color:var(--chu);min-width:0}
.ns2-dai-o:last-child{border-right:0}
.ns2-dai-o:hover{background:var(--c25)}
.ns2-dai-o.luc{background:var(--tt-luc-n)}.ns2-dai-o.luc .ns2-dai-s{color:var(--tt-luc-c)}
.ns2-dai-o.do{background:var(--tt-do-n)}.ns2-dai-o.do .ns2-dai-s{color:var(--tt-do-c)}
.ns2-dai-n{font-size:11px;font-weight:700;color:var(--chu-mo);text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}
.ns2-dai-s{font-size:21px;font-weight:700;line-height:1.25;font-variant-numeric:tabular-nums;white-space:nowrap}
.ns2-dai-s small{font-size:12px;font-weight:500;color:var(--chu-mo);margin-left:3px}
.ns2-dai-chu{font-size:14px;font-weight:600;color:var(--chu-mo)}
.ns2-dai-p{font-size:12px;color:var(--chu-mo);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ns2-tabthe{padding:0;overflow:hidden}
.ns2-tabthe>.qt-tab{padding:0 10px}
.ns2-tabthe .the{border:0;box-shadow:none;border-radius:0;margin:0}
.ns2-tabthe .ns2-tab-2{display:flex;flex-direction:column}
.ns2-tabthe .ns2-tab-2 .the+.the{border-top:1px solid var(--n100)}
.ns2-tabthe .ns2-tab-2 .the{padding:12px 16px 14px}
.ns2-tabthe .ns2-tab-2 .the>div{max-width:760px}
.ns2-tabthe .ns2-tab-2 .the>.bg-thanh{margin-left:0;margin-right:0}
.ns2-tabthe .ns2-the-dau{border-bottom:0;padding-bottom:6px}
.ns2-ho-so .ns2-3o{grid-template-columns:repeat(3,minmax(140px,220px));gap:8px;padding:6px 16px 4px}
.ns2-ho-so .ns2-so-o{padding:8px 12px}
.ns2-ho-so .ns2-so{font-size:22px;margin:2px 0 1px}
.ns2-ho-so .ns2-12{gap:4px;padding:10px 16px 8px}
.ns2-ho-so .ns2-o{padding:4px 0 5px}
.ns2-ho-so .kpi-luoi{grid-template-columns:repeat(3,minmax(0,1fr));max-width:760px}
/* bảng sạch chụp gửi cuối tháng */
.ns2-gui{min-width:min(640px,88vw)}
.ns2-gui-dau{padding:2px 0 10px}.ns2-gui-dau b{font-size:15px;display:block;letter-spacing:.02em}.ns2-gui-dau div{font-size:13px;color:var(--chu-mo)}
.ns2-gui .ns2-ds td:first-child,.ns2-gui .ns2-ng-ds th:first-child,.ns2-gui .ns2-ng-ds tfoot td:first-child{padding-left:6px}
.ns2-gui .ns2-ds td:last-child{padding-right:6px}
.ns2-gui-tong{color:var(--c700)!important;font-size:15px}
@media (max-width:760px){
.ns2-ho-so .ns2-3o{grid-template-columns:1fr 1fr 1fr}
.ns2-dai{grid-template-columns:1fr 1fr}
.ns2-dai-o{border-bottom:1px solid var(--n100)}
.ns2-ho-so .kpi-luoi{grid-template-columns:1fr 1fr}
}

/* 324 — thanh cuộn ngang ở trên bảng (cuonNgangTren, app.js): nằm trong .cuon, dính top/left của khung cuộn,
   tiêu đề cột (th sticky) lùi xuống 14px để không bị đè */
.cuon>.cuon-tren{position:sticky;top:0;left:0;z-index:6;overflow-x:auto;overflow-y:hidden;height:14px;background:var(--the)}
.cuon>.cuon-tren>div{height:1px}
.cuon.cuon-co-tren thead th{top:14px!important}


/* 350 — địa chỉ khách: chip trên màn xem + khung gợi ý địa giới mới trong hộp Sửa hồ sơ
   (anh Trọng 05/10/2026, demo-dia-chi-khach). Màu nâu = cần quyết; xám = đã chọn giữ. */
.chip-dg{display:inline-flex;align-items:center;margin-left:8px;font-weight:600;font-size:11.5px;line-height:1.5;font-family:inherit;
  border-radius:999px;padding:0 8px;cursor:pointer;vertical-align:1px;white-space:nowrap;
  border:1px solid #ecd3a4;background:#fdf5e6;color:#8a5a12}
.chip-dg:hover{border-color:#8a5a12}
.chip-dg.xam{border-color:var(--n300);background:var(--n100);color:var(--chu-mo);font-weight:500}
.dg-goi{margin-top:8px;border-radius:9px;padding:10px 12px;display:flex;gap:10px;align-items:flex-start;
  font-size:13px;line-height:1.5}
.dg-goi[hidden]{display:none}
.dg-goi .y{flex:1;min-width:0}
.dg-goi .nho{display:block;font-size:12px;opacity:.85}
.dg-goi .nuts{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.dg-goi.lam{background:var(--c50);border:1px solid var(--c100);color:#16384a}
.dg-goi.nau{background:#fdf5e6;border:1px solid #ecd3a4;color:#6b4510}
.dg-goi.xanh{background:#e3f5ea;border:1px solid #9bd3b2;color:#14532d}
.dg-goi.xam{background:var(--n50);border:1px solid var(--n200);color:var(--chu-mo)}
.dg-goi svg{flex:0 0 18px;margin-top:2px}
.dg-nut{font-weight:600;font-size:12.5px;font-family:inherit;border:1px solid var(--c500);background:#fff;color:var(--c700);
  border-radius:8px;padding:4px 11px;cursor:pointer;white-space:nowrap}
.dg-nut.chinh{background:var(--c600,#0b6a8f);border-color:var(--c600,#0b6a8f);color:#fff}
.dg-lk{border:0;background:none;color:var(--c700);font-weight:600;font-size:12px;font-family:inherit;cursor:pointer;padding:0;text-decoration:underline}
.dg-canh{margin-top:6px;font-size:12px;color:#8a5a12;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.dg-canh[hidden]{display:none}
.dg-canh button{font-weight:600;font-size:12px;font-family:inherit;border:1px solid #ecd3a4;background:#fff;color:#8a5a12;
  border-radius:7px;padding:2px 8px;cursor:pointer}

/* ======================================================================
   353 (06/10/2026) — Hồ sơ khách: tên + địa chỉ + điện thoại liền nhau,
   dải 6 con số, thân hai cột (hồ sơ trái · việc làm phải), 4 tab.
   ====================================================================== */
.kh-dau .kh-dinh{display:flex;align-items:flex-start;gap:10px 16px;flex-wrap:wrap}
.kh-dau .kh-dt{flex:1 1 440px;min-width:0}
.kh-dau .kh-ve{margin-bottom:4px}
.kh-dau .gd-ten{margin-bottom:0}
.kh-dau .gd-ten h4{flex:0 1 auto}
.kh-dau .a-lh{margin-top:6px;display:flex;flex-direction:column;gap:2px;font-size:13.5px}
.kh-dau .kh-m{display:inline-grid;grid-template-columns:14px minmax(0,1fr);gap:7px;align-items:baseline;min-width:0}
.kh-dau .kh-h{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 18px}
.kh-dau .kh-m .dt{font-weight:650;font-variant-numeric:tabular-nums}
.kh-dau .kh-m .dc{overflow-wrap:anywhere}
.kh-ic{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round;color:var(--n400);position:relative;top:2px}
.kh-dau .a-tao{margin-top:0;margin-left:auto;justify-content:flex-end}
.kh-dau .kh-dinh+*{margin-top:12px}
.kh-lk{border:0;background:none;padding:0;color:var(--chinh);font:inherit;font-weight:600;font-size:12.5px;cursor:pointer}
.kh-lk:hover{text-decoration:underline}
.kh-dso{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));margin:12px -16px -12px;border-top:1px solid var(--vien)}
.kh-dso>div{display:flex;flex-direction:column;padding:8px 16px 9px;border-left:1px solid var(--vien);min-width:0}
.kh-dso>div:first-child{border-left:0}
.kh-dso .l{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--chu-mo);min-height:18px}
.kh-dso .l .ic{margin-left:auto}
.kh-dso .v{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kh-dso .v.no,.kh-dso .v.qua-han{color:var(--do)}
.kh-dso .p{font-size:11.5px;color:var(--chu-mo);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kh-thanh{display:block;height:4px;border-radius:3px;background:var(--n100);overflow:hidden;margin:3px 0 1px}
.kh-thanh i{display:block;height:100%;border-radius:3px;background:#d97706}
.kh-thanh.vuot i{background:var(--do)}
.kh-2c{display:grid;grid-template-columns:340px minmax(0,1fr);gap:13px;align-items:start;margin-top:13px}
.kh-2c>*{min-width:0}
.kh-trai{display:flex;flex-direction:column;gap:12px}
.kh-trai .the{margin:0}
.kh-trai .the-dau{padding-top:9px;padding-bottom:9px}
.kh-trai .the-dau h2{font-size:13.5px}
.kh-trai .the-than{padding:9px 14px 11px}
.kh-trai .bh{display:flex;flex-direction:column;gap:1px}
.kh-trai .bh>div{display:grid;grid-template-columns:116px minmax(0,1fr);gap:8px;align-items:center;min-height:28px}
.kh-trai .bh>div[hidden]{display:none}
.kh-trai .bh .l{font-size:12.5px;line-height:1.35}
.kh-tt>div{display:grid;grid-template-columns:110px minmax(0,1fr);gap:8px;padding:2px 0;font-size:13px}
.kh-tt .l{color:var(--chu-mo);font-size:12.5px}
.kh-tt .v{overflow-wrap:anywhere}
.kh-thieu{background:var(--cam-nhat);border:1px solid #ecd3a4;color:var(--cam);border-radius:8px;padding:6px 10px;font-size:12.5px;margin-bottom:6px}
.kh-ghi{font-size:12px;color:var(--chu-mo);margin-top:6px}
.kh-nhan{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--chu-mo);margin:10px 0 3px}
.kh-trai .the-than>.kh-nhan:first-child,.kh-trai .the-than>div:first-child>.kh-nhan:first-child{margin-top:0}
.kh-gap{max-height:7.6em;overflow:hidden;white-space:pre-line}
.kh-gap.mo{max-height:none}
.kh-ch-d{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1px 8px;align-items:center;padding:6px 0;border-bottom:1px solid var(--n100);cursor:pointer;font-size:13px}
.kh-ch-d:last-child{border-bottom:0}
.kh-ch-d:hover b{color:var(--chinh)}
.kh-ch-d .g{grid-column:1/-1;font-size:12px;color:var(--chu-mo);font-variant-numeric:tabular-nums}
.kh-phai .a-thanh{margin-top:0}
.kh-xep>*+*{margin-top:12px}
@media (max-width:1180px){
  .kh-dso{grid-template-columns:repeat(3,minmax(0,1fr))}
  .kh-dso>div:nth-child(4){border-left:0}
  .kh-dso>div:nth-child(n+4){border-top:1px solid var(--vien)}
  .kh-2c{grid-template-columns:300px minmax(0,1fr)}
}
@media (max-width:900px){
  .kh-2c{grid-template-columns:1fr}
  .kh-dau .a-tao{margin-left:0;justify-content:flex-start;width:100%}
  .kh-dau .kh-dt{flex-basis:100%}
  .kh-dau .a-tao .b-sua{order:0;margin-left:0}
  .kh-dau .gd-ten h4{order:0;flex:0 1 auto;margin-top:0}
  .kh-dau .kh-ve{margin-left:0;margin-top:0;position:static}
}
@media (max-width:560px){
  .kh-dso{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kh-dso>div:nth-child(n){border-left:0;border-top:1px solid var(--vien)}
  .kh-dso>div:nth-child(even){border-left:1px solid var(--vien)}
  .kh-dso>div:nth-child(-n+2){border-top:0}
}
.kh-dau .kh-ve{border:0;background:none;box-shadow:none;padding:0;min-height:0;height:auto;color:var(--chinh);font-size:12.5px;font-weight:600;gap:4px}
.kh-dau .kh-ve:hover{text-decoration:underline;background:none}
.kh-dau .gd-ten h4 .oi{max-width:100%}

/* 355 (06/10/2026) — Bảng Danh sách khách gọn: chữ nhỏ vừa đủ đọc, ô đệm hẹp,
   tên dài xuống tối đa 2 dòng (cột tên không còn nở theo tên dài nhất) để
   màn hình chứa thêm cột. Chỉ áp trong #kh-bang. */
#kh-bang table{font-size:12px}
#kh-bang thead th{font-size:11px;padding:6px 8px;white-space:nowrap}
#kh-bang tbody td{padding:4px 7px;font-size:12px}
#kh-bang td.kh-ten{width:250px;min-width:170px;max-width:260px}
#kh-bang td.kh-ten b{display:block;white-space:normal;line-height:1.25;font-weight:600;overflow-wrap:anywhere} /* 357: không cắt chữ — tên dài xuống dòng, hiện đủ */
#kh-bang td.kh-ten .mo{font-size:11px}
#kh-bang td .mo[style]{font-size:10.5px !important}
#kh-bang .nhan{font-size:11px;padding-left:7px;padding-right:7px}
#kh-bang select{font-size:12px;max-width:150px}

/* 358 (06/10/2026) — Ô Nguồn trong bảng khách: đã có nguồn = chip màu xanh, không khung
   (rê chuột mới hiện mũi tên để đổi); chưa có = khung nét đứt màu cam. */
select.kh-o-nguon{-webkit-appearance:none;appearance:none;font:inherit;font-size:12px;line-height:1.4;max-width:150px;padding:2px 22px 2px 9px;border-radius:999px;cursor:pointer;background-repeat:no-repeat;background-position:right 8px center;background-size:8px 5px;transition:border-color .12s,background-color .12s}
select.kh-o-nguon.chua{border:1px dashed #d6a24a;background-color:var(--cam-nhat);color:var(--cam);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 5'%3E%3Cpath d='M1 1l3 3 3-3' fill='none' stroke='%238a5a12' stroke-width='1.4' stroke-linecap='round'/%3E%3C/svg%3E")}
select.kh-o-nguon.chua:hover{border-style:solid}
select.kh-o-nguon.co{border:1px solid transparent;background-color:var(--chinh-nhat);color:var(--chinh-dam);font-weight:600;padding-right:9px;background-image:none}
select.kh-o-nguon.co:hover,select.kh-o-nguon.co:focus{border-color:var(--c200);padding-right:22px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 5'%3E%3Cpath d='M1 1l3 3 3-3' fill='none' stroke='%2308536f' stroke-width='1.4' stroke-linecap='round'/%3E%3C/svg%3E")}
select.kh-o-nguon:focus{outline:none;box-shadow:0 0 0 3px rgba(11,106,143,.16)}
select.kh-o-nguon:disabled{opacity:.6;cursor:progress}
select.kh-o-nguon{field-sizing:content;min-width:0}
select.kh-o-nguon option{color:var(--chu);background:#fff;font-weight:400}

/* 362 — hộp Hồ sơ khách khi lập đơn (soan-chung.js hopHoSoKhach) */
.hop.hs-hop{width:min(680px, 100% - 28px);max-height:88vh;display:flex;flex-direction:column}
.hop.hs-hop .hop-than{flex:1 1 auto;min-height:0;overflow:auto;padding-top:6px}
.hs-dau{padding:4px 0 10px;border-bottom:1px solid var(--vien)}
.hs-ten{font-size:18px;font-weight:700;line-height:1.3}
.hs-ma{font-size:13px;color:var(--chu-mo,#6f7d8c);margin-top:3px}.hs-ma b{color:var(--chu,#1d2733);font-weight:600}
.hs-dong{display:grid;grid-template-columns:120px 1fr;gap:10px;padding:9px 0;border-bottom:1px solid var(--vien);font-size:14px}
.hs-nhan{color:var(--chu-mo,#6f7d8c);font-size:13px;padding-top:1px}
.hs-gt{min-width:0}
.hs-mo{color:var(--chu-mo,#6f7d8c);font-size:12.5px}
.hs-chip{display:inline-block;border-radius:10px;padding:0 8px;font-size:12px;line-height:19px;background:#eef1f5;color:#4b5867;margin:0 4px;vertical-align:1px}
.hs-chip.luc{background:#dcfae6;color:#085d3a;margin-left:0}
.hs-ds{display:flex;flex-direction:column;gap:3px}
.hs-dc-dong{display:flex;align-items:flex-start;gap:8px}.hs-dc-dong>span{flex:1}
.hs-ds-dc{display:flex;flex-direction:column;gap:8px}
.hs-the-dc{display:grid;grid-template-columns:22px 1fr auto;gap:8px;align-items:start;border:1px solid var(--vien);border-radius:8px;padding:8px 10px}
.hs-the-dc.md{border-color:#9fd8b6;background:#f6fdf9}
.hs-so{width:22px;height:22px;border-radius:50%;background:#eef1f5;color:#4b5867;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}
.hs-the-dc.md .hs-so{background:#dcfae6;color:#085d3a}
.hs-dc-chu{font-weight:600}
details.hs-gap{border-bottom:1px solid var(--vien)}
details.hs-gap>summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:120px 1fr auto;gap:10px;padding:9px 0;font-size:14px;align-items:center}
details.hs-gap>summary::-webkit-details-marker{display:none}
.hs-tom{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hs-mui{color:var(--chu-mo,#6f7d8c);font-size:11px;transition:transform .15s}
details.hs-gap[open] .hs-mui{transform:rotate(90deg)}
.hs-mo-ra{padding:0 0 10px 130px;font-size:13.5px}
.hs-tt{display:grid;grid-template-columns:96px 1fr;gap:3px 10px}.hs-tt>span{color:var(--chu-mo,#6f7d8c);font-size:13px}
ul.hs-luu{margin:0;padding:8px 10px 8px 26px;background:#fff8e6;border:1px solid #f3d38a;border-radius:8px}
ul.hs-luu li{margin-bottom:2px}
.hs-khac{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:13.5px}
@media (max-width:560px){.hs-dong,details.hs-gap>summary{grid-template-columns:1fr;gap:2px}.hs-mo-ra{padding-left:0}.hs-mui{display:none}}

/* 364 — nút hành động huỷ không lùi được: đỏ đặc (Duyệt huỷ đơn). Đi cặp với .nut-do (viền đỏ) đã có. */
.nut.nut-do-dac{background:var(--do,#c0342b);border-color:var(--do,#c0342b);color:#fff;font-weight:600}
.nut.nut-do-dac:hover{background:#a52a22;border-color:#a52a22;color:#fff}
.dx2-dn-huy{font-size:13px;color:var(--chu-mo,#56626f)}

/* 386 — nút ✕ của dải nhắc ẩn trong ngày (window.daiAn, app.js) — dùng chung mọi màn, luôn nằm cuối dải bên phải. */
.dai-an-nut{margin-left:auto;flex:none;border:0;background:transparent;color:inherit;opacity:.55;cursor:pointer;font:inherit;font-size:13px;line-height:1;padding:2px 6px;border-radius:4px}
.dai-an-nut:hover{opacity:1;background:rgba(0,0,0,.07)}

/* 654 — chip hạn giữ chỗ của đơn tạm (don-hang.js dhChipHanGiu / dhChipGiu654; Bảng đơn tự có .bd-chip-giu) */
.chip.dh-han-con{color:#1A6B3C}
.chip.dh-han-sap{color:#B06000}
.chip.dh-han-het{color:#B42318;font-weight:600}
.chip.dh-giu654{display:inline-flex;align-items:center;gap:4px}
.chip.dh-giu654 .nut{padding:1px 8px;font-size:12px}
/* 693 — Mua lại: ô đơn giá chép từ đơn cũ khác niêm yết hôm nay */
input.ml693-lech{background:#FFF4CC!important;border-color:#D9A400!important;box-shadow:0 0 0 1px #D9A400 inset}
/* 694 — khâu lập đơn: đủ/thiếu hàng, giá lần trước, công nợ, Tạo & Xác nhận (bản demo ?demo694) */
.dh694-phu{margin-top:4px;font-size:12px;line-height:18px;display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center}
.dh694-du{color:#1A6B3C}
.dh694-thieu{color:#B06000;font-weight:600}
.dh694-gia{border:1px dashed #0070F4;background:#F0F6FF;color:#0B4FA8;border-radius:10px;padding:0 8px;font-size:12px;line-height:18px;cursor:pointer}
.dh694-gia:hover{background:#DCEBFF}
.dh694-cn{font-size:13px;line-height:20px}
.dh694-vuot{margin-top:4px;color:#B42318;font-weight:600}
.dh694-nhac{margin-top:2px;color:#B06000}
.nut.dh694-xn{border-color:#5B3FD0;color:#5B3FD0;font-weight:600}
/* 695 — tồn dưới ô Số lượng · giá lần trước dưới ô Đơn giá · cảnh báo công nợ ở thanh đáy */
.dh694-ton{margin-top:3px;font-size:12px;line-height:16px;color:#667085;text-align:center;white-space:nowrap}
.dh694-ton.thieu{color:#B42318;font-weight:600}
.dh694-gia-goi{margin-top:3px}
.dh694-cn-day{font-size:13px;font-weight:600;color:#B42318;margin-right:auto;white-space:nowrap}
.dh694-cn-day.canh{color:#B06000}
.dh694-cn-day:empty{display:none}
/* 697 — khối điều kiện đơn gập 3 dòng (demo) · tồn KV xanh, giữ đỏ */
.dh694-ton{color:#667085}
.dh694-ton.thieu{color:#667085;font-weight:400}
.dh694-kv{color:#0070F4;font-weight:600}
.dh694-giu{color:#B42318;font-weight:600}
.dh694-thieu-so{color:#B42318;font-weight:700}
.dh697-cn{font-size:12.5px;color:#475467;margin-left:4px;white-space:nowrap}
.dh697-cn-no{font-weight:600;color:#344054}
.dh697-cn-qh{color:#B06000;font-weight:600}
.dh697-cn-vuot{color:#B42318;font-weight:700}
.dh697-xhd{font-size:12.5px;color:#475467;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:620px}
.dh697-xhd b{color:#101828;font-weight:600}
.dh-b-tt.dh697-hd > .v > .dh-b-xhd-sua{order:3}
.dh-b-tt.dh697-hd > .v > .dh-b-ghi{flex:1 1 100%;margin-top:0}
.dh697-tom{font-size:12.5px;color:#475467;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto}
.dh697-tom > span:first-child{font-weight:600;color:#344054}
.dh697-bang{flex:1 1 100%;order:3;margin-top:4px}
.dh697-bang > .dh-b-tt-luoi > .dh-b-tt:last-child{border-bottom:0}
.dh-b-tt.dh697-khac{border-bottom:0}
/* 697 — khối Giao hàng gập (demo) */
.dh697-an{display:none!important}
.dh697-giao{gap:0 28px}
.dh697-giao > .dh-b-h3,.dh697-cell > .dh-b-h3{grid-template-columns:118px minmax(0,1fr)}
.dh697-giao .dh-b-ngaynhanh{flex-wrap:wrap}
.dh697-noi .dh-tg{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:4px 14px;margin-top:6px}
.dh697-noi .dh-tg-dong{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.dh697-noi .dh-tg-ghi{flex:0 1 460px;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0}
.dh697-noi .dh-tg-ghi > .dh-tg-nhan,.dh697-noi .dh-tg-ghi > .dh-b-ghi,.dh697-noi .dh-tg-ghi > .dh-gh-hang{display:none}
.dh697-noi .dh-tg-ghi > input.o{flex:1 1 100%;min-width:0;height:30px!important;min-height:0}
.dh697-noi .dh-tg-ghi > div{flex:0 0 100%;font-size:12px}
.dh697-noi .dh-tg-ghi > div:empty{display:none}
.dh697-noi .dh-tg-sua{flex:1 1 100%}
.dh697-giao textarea.o{min-height:36px;height:36px}
.dh697-giao .dh-b-hep{max-width:none}
.dh697-han-cu{display:none}
/* 698 — khối 1: Hoá đơn xem/gọn, Thiết lập khác hiện hết; khối 3: giữ thứ tự hàng, gọn hơn (demo) */
.dh698-ct{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-start;padding:6px 0 2px}
.dh698-ct > .dh-b-xhd-sua{flex:1 1 100%}
.dh698-mo{font-size:12px;padding:0 4px;white-space:nowrap}
.dh698-nhan{font-size:12px;color:#667085;margin-left:6px;white-space:nowrap}
.dh698-nhan:first-child{margin-left:0}
.dh698-khac .v,.dh698-in .v{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}
.dh698-khac .v select.o,.dh698-khac .v input.o{height:28px;min-height:0;padding:0 6px;font-size:13px}
.dh-b-h3.dh698-h3{padding:5px 0;grid-template-columns:118px minmax(0,1fr)}
.dh698-h3 textarea.o{min-height:32px;height:32px;padding:5px 8px}
.dh698-h3 .dh-b-hep{max-width:none}
.dh698-h3 .dh-b-ngaynhanh{flex-wrap:wrap}.dh698-khac .v input.o,.dh698-khac .v select.o{width:auto;flex:0 0 auto}
.dh698-khac .v input[type=date].o{width:150px}
.dh-b-tt.dh698-khac,.dh-b-tt.dh698-in{align-items:center}
.dh-b .dh-b-h3.dh698-h3 textarea.o{min-height:32px;height:32px;padding:5px 8px}
.dh-b .dh-b-h3.dh698-h3 textarea.o:focus{min-height:64px;height:auto}
.dh698-h3 .v > select.o{width:auto;max-width:100%}.dh697-cn-ok{color:#12924f;font-weight:600}.dh700-hoc{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;margin-top:5px;font-size:12px}
.dh700-hoc .chip-han{font-size:12px;padding:1px 8px}/* 702 — chip Khách hay mua (đầu khối Hàng hoá, đơn mới) */
.dh702{margin:0 16px 10px;padding:8px 10px;border:1px solid #d6e4f5;background:#f5f9ff;border-radius:8px}
.dh702.gon{padding:5px 10px}
.dh702-dau{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12.5px}
.dh702-dau .mo{color:#667085}
.dh702-mo{margin-left:auto;font-size:12px}
.dh702-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px;align-items:center}
.dh702-chip{display:inline-flex;align-items:baseline;gap:6px;border:1px solid #b9cfee;background:#fff;border-radius:999px;padding:4px 11px;font-size:12.5px;cursor:pointer;color:#1d2939;max-width:100%}
.dh702-chip:hover:not(:disabled){border-color:#0070F4;background:#eef5ff}
.dh702-chip .dh702-ten{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dh702-chip .dh702-so{font-size:11.5px;color:#667085;white-space:nowrap;font-variant-numeric:tabular-nums}
.dh702-chip.co{opacity:.55;cursor:default;background:#f2f4f7}
.dh702-ca{border:1px solid #0070F4;background:#0070F4;color:#fff;border-radius:999px;padding:4px 12px;font-size:12.5px;font-weight:600;cursor:pointer}
.dh702-ca:disabled{opacity:.6}
.dh702 .mo{font-size:12px;color:#667085}/* 703 — chip Khách hay mua: tên + mã (hàng Vinh Lợi) + số lượng lần gần nhất, chữ rõ */
.dh702-chip{align-items:center;gap:7px;padding:5px 12px}
.dh702-chip .dh702-ten{color:#101828}
.dh702-chip .dh702-ma{font-size:12px;font-weight:600;color:#344054;background:#eef2f6;border-radius:4px;padding:1px 6px;letter-spacing:.02em}
.dh702-chip .dh702-sl{font-size:13px;font-weight:700;color:#0057c2;font-variant-numeric:tabular-nums;white-space:nowrap}
.dh702-chip.co .dh702-sl{color:#475467}/* 704 — DEMO (?demo702=1): tiêu đề 3 khối nổi bật */
.dh-b.dh704 .dh-b-the > .dh-b-dau{margin:-14px -16px 12px;padding:11px 16px;background:linear-gradient(180deg,#eef5ff,#e4eefb);border-bottom:1px solid #c9dcf3;border-radius:10px 10px 0 0;align-items:center}
.dh-b.dh704 .dh-b-hang > .dh-b-dau-pad{margin:0 0 10px;padding:11px 16px;background:linear-gradient(180deg,#eef5ff,#e4eefb);border-bottom:1px solid #c9dcf3;border-radius:10px 10px 0 0;align-items:center}
.dh-b.dh704 .dh-b-dau h3{font-size:15.5px;color:#0b3b6f;letter-spacing:.01em}
.dh-b.dh704 .dh-b-dau .dh-b-so{width:24px;height:24px;font-size:12.5px;margin-right:10px}
.dh-b.dh704 .dh-b-dau .dh-b-ghi{color:#475467}
/* 704 — Khách hay mua: chữ rõ, chip nhỏ xanh nhẹ, nút Lấy cả trên dòng tiêu đề */
.dh702-tieu{color:#0057c2;font-size:13.5px}
.dh702-hd{font-size:12px;color:#475467;font-style:italic}
.dh702-hd::before{content:'· ';font-style:normal}
.dh702-chips{gap:5px;margin-top:6px}
.dh702-chip{padding:2px 9px;font-size:12px;gap:5px;background:#e8f2ff;border-color:#c5dcf7}
.dh702-chip .dh702-ten{font-size:12px;font-weight:600}
.dh702-chip .dh702-ma{font-size:11px;padding:0 5px;background:#fff;color:#344054}
.dh702-chip .dh702-sl{font-size:12px}
.dh702-chip:hover:not(:disabled){background:#d4e6ff;border-color:#0070F4}
.dh702-ca{padding:3px 11px;font-size:12px}
.dh702-dau .dh702-ca{margin-left:auto}
.dh702-dau .dh702-ca ~ .dh702-mo{margin-left:10px}/* 707 — nút Chọn cả… đứng ngay sau "có thể click chọn nhanh", nút gọn/xem đẩy sang phải */
.dh702-dau .dh702-ca{margin-left:10px}
.dh702-dau .dh702-ca ~ .dh702-mo{margin-left:auto}/* 709 — chip hay mua (từ 2 đơn) xanh đậm hơn, chip mua 1 lần nhạt */
.dh702-chip.hay{background:#d6e8ff;border-color:#8fb8ec}
.dh702-chip.hay .dh702-ten{color:#0b3b6f}
.dh702-chip.mot{background:#f5f8fc;border-color:#dbe5f1}
.dh702-chip.mot .dh702-ten{font-weight:500;color:#475467}
.dh702-mot-nhan{font-size:11.5px;color:#667085;margin-left:6px}.dh702-ngat{flex-basis:100%;height:0}
.dh702-mot-nhan{margin-left:0}
/* =====================================================================
   807 — CHUẨN THỐNG NHẤT · ĐỢT 1 (anh Trọng 25/10/2026: "chốt như demo, live đi").
   Demo: bảng thiết kế "Demo chuẩn giao diện CRM Eco Pak"; đánh giá: tài liệu "Đánh giá tổng quan CRM Eco Pak".
   Một chỗ cho cả hệ thống — các màn KHÔNG tự đặt lại những thứ dưới đây nữa.
   (1) Cột lọc: mục đang chọn tô CẢ DÒNG (nền + chữ đậm + vạch trái), rê chuột có nền nhạt — thay vì chỉ màu ô tròn/ô tích.
   (2) Tiêu đề bảng: MỘT kiểu nền nhạt cho mọi bảng danh sách (thay 7 kiểu: xanh đậm Tài chính 738, xanh Mua hàng,
       xám Cẩm nang/Tồn nhà máy, trắng Bảng phép…). Chưa áp Bảng đơn (.bd-bang) và Xếp chuyến — màn đặc thù, Đợt 4.
   (3) Bước "ĐANG Ở ĐÂY" trên thanh tiến trình đơn: nhãn đặc xanh vắt trên mép thẻ, viền đậm + quầng sáng (demo).
   ===================================================================== */
html body .loc-cot .loc-muc{padding:4px 8px;margin:0 -8px 1px;border-radius:6px;transition:background .12s,color .12s}
html body .loc-cot .loc-muc:hover{background:var(--c50);color:var(--c800)}
html body .loc-cot .loc-muc:has(input:checked){background:var(--c100);color:var(--c800);font-weight:600;box-shadow:inset 3px 0 0 var(--c600)}
html body .loc-cot .loc-muc:has(input:checked) .dem{color:var(--c800);font-weight:600}
html body #than table:not(.bd-bang, #xep-chuyen, #xep-chuyen table) thead th{background:var(--n50)!important;color:var(--n600)!important;border-bottom:1px solid var(--vien)!important;border-right-color:var(--vien)!important;font-weight:600}
html body #than table:not(.bd-bang, #xep-chuyen, #xep-chuyen table) thead th:hover{background:var(--n100)!important;color:var(--chu)!important}
html body #than table:not(.bd-bang, #xep-chuyen, #xep-chuyen table) thead th[data-sap-huong]::after{color:var(--c600)!important}
html body #than table:not(.bd-bang, #xep-chuyen, #xep-chuyen table) thead tr.hang-tong th{background:var(--n25)!important;color:var(--chu)!important}
html body .dx2-b.hoat{background:var(--c25);border:2px solid var(--c600);box-shadow:0 0 0 4px var(--c100),0 6px 16px rgba(11,106,143,.18);padding-top:16px}
html body .dx2-b.hoat .t{color:var(--c600)}
html body .dx2-b .day{background:var(--c600);top:-12px;height:24px;padding:0 11px;font-size:11.5px;font-weight:700;letter-spacing:.05em;box-shadow:0 2px 6px rgba(11,106,143,.35)}
html body .dx2-b .day i{background:#fff!important;box-shadow:none!important}
/* 808 — hộp xác nhận trong trang (hoiXN807 trong app.js) thay confirm() của trình duyệt: hộp giữa màn, hẹp, thân giữ xuống dòng. */
@media (min-width:700px){.hop.xn807{width:min(460px,calc(100% - 28px))}}
.hop.xn807 .hop-than{padding-top:4px}
.xn807-than{white-space:pre-line;margin:0 0 8px;font-size:13.5px;line-height:1.55;color:var(--chu)}
/* =====================================================================
   808 — CHUẨN THỐNG NHẤT · ĐỢT 1b (anh Trọng 25/10/2026 "mình thấy ổn, bạn làm tiếp đi").
   (1) Chip trạng thái: 5 nghĩa màu, bỏ tím và nâu khỏi trạng thái — xám = chưa bắt đầu, xanh dương = đang làm,
       vàng = chờ / cần chú ý, xanh lá = xong, đỏ = lỗi / huỷ / hết hạn. Dáng chung: bo tròn, chữ 11,5px đậm 600.
   (2) Nút Xuất hoá đơn (774e): việc tiếp theo (Đẩy AMIS, Ghi số) = nút chính màu hệ thống; Rút, Sửa số, Xem HĐ = nút phụ;
       Sửa lỗi = viền đỏ. Thay quy ước 774e (mỗi việc một màu) theo demo đã chốt.
   (3) Hộp xác nhận: xem khối 808 phía trên (hoiXN807).
   Chưa áp Bảng đơn (bd-*) — màn đặc thù, Đợt 4. Trạng thái nào đổi màu ghi ở sổ tay 808.
   ===================================================================== */
html body :is(.dh-tt,.bg-tt,.hd-tt,.tt-ngan,.kd-cx-tt,.dx2-tt2){border-radius:999px;font-size:11.5px;font-weight:600}
html body .dtt-xac_nhan,html body .dtt-dang_giao{background:var(--tt-lam-n)!important;color:var(--tt-lam-c)!important}
html body .dtt-giao_du{background:var(--tt-vang-n)!important;color:var(--tt-vang-c)!important}
html body .ngtt-dang_soan,html body .ngtt-dang_giao{background:var(--tt-lam-n)!important;color:var(--tt-lam-c)!important}
html body .ngtt-cho_giao{background:var(--tt-vang-n)!important;color:var(--tt-vang-c)!important}
html body .tttt-chua_thu{background:var(--tt-xam-n)!important;color:var(--tt-xam-c)!important}
html body .tttt-da_coc{background:var(--tt-vang-n)!important;color:var(--tt-vang-c)!important}
html body .nac-da_soan{background:var(--tt-vang-n)!important;color:var(--tt-vang-c)!important}
html body .nac-dang_di,html body .nac-giao_mot_phan{background:var(--tt-lam-n)!important;color:var(--tt-lam-c)!important}
html body .bg-tt.tt-het_han{background:var(--tt-do-n)!important;color:var(--tt-do-c)!important}
html body .hd-tt.hd-dong{background:var(--tt-xam-n)!important;color:var(--tt-xam-c)!important}
html body #kho-ds .kd-cx-tt.dang,html body #kho-ds .kd-cx-tt.roi{background:var(--tt-lam-n)!important;color:var(--tt-lam-c)!important}
html body #hd-ds .hd-nut-day,html body #hd-ds .hd-nut-ghi:not(.nhat){background:var(--c600)!important;border-color:var(--c600)!important;color:#fff!important;font-weight:600}
html body #hd-ds .hd-nut-day:hover,html body #hd-ds .hd-nut-ghi:not(.nhat):hover{background:var(--c700)!important;border-color:var(--c700)!important}
html body #hd-ds .hd-nut-rut,html body #hd-ds .hd-nut-ghi.nhat{background:#fff!important;border-color:var(--vien-dam)!important;color:var(--chu)!important;font-weight:600}
html body #hd-ds .hd-nut-loi{background:#fff!important;border-color:var(--tt-do-c)!important;color:var(--tt-do-c)!important;font-weight:600}

html body #kho-ds .kd-cx-tt{border-radius:999px}
html body #kho-ds .kd-cx-tt.cho{background:var(--tt-vang-n)!important;color:var(--tt-vang-c)!important}
html body #kho-ds .kd-cx-tt.xong{background:var(--tt-luc-n)!important;color:var(--tt-luc-c)!important}

/* ======================================================================
811 — CHUẨN THỐNG NHẤT · Đợt 3: hồ sơ khách theo khuôn chi tiết của màn Đơn
(anh Trọng 25/10/2026: tiêu đề khối nền xanh đậm như Đơn; cột phụ bên PHẢI như Đơn và demo 807)
====================================================================== */
.gd811{display:flex;gap:8px;margin-top:12px;padding:14px 2px 4px;overflow-x:auto}
.gd811-o{position:relative;flex:1 1 0;min-width:108px;padding:8px 11px;border:1px solid var(--vien);border-radius:10px;background:#fff;display:flex;flex-direction:column;gap:3px;justify-content:center;min-height:38px}
.gd811-t{font-size:11.5px;font-weight:700;color:var(--n500,#6f7d8c);text-transform:uppercase;letter-spacing:.3px;white-space:nowrap}
.gd811-v{font-size:12px;line-height:1.35;color:var(--chu)}
.gd811-o.nay{flex-grow:2.6;min-width:230px;border:2px solid var(--c600);background:var(--c25);box-shadow:0 0 0 4px var(--c100),0 6px 16px rgba(11,106,143,.18);padding-top:15px}
.gd811-o.nay .gd811-t{color:var(--c600)}
.gd811-day{position:absolute;top:-12px;left:10px;display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 11px;border-radius:999px;background:var(--c600);color:#fff;font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;box-shadow:0 2px 6px rgba(11,106,143,.35)}
.gd811-day i{width:7px;height:7px;border-radius:50%;background:#fff}
/* 811b (anh Trọng 25/10: "màu tràn khung đậm quá, chỉ nên để màu nền của chữ… tinh chỉnh cho nhẹ nhàng thanh thoát hơn"):
   thanh tiêu đề khối nền TRẮNG, chỉ CHỮ tiêu đề nằm trong một nhãn nền xanh nhạt. Áp CẢ hồ sơ khách (.the-dau) và màn Đơn (.dx2-khoi-dau,
   CSS gốc 768 trong don-hang.js — ghi đè ở đây bằng html body). Nút trong thanh: viền xám như nút thường; nút chính giữ màu vàng của 768. */
.kh-2c .the>.the-dau,html body .dx2-khoi-dau{background:#fff;color:var(--chu);border-radius:9px 9px 0 0;border-bottom:1px solid var(--vien);min-height:40px;padding:7px 14px;align-items:center}
.kh-2c .the>.the-dau h2,html body .dx2-khoi-ten{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:6px;background:var(--c100);color:var(--c800);font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;line-height:1}
.kh-2c .the>.the-dau .chu-so{background:var(--n50,#f6f8fa);color:var(--chu-mo)}
html body .dx2-khoi-sub,.kh-2c .the>.the-dau .mo{color:var(--chu-mo)}
.kh-2c .the>.the-dau .nut,.kh-2c .the>.the-dau button.ic,html body .dx2-khoi-nut .nut,html body .dx2-khoi-nut button#dh-nut-thu.dx2-nhat{background:#fff;border:1px solid var(--vien-dam,#d4dae2);color:var(--chu);padding:4px 10px;font-size:12.5px;line-height:1.3;border-radius:7px;min-height:0;height:auto}
.kh-2c .the>.the-dau .nut.nut-chinh,.kh-2c .the>.the-dau .nut.chinh,html body .dx2-khoi-nut .nut.chinh,html body .dx2-khoi-nut .nut.nut-chinh,html body .dx2-khoi-nut button#dh-nut-thu:not(.dx2-nhat){background:#f59e0b;border-color:#f59e0b;color:#1f2a37;font-weight:700}
@media (min-width:901px){
.kh-2c{grid-template-columns:minmax(0,1fr) 320px}
.kh-2c>.kh-phai{order:-1}
.kh-dau .kh-dt{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:12px;align-items:center}
.kh-dau .kh-dt>.a-lh{grid-column:1 / -1}
.kh-dau .kh-ve{margin-bottom:0}
}

/* 813 — Đợt 4 mục C (anh Trọng 25/10/2026 chốt): thanh tab Việc của tôi (.v-tab) cùng kiểu tab B (806) như Tài chính, Giao hàng, Mua hàng.
   Chép đúng thông số trong menu-di.js (#md805css) — không thêm .v-tab vào THANH ở đó để menu rê chuột không gom tab Việc. */
html body #than .v-tab>button{border-radius:6px 6px 0 0;border-bottom-color:transparent!important;transition:background .12s,color .12s,box-shadow .12s}
html body #than .v-tab>button:hover:not(.hoat){background:var(--c50)!important;color:var(--c800)!important;box-shadow:inset 0 -3px 0 var(--c200)}
html body #than .v-tab>button.hoat{background:var(--c100)!important;color:var(--c800)!important;font-weight:700!important;box-shadow:inset 0 -3px 0 var(--c600)}

/* 813 — Đợt 4 mục B (anh Trọng 25/10/2026 chốt): cột việc cuối dòng Soạn và giao — "thao tác là nút viền liền, trạng thái là chip".
   Đọc mã mới thấy Đã soạn đủ / Thiếu… / Hàng rời kho / Giao là NÚT bấm thật (nút việc kế tiếp, màu theo bước — tím soạn, cam rời kho,
   lục giao, đỏ thiếu) nên GIỮ là nút + giữ màu; chỉ bỏ viền ĐỨT NÉT (Xếp chuyến →, ▶ Soạn, Xếp chuyến nhỏ) thành viền liền, và
   "Chờ trả trước" (chỉ là trạng thái, đang vẽ như ô viền đứt) thành chip đỏ. Gốc CSS ở kho.js — ghi đè tại đây. */
html body #kho-ds .kho-day .nut.nut-chinh.kv-xep,html body #kho-ds .kd-dong .nut.nut-chinh.kv-xep{border:1px solid #1A5C9C}
html body #kho-ds .kd-xep-som{border-style:solid}
html body #kho-ds .kd-giu{border:0;background:var(--tt-do-n);color:var(--tt-do-c);border-radius:999px;font-weight:600}

/* 892 — DẤU "ĐÃ LƯU" CHO Ô GÕ TAY (anh Trọng 31/10/2026: "cho mình 1 cái biểu tượng đã lưu sau khi sửa số liệu ở trong các ô có thể gõ tay").
   Một chỗ định nghĩa cho mọi màn (Chi phí tháng, Lương): thêm lớp vào chính ô nhập, biểu tượng nằm TRONG ô bên trái —
   không chèn phần tử mới nên không xô lệch lưới. Nếp chung của Google Sheets / Notion: đang lưu → đồng hồ xám, xong → tích xanh,
   lỗi → chấm than đỏ; rê chuột vào ô thấy giờ lưu. Gõ lại vào ô là dấu mất cho tới lần lưu sau. */
input.o-dang-luu,input.o-da-luu,input.o-loi-luu,textarea.o-dang-luu,textarea.o-da-luu,textarea.o-loi-luu{background-repeat:no-repeat!important;background-size:12px 12px!important;background-position:6px center!important;padding-left:22px!important}
textarea.o-dang-luu,textarea.o-da-luu,textarea.o-loi-luu{background-position:6px 9px!important}
input.o-dang-luu,textarea.o-dang-luu{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239aa3ad' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpolyline points='12 7 12 12 15 14'/%3E%3C/svg%3E")!important}
input.o-da-luu,textarea.o-da-luu{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231c7a45' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E")!important;border-color:#9fd4b4!important}
input.o-loi-luu,textarea.o-loi-luu{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23b4232a' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cline x1='12' y1='7' x2='12' y2='13'/%3E%3Cline x1='12' y1='16.5' x2='12' y2='16.6'/%3E%3C/svg%3E")!important;border-color:#e3a5a9!important}
.tt-luu892{font-size:12.5px;color:#1c7a45;font-weight:600;white-space:nowrap}
.tt-luu892.dang{color:var(--chu-mo);font-weight:500}
.tt-luu892.loi{color:var(--do)}