/* CLINIC-SCOPE: shared */
/* ============================================================================
   ex-component.css — CSS của component dùng chung (exComponent: ô chọn, phân trang, lưới, hàng đợi, bảng).
   Trước 30/09/2026 mỗi component tự chèn <style> bằng JS lúc tệp JS nạp; nay là tệp tĩnh (sửa ở ĐÂY, không
   sửa chuỗi CSS trong JS). _MainLayout nạp tệp này NGAY SAU grouppanel.css — đúng chỗ các <style> cũ rơi vào
   (JS trong <head> chạy trước khối style inline và selection.css) nên thứ tự cascade không đổi.
   Trang không qua _MainLayout mà nạp exComponent (shell, KSK, báo cáo…): JS tự gắn <link> tới tệp này.
   Rule theme tối đã gỡ (theme tối tắt cứng — docs/design.md §3.6).
   ============================================================================ */

/* ==== 01-format.js — trước đây chèn bằng <style id="opensource-ui-support-style"> ==== */
.input-invalid{border-color:#dc3545!important}.input-valid:not(.wd-o-loi){border-color:#198754!important}
[data-uppercase],input.viethoa-live{text-transform:uppercase}

/* ==== 03-dropdown.js — trước đây chèn bằng <style id="ex-dropdown-style"> ==== */
/* Dòng gợi ý của newDropDownSearch: tên bên trái, MÃ mờ bên phải.
   Nhân viên phòng khám tra theo mã nhiều hơn theo tên; mã đã có sẵn trong dữ liệu
   (buildDropdownSearchBlob) nên chỉ là việc hiển thị, không thêm truy vấn. */
.ts-search-opt{display:flex;align-items:baseline;gap:8px;min-width:0}
.ts-search-opt .ts-opt-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}
.ts-search-opt .ts-opt-ma{flex:0 0 auto;margin-left:auto;font-family:var(--font-mono,ui-monospace,Consolas,monospace);font-size:var(--fs-xs,11px);color:var(--muted-2,#94a3b8);letter-spacing:-.01em}
.ts-dropdown .active .ts-search-opt .ts-opt-ma{color:var(--muted,#475569)}

/* Trạng thái ĐANG CHỜ SERVER: 3 dòng skeleton thay vì danh sách trống đứng im.
   TomSelect gọi render.loading trong lúc load() chưa callback. */
.ts-skel{padding:8px 12px;display:flex;flex-direction:column;gap:8px}
.ts-skel i{display:block;height:11px;border-radius:var(--radius-sm,2px);background:linear-gradient(90deg,var(--surface-hover,#f1f5f9),var(--line,#e5e7eb),var(--surface-hover,#f1f5f9));background-size:200% 100%;animation:exDropSkel 1.1s linear infinite}
.ts-skel i:nth-child(2){width:78%}
.ts-skel i:nth-child(3){width:56%}
@keyframes exDropSkel{0%{background-position:200% 0}100%{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.ts-skel i{animation:none}}

/* Bôi vàng CHÍNH XÁC cụm từ người dùng gõ (bỏ dấu, không phân biệt hoa/thường).
   Thay cho highlight token mặc định của TomSelect vốn cắt vụn sai chữ (vd gõ
   "hàm rồng" lại bôi "phẩm"/"Trọng"). Xem exDropHighlightOption. */
:is(.ts-dropdown, .cd-add-dropdown) .ts-hl{background:var(--pal-amber-200, #fde68a);color:inherit;border-radius:2px;padding:0 1px}

/* Danh sách xổ theo control HisSite (22/10/2026):
   • dòng đang trỏ: nền xám nhạt (bootStrapCustom .ts-dropdown .active) + VẠCH MÀU 3px bên trái, chữ giữ
     nguyên độ đậm — trước đây chỉ in đậm nên chữ nhảy bề rộng mỗi lần rê chuột;
   • mục ĐANG CHỌN (TomSelect gắn .selected): chữ màu chủ đạo để mở lại là thấy ngay;
   • mỗi mục MỘT dòng, dài thì cắt "…" (title trên dòng cho đọc đủ); panel tự giãn theo nội dung
     (positionTomSelectDropdown) nên ít khi phải cắt. Lưới nhiều cột tự lo phần cắt từng ô. */
.ts-dropdown .option.active{box-shadow:inset var(--sel-nav-bar-w,3px) 0 0 var(--sel-nav-bar,#2563eb)}
.ts-dropdown .option.selected{color:var(--sel-nav-text,#1d4ed8)}
.ts-dropdown:not(.ts-grid) .option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Dropdown NHIỀU CỘT cho ô chọn độc lập (data-ddgrid / newDropDownGrid / cols của ô tải từ máy chủ).
   Cùng ngôn ngữ hình với bảng chọn thuốc trong lưới (.gtd-grid ở 04-grid.js): dải tiêu đề nền nhạt
   brand, hàng kẻ mảnh, số canh phải. --ts-grid-tpl / --ts-grid-minw do JS đặt theo cấu hình cột;
   panel hẹp hơn tổng bề rộng cột (màn điện thoại) thì cuộn ngang BÊN TRONG, tiêu đề cuộn theo. */
.ts-dropdown.ts-grid{font-size:var(--fs-sm,12px)}
.ts-dropdown.ts-grid .ts-dropdown-content{overflow-x:auto}
.ts-dropdown.ts-grid .ts-grid-headwrap{overflow:hidden;border-bottom:1px solid var(--line,#e5e7eb);background:var(--sel-nav-bg,#ecfdf3)}
.ts-dropdown.ts-grid .ts-grid-head,.ts-dropdown.ts-grid .ts-grid-row{display:grid;grid-template-columns:var(--ts-grid-tpl);column-gap:10px;align-items:center;min-width:var(--ts-grid-minw,0);box-sizing:border-box}
.ts-dropdown.ts-grid .ts-grid-head{padding:5px 12px;color:var(--sel-nav-text,#13503f);font-size:var(--fs-xs,11px);font-weight:var(--fw-semibold,600);text-transform:uppercase;letter-spacing:.03em}
.ts-dropdown.ts-grid .option.ts-grid-row{padding:6px 12px!important;border-bottom:1px solid var(--line,#e5e7eb);line-height:1.3}
/* Dòng đang trỏ của dropdown BẢNG = hàng dữ liệu (kiểu R, selection.css): nền --row-sel + vạch trái 4px như dòng chọn
   ở mọi lưới — thấy rõ khi đi ↑↓ (bản gợi ý tự vẽ cũ của Bán lẻ cũng tô nền). Hàng mờ (hết tồn) hiện rõ lại khi được trỏ. */
.ts-dropdown.ts-grid .option.ts-grid-row.active{background:var(--row-sel,#93c5fd);color:var(--row-sel-text,#172554);box-shadow:inset var(--row-sel-bar-width,4px) 0 0 var(--row-sel-bar,#2563eb);opacity:1}
.ts-dropdown.ts-grid .ts-grid-cell{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ts-dropdown.ts-grid .ts-grid-cell.r{text-align:right;font-variant-numeric:tabular-nums}
.ts-dropdown.ts-grid .ts-grid-cell.c{text-align:center}
.ts-dropdown.ts-grid .ts-grid-row.ts-check-option input[type=checkbox]{margin:0}
/* Chọn nhiều + nhiều cột: bootStrapCustom.css ép .ts-check-option về display:flex !important
   làm các ô dồn trái, lệch dải tiêu đề -> giữ lưới bằng độ đặc hiệu cao hơn. */
.ts-dropdown.ts-grid .option.ts-grid-row.ts-check-option{display:grid!important;gap:0 10px}
/* Bảng chọn TỰ DỰNG hàng (ICD, thuốc Kê đơn/Ngoại viện, Dự trù tủ trực; lookup lưới .gtd-grid có rule riêng bên dưới) — TomSelect gắn
   .option lên chính hàng. Trả padding về đúng của hàng (khớp dải tiêu đề) thay cho 9px 12px !important
   của bootStrapCustom (làm hàng cao gấp đôi, lệch cột 12px), và kẻ mảnh giữa các hàng. */
.ts-dropdown .option.cd-trow{border-bottom:1px solid var(--line,#e5e7eb)}
.ts-dropdown .option.cd-trow{padding:0!important}
/* Ô đã chọn của newDropDownGrid khi khai closedCols: các cột tóm tắt trên một dòng. */
.ts-grid-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ts-grid-item .ts-grid-sep{color:var(--muted-2,#94a3b8);padding:0 6px}

/* Ô chọn tải từ máy chủ theo trang: đang lấy trang kế thì cuối danh sách có một dòng báo. */
.ts-dropdown.ts-rp-dangtai .ts-dropdown-content::after{content:'Đang tải thêm…';display:block;padding:6px 12px;color:var(--muted,#475569);font-size:var(--fs-xs,11px)}

/* ==== 12-phantrang.js — trước đây chèn bằng <style id="phan-trang-style"> ==== */
.pt-bar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;flex:0 0 auto;
  padding:4px 8px;background:var(--surface,#fff);border-top:1px solid var(--line,#e5e7eb);
  color:var(--muted,#5b6b7b);font-size:var(--fs-sm,12px);}
.pt-bar button{font-family:inherit;cursor:pointer;}
.pt-bar .pt-nhay{background:var(--main-color,#055952);border:1px solid var(--main-color,#055952);
  color:var(--btn-on, #fff);font-weight:500;font-size:var(--fs-sm,12px);border-radius:var(--radius-sm,2px);
  padding:4px 10px;line-height:1;}
.pt-bar .pt-nhay:hover:not(:disabled){filter:brightness(1.15);}
.pt-bar .pt-nhay:disabled{background:var(--surface-3, #e9ecef);border-color:var(--line,#e5e7eb);
  color:var(--muted,#5b6b7b);cursor:default;filter:none;}
.pt-bar .pt-cd{display:flex;align-items:center;gap:5px;}
.pt-bar .pt-cd input{width:3.6rem;height:26px;padding:0 6px;border:1px solid var(--line,#e5e7eb);
  border-radius:var(--radius-sm,2px);background:var(--surface,#fff);color:var(--text,#1f2a36);
  font:inherit;-moz-appearance:textfield;}
.pt-bar .pt-cd input::-webkit-outer-spin-button,
.pt-bar .pt-cd input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
.pt-bar .pt-cd input::-webkit-calendar-picker-indicator{display:none!important;}
.pt-bar .pt-cd input:focus{outline:none;border-color:var(--main-color,#055952);
  box-shadow:0 0 0 2px var(--brand-sel,#d1fae0);}
.pt-bar .pt-giua{flex:1 1 auto;text-align:center;white-space:nowrap;}
.pt-bar .pt-so{display:flex;align-items:center;gap:3px;}
.pt-bar .pt-so button{min-width:28px;height:26px;padding:0 7px;border:1px solid var(--line,#e5e7eb);
  border-radius:var(--radius-sm,2px);background:var(--surface,#fff);color:var(--muted,#5b6b7b);
  font:inherit;font-size:var(--fs-sm,12px);line-height:1;}
.pt-bar .pt-so button:hover:not(.cur){background:var(--row-hover,#eef6f3);
  border-color:var(--main-color,#055952);color:var(--main-color,#055952);}
.pt-bar .pt-so button.cur{background:var(--main-color,#055952);border-color:var(--main-color,#055952);
  color:var(--btn-on, #fff);font-weight:700;cursor:default;}
.pt-bar .pt-so .pt-gap{padding:0 2px;color:var(--muted-2,#8a99a8);}
/* Màn hẹp: bỏ dãy số trang + nhãn chữ, giữ nút trước/sau và ô số dòng. */
@media (max-width:640px){
  .pt-bar .pt-so{display:none;}
  .pt-bar .pt-cd-nhan{display:none;}
}

/* ==== 04-grid.js — trước đây chèn bằng <style id="tabulator-grid-fixed-style"> ==== */
.tabulator{width:100%;height:100%;border-color:var(--grid-neutral-line, #d9dee5);font-size:13px;background:var(--surface, #fff);}
.tabulator .tabulator-header{border-bottom:2px solid var(--line,#e5e7eb);background:var(--panel-h,#f8fafc);}
/* "Không có dữ liệu": skin gốc #ccc chỉ 1.6:1 trên trắng. */
.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:var(--muted-2,#5f6f86);}
/* Thân lưới nhận tiêu điểm khi bấm dòng (Tabulator gắn tabindex=0 cho tableholder): trình duyệt bật duyệt bằng
   con trỏ văn bản (F7) thì vẽ vạch nháy giữa ô chỉ đọc như đang gõ được. Ẩn vạch ở ô thường, trả lại cho ô nhập. */
.tabulator .tabulator-tableholder{caret-color:transparent;}
.tabulator .tabulator-tableholder :is(input,textarea,select,[contenteditable]:not([contenteditable="false"])){caret-color:auto;}
/* Viền dọc BẬT (2026-08-13): trước đây tắt (border-right:0) nên lưới nhiều cột số khó dóng hàng.
   Dùng đúng token của wdgrid.css để hai lưới của hệ thống nhìn như một. Cột cuối bỏ viền cho gọn mép. */
.tabulator .tabulator-header .tabulator-col{background:var(--panel-h,#f8fafc);border-right:1px solid var(--line,#e5e7eb);}
.tabulator .tabulator-header .tabulator-col:last-child{border-right:0;}
.tabulator .tabulator-col-content{padding:0!important;}
.tabulator .grid-head-title{height:36px;display:flex;align-items:center;gap:5px;padding:0 10px;font-weight:700;color:var(--text,#111827);white-space:nowrap;overflow:hidden;}
.tabulator .grid-head-title .grid-title-text{overflow:hidden;text-overflow:ellipsis;}
.tabulator .grid-filter-line{height:45px;padding:5px 10px 8px 10px;border-top:0;display:flex;align-items:center;}
.tabulator .grid-filter-line input,.tabulator .grid-filter-line select{width:100%;height:34px;border:1px solid var(--line-strong, #cbd5e1);border-radius:4px;padding:4px 7px;font-size:13px;background:var(--surface, #fff);outline:none;}
.tabulator .grid-filter-line input:focus,.tabulator .grid-filter-line select:focus{border-color:#66afe9;box-shadow:0 0 0 2px rgba(102,175,233,.15);}
.tabulator .grid-filter-line.hidden{display:none!important;height:0!important;padding:0!important;overflow:hidden;}
.tabulator .filter-btn{border:0;background:transparent;color:var(--muted-2,#9ca3af);margin-left:auto;cursor:pointer;font-size:12px;padding:2px 4px;line-height:1;}
.tabulator .filter-btn.active{color:var(--main-color);font-weight:700;}
.tabulator .tabulator-row{border-bottom:1px solid var(--line,#e5e7eb);}
.tabulator .tabulator-row.tabulator-row-even{background:transparent;}
.tabulator .tabulator-cell{border-right:1px solid var(--line,#e5e7eb);padding:10px 10px;}
.tabulator .tabulator-row .tabulator-cell:last-child{border-right:0;}
.excel-filter-panel{position:absolute;z-index:99999;display:none;width:310px;background:var(--surface, #fff);border:1px solid var(--line-strong, #d0d7de);border-radius:var(--radius, 2px);box-shadow:0 12px 30px rgba(15,23,42,.2);padding:12px;}
.excel-filter-item{display:flex;align-items:center;gap:8px;padding:4px 2px;font-size:13px;cursor:pointer;}
.excel-filter-item input{margin:0;}
.row-dirty .tabulator-cell{font-style:italic;}
.row-new .tabulator-cell{font-weight:600;}
/* Chế độ worklist hai dòng, chỉ bật bằng layout:'twoline' hoặc twoLineAuto:true. */
.tabulator .g2l-cell{padding:9px 12px!important;}
.g2l-top{display:flex;align-items:baseline;gap:8px;}
/* Chữ dòng two-line: token thật (trước đây --text-1/2/3 không nơi nào khai -> luôn rơi fallback). */
.g2l-name{font-weight:600;color:var(--text,#1f2a36);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;min-width:0;}
.g2l-badge{flex:0 0 auto;}
.g2l-bot{display:flex;align-items:center;gap:10px;margin-top:3px;flex-wrap:wrap;}
.g2l-code{font-family:"SFMono-Regular",ui-monospace,"Cascadia Mono",Consolas,monospace;font-size:12px;color:var(--muted,#5b6b7b);font-weight:600;letter-spacing:-.02em;}
.g2l-meta{color:var(--muted-2,#8a99a8);font-size:var(--fs-xs, 11px);font-weight:500;}
.grid-twoline .tabulator-row .tabulator-cell{white-space:normal!important;overflow:visible!important;display:flex!important;flex-direction:column;justify-content:center;height:100%!important;}
.grid-twoline .tabulator-row.tabulator-selectable:not(.row-new):not(.row-dirty):hover{background:var(--row-hover,var(--brand-soft,#e1f4e8))!important;}
/* Trạng thái chọn do partCss/selection.css (kiểu R) lo — không khai lại ở đây. */
/* ==== Chế độ 1-click-sort / 2-click-lọc (opts.dblClickFilter) — giữ từ bản ClinicSolution khi merge nền VaiTro ==== */
/* Nút phễu mờ đi cho header thoáng, chỉ rõ khi di chuột vào cột hoặc khi cột ĐANG có lọc. */
.grid-dblfilter .tabulator-header .filter-btn{opacity:0;transition:opacity .12s;}
.grid-dblfilter .tabulator-header .tabulator-col:hover .filter-btn{opacity:1;}
.grid-dblfilter .tabulator-header .filter-btn.active{opacity:1;}
.grid-dblfilter .tabulator-header .tabulator-col[tabulator-field]{cursor:pointer;}
.grid-dblfilter .tabulator-header .grid-head-title{user-select:none;}
/* ===== 3 chế độ nhập: thanh chọn + form chèn dòng + hộp thoại ===== */
.dmg-modeswitch{display:inline-flex;align-items:center;gap:0;border:1px solid var(--line-strong, #cbd5e1);border-radius:var(--radius, 2px);overflow:hidden;background:var(--surface, #fff);margin-left:6px;}
.dmg-modeswitch>button{border:0;background:var(--surface, #fff);color:var(--muted, #475569);font-size:12px;font-weight:600;padding:5px 9px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;border-left:1px solid var(--grid-neutral-line, #e2e8f0);line-height:1;white-space:nowrap;}
.dmg-modeswitch>button:first-child{border-left:0;}
.dmg-modeswitch>button:hover{background:var(--surface-hover, #f1f5f9);color:var(--pal-slate-800, #1e293b);}
/* State .on do partCss/selection.css (kiểu S) lo; base nút giữ nguyên ở đây. */
.dmg-modeswitch>.lbl{font-size:11px;color:var(--muted-2, #94a3b8);padding:0 7px;font-weight:600;white-space:nowrap;}
.dm-rowdetail{background:var(--surface-soft, #f8fafc);border-top:2px solid var(--pal-blue-600, #2563eb);border-bottom:2px solid var(--pal-blue-600, #2563eb);}
.dmg-form{padding:12px 14px;}
.dmg-form .dmg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px 16px;}
.dmg-form .dmg-fld{display:flex;flex-direction:column;gap:3px;min-width:0;}
.dmg-form .dmg-fld>label{font-size:12px;font-weight:600;color:var(--muted, #475569);}
.dmg-form .dmg-fld>label .ro{font-size:var(--fs-xs, 11px);color:var(--muted-2, #94a3b8);font-weight:500;margin-left:4px;}
.dmg-form .dmg-in{width:100%;height:32px;border:1px solid var(--line-strong, #cbd5e1);border-radius:var(--radius, 2px);padding:4px 8px;font-size:13px;background:var(--surface, #fff);color:var(--grid-neutral-text, #1f2937);outline:none;box-sizing:border-box;}
.dmg-form .dmg-in:focus{border-color:var(--pal-blue-600, #2563eb);box-shadow:0 0 0 3px rgba(37,99,235,.12);}
.dmg-form .dmg-in:disabled{background:var(--surface-hover, #f1f5f9);color:var(--muted-2, #94a3b8);}
.dmg-form .dmg-chk{width:18px;height:18px;cursor:pointer;}
.dmg-form .dmg-chkwrap{display:flex;align-items:center;height:32px;}
.dmg-form .dmg-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--grid-neutral-line, #e2e8f0);}
.dmg-btn{border:1px solid var(--line-strong, #cbd5e1);background:var(--surface, #fff);color:var(--muted, #475569);border-radius:var(--radius, 2px);padding:7px 16px;font-size:13px;font-weight:600;cursor:pointer;}
.dmg-btn:hover{border-color:var(--pal-slate-400, #94a3b8);}
.dmg-btn.primary{background:var(--pal-blue-600, #2563eb);border-color:var(--pal-blue-600, #2563eb);color:var(--btn-on, #fff);}
.dmg-btn.primary:hover{background:var(--pal-blue-700, #1d4ed8);}
.dmg-modal-bg{position:fixed;inset:0;background:rgba(15,23,42,.42);z-index:99998;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;}
.dmg-modal{background:var(--surface, #fff);border-radius:var(--radius, 2px);box-shadow:0 24px 60px rgba(15,23,42,.32);width:min(760px,96vw);max-height:88vh;display:flex;flex-direction:column;overflow:hidden;}
.dmg-modal .dmg-mhead{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--grid-neutral-line, #e2e8f0);}
.dmg-modal .dmg-mhead b{font-size:var(--fs-lg, 16px);color:var(--grid-neutral-text, #1f2937);font-weight:700;flex:1;}
.dmg-modal .dmg-mx{border:0;background:transparent;color:var(--muted-2, #94a3b8);font-size:20px;cursor:pointer;line-height:1;padding:2px 6px;border-radius:var(--radius, 2px);}
.dmg-modal .dmg-mx:hover{background:var(--surface-hover, #f1f5f9);color:var(--grid-neutral-text, #1f2937);}
.dmg-modal .dmg-mbody{overflow:auto;padding:4px 2px;}
/* fb-20260729-185415-815: dropdown lookup trong lưới (editor dropdownColumn) append vào <body>
   → rule chung .ts-dropdown{min-width:100%} = 100% của body = tràn full trang. Bó lại: bỏ ép
   min-width, để inline width (= bề rộng ô control mà TomSelect tự set) có hiệu lực; chỉ chặn
   không vượt viewport. Chiều cao vẫn do .ts-dropdown-content{max-height} cuộn dọc. Chỉ dropdown
   có class gtd-dd (gắn trong tomSelectEditor) → mọi TomSelect khác KHÔNG đụng, 27 vai an toàn. */
.ts-dropdown.gtd-dd{min-width:0!important;max-width:92vw!important;}

/* ==== 04-grid.js — trước đây chèn bằng <style id="exgrid-css2"> ==== */
.tabulator-cell .grid-inline-editor.exgrid-so{text-align:right;}
.tabulator-group{background:var(--accent-weak,#f3e6c8);color:var(--text,#5b4630);font-weight:600;border-radius:0;}
.exgrid-hovcol .tabulator-col:not(:hover) .filter-btn{opacity:0;}
.exgrid-hovcol .tabulator-col:not(:hover) .tabulator-col-sorter{opacity:0;}
.exgrid-hovcol .tabulator-col-sortable[aria-sort="ascending"] .tabulator-col-sorter,
.exgrid-hovcol .tabulator-col-sortable[aria-sort="descending"] .tabulator-col-sorter{opacity:1;}
/* fb-20260801-112659-166: mặc định giấu mũi tên sort; chỉ hiện khi cột đang được sort */
.tabulator .tabulator-col .tabulator-col-sorter{opacity:0;}
.tabulator .tabulator-col-sortable[aria-sort="ascending"] .tabulator-col-sorter,
.tabulator .tabulator-col-sortable[aria-sort="descending"] .tabulator-col-sorter{opacity:1;}
.exgrid-hdr-colpop{max-height:260px;overflow:auto;border-top:1px solid var(--line,#e5e7eb);margin-top:4px;padding-top:4px;}
.exgrid-hdr-colitem{display:flex;align-items:center;gap:8px;padding:4px 10px;font-size:13px;color:var(--text,#1f2937);cursor:pointer;}
.exgrid-hdr-colitem:hover{background:var(--accent-weak,#f1f5f9);}
.exgrid-hdr-colitem input{margin:0;}
.exgrid-hdr-colitem label{display:flex;align-items:center;gap:8px;flex:1;min-width:0;margin:0!important;cursor:pointer;}
.exgrid-hdr-colitem label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.exgrid-hdr-menu .exgrid-hdr-colitem button{width:24px!important;min-width:24px!important;height:24px!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center;flex:none;}
.exgrid-hdr-colitem button:disabled{opacity:.3;cursor:default;}
.exgrid-hdr-colpop{min-width:240px;}
.exgrid-hdr-menu .exgrid-hdr-colitem input[type="text"]{width:100%;min-width:0;height:24px!important;padding:0 4px!important;border:1px solid var(--line);font:inherit;}
.exgrid-colchooser{position:relative;display:flex;justify-content:flex-end;padding:2px 4px;background:transparent;}
.exgrid-colchooser-btn{border:1px solid var(--line,#cbd5e1);background:var(--panel,#fff);color:var(--text,#475569);border-radius:0;padding:3px 8px;font-size:12px;cursor:pointer;line-height:1.4;}
.exgrid-colchooser-btn:hover{border-color:var(--accent,#2563eb);color:var(--accent,#2563eb);}
.exgrid-cc-popup{position:absolute;right:0;top:100%;z-index:9999;min-width:200px;max-height:320px;overflow:auto;background:var(--panel,#fff);border:1px solid var(--line,#cbd5e1);border-radius:0;box-shadow:0 8px 20px rgba(0,0,0,.15);padding:4px;}
.exgrid-cc-title{font-weight:600;color:var(--text,#1f2937);padding:2px 4px;font-size:12px;}
.exgrid-cc-actall{display:flex;gap:4px;padding:2px 4px 4px;border-bottom:1px solid var(--line,#e2e8f0);margin-bottom:4px;}
.exgrid-cc-actall button{border:1px solid var(--line,#cbd5e1);background:var(--panel,#fff);color:var(--text,#475569);border-radius:0;padding:2px 6px;font-size:11px;cursor:pointer;}
.exgrid-cc-actall button:hover{border-color:var(--accent,#2563eb);color:var(--accent,#2563eb);}
.exgrid-cc-item{display:flex;align-items:center;gap:6px;padding:2px 4px;font-size:12px;color:var(--text,#1f2937);cursor:pointer;}
.exgrid-cc-item input{margin:0;}
.tabulator .filter-btn{display:none;}
.exgrid-show-funnel .filter-btn{display:inline-flex!important;}
.tabulator .tabulator-header-filter{display:none;}
.exgrid-show-funnel .tabulator-header-filter{display:block!important;}
.exgrid-hdr-menu{position:fixed;z-index:100000;min-width:190px;background:var(--panel,#fff);border:1px solid var(--line,#d0d7de);box-shadow:0 8px 24px rgba(15,23,42,.18);padding:4px;display:none;}
.exgrid-hdr-menu button{display:flex;align-items:center;gap:8px;width:100%;border:0;background:transparent;text-align:left;padding:6px 10px;font-size:13px;color:var(--text,#1f2937);cursor:pointer;line-height:1.3;}
.exgrid-hdr-menu button:hover{background:var(--accent-weak,#f1f5f9);}
.exgrid-hdr-menu hr{border:0;border-top:1px solid var(--line,#e5e7eb);margin:4px 0;}
/* Menu 2 tầng: cột icon cố định bề rộng để nhìn lướt; mũi tên › báo mục có menu con. */
.exgrid-hdr-menu button>i{width:16px;text-align:center;flex:none;color:var(--muted,#64748b);}
.exgrid-hdr-menu button>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.exgrid-hdr-menu em.mui{margin-left:auto;font-style:normal;opacity:.55;font-size:var(--fs-lg, 16px);line-height:1;}
.exgrid-hdr-menu .exgrid-hdr-colitem button>i{width:auto;color:inherit;}
.exgrid-hdr-menucon{min-width:210px;}
/* Hộp “Tìm trên tất cả cột” */
.exgrid-tim-tatca{position:fixed;z-index:100000;display:flex;gap:6px;align-items:center;padding:7px;width:260px;background:var(--panel,#fff);border:1px solid var(--line,#d0d7de);box-shadow:0 8px 24px rgba(15,23,42,.18);}
.exgrid-tim-tatca input{flex:1;min-width:0;height:28px;padding:2px 8px;font-size:13px;border:1px solid var(--line,#cbd5e1);background:var(--panel,#fff);color:var(--text,#1f2937);outline:none;}
.exgrid-tim-tatca input:focus{border-color:var(--brand,#1d6f5c);}
.exgrid-tim-tatca .xoa{height:28px;padding:0 9px;font-size:12px;cursor:pointer;border:1px solid var(--line,#cbd5e1);background:transparent;color:var(--text,#1f2937);}
.exgrid-tim-tatca .dem{font-size:12px;color:var(--muted,#64748b);white-space:nowrap;min-width:38px;text-align:right;}
.exgrid-tim-tatca .dem.rong{color:var(--btn-danger, #dc2626);font-weight:600;}
/* Phễu Excel — ba thẻ Giá trị / Điều kiện / Tô màu. */
.excel-filter-panel{width:290px;padding:0;border:1px solid var(--line,#d5dfea);border-radius:0;background:var(--panel,#fff);color:var(--text,#1f2937);box-shadow:0 10px 30px rgba(0,0,0,.18);}
.excel-filter-panel>.d-flex:first-child{padding:9px 12px;margin:0!important;border-bottom:1px solid var(--line,#d5dfea);background:var(--panel-h,#f6f8fb);}
.excel-filter-panel .filter-title{font-size:13px;font-weight:700;}
.excel-filter-panel .btn-close-filter{border:0;background:transparent;font-size:20px;line-height:1;cursor:pointer;color:inherit;opacity:.6;padding:0 2px;}
.excel-filter-panel .btn-close-filter:hover{opacity:1;}
.excel-filter-panel .exgrid-fl-tabs{display:flex;border-bottom:1px solid var(--line,#d5dfea);}
.excel-filter-panel .exgrid-fl-tabs .tab{flex:1;border:0;background:transparent;padding:8px 4px;font-size:var(--fs-sm, 12px);cursor:pointer;color:inherit;opacity:.72;border-bottom:2px solid transparent;}
.excel-filter-panel .exgrid-fl-tabs .tab:hover{opacity:1;background:var(--panel-h,#f6f8fb);}
.excel-filter-panel .exgrid-fl-tabs .tab.active{border-bottom-color:var(--brand,#1d6f5c);font-weight:700;color:var(--brand,#1d6f5c);opacity:1;}
.excel-filter-panel .exgrid-fl-pane{padding:10px 12px 2px;}
.excel-filter-panel .exgrid-fl-pane .form-control{height:30px;border-radius:0;font-size:13px;border:1px solid var(--line,#cbd5e1);background:var(--panel,#fff);color:inherit;padding:2px 9px;}
.excel-filter-panel .exgrid-fl-pane .form-control:focus{outline:none;border-color:var(--brand,#1d6f5c);box-shadow:none;}
.excel-filter-panel .filter-values{max-height:210px;overflow:auto;border:1px solid var(--line,#d5dfea);padding:4px 6px;}
.excel-filter-panel .excel-filter-item{padding:3px 4px;font-size:var(--fs-sm, 12px);}
.excel-filter-panel .excel-filter-item:hover{background:var(--panel-h,#eef3f9);}
.excel-filter-panel .exgrid-fl-note{font-size:11px;color:var(--muted,#64748b);margin-top:7px;line-height:1.4;}
.excel-filter-panel .exgrid-fl-chk{display:flex;align-items:flex-start;gap:7px;font-size:var(--fs-sm, 12px);cursor:pointer;margin-bottom:0;}
.excel-filter-panel .exgrid-fl-chk input{margin:2px 0 0;}
.excel-filter-panel .exgrid-fl-mau{display:flex;gap:7px;}
.excel-filter-panel .o-mau{width:30px;height:24px;border:1px solid rgba(0,0,0,.18);cursor:pointer;position:relative;padding:0;}
.excel-filter-panel .o-mau:hover{border-color:rgba(0,0,0,.4);}
.excel-filter-panel .o-mau.chon{border:2px solid var(--brand,#1d6f5c);}
.excel-filter-panel .o-mau.chon::after{content:'✓';position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:#111;}
.excel-filter-panel .btn-bo-mau{width:100%;border-radius:0;font-size:var(--fs-sm, 12px);height:28px;padding:0;}
.excel-filter-panel>.d-flex:last-child{padding:10px 12px;margin:0!important;border-top:1px solid var(--line,#d5dfea);background:var(--panel-h,#f6f8fb);}
.excel-filter-panel .btn-apply-filter,.excel-filter-panel .btn-clear-filter{border-radius:0;height:30px;font-size:var(--fs-sm, 12px);padding:0 14px;}
.excel-filter-panel .btn-apply-filter{flex:1;}
/* Panel lọc — kéo tiêu đề để di chuyển, kéo góc phải-dưới để phóng to; panel rộng ra thì các ô
   lọc tự dàn nhiều cột (lưới auto-fill). */
.exgrid-panel-loc{position:absolute;right:14px;top:52px;z-index:9500;width:280px;min-width:220px;min-height:150px;max-width:92vw;max-height:85vh;resize:both;overflow:hidden;display:flex;flex-direction:column;background:var(--panel,#fff);color:var(--text,#1f2937);border:1px solid var(--line,#d5dfea);box-shadow:0 8px 26px rgba(0,0,0,.18);}
.exgrid-panel-loc .hd{display:flex;align-items:center;gap:8px;padding:7px 10px;cursor:move;user-select:none;border-bottom:1px solid var(--line,#d5dfea);background:var(--panel-h,#f6f8fb);font-size:13px;}
.exgrid-panel-loc .hd b{flex:1;}
.exgrid-panel-loc .hd .g{border:0;background:transparent;font-size:13px;line-height:1;cursor:help;color:inherit;opacity:.65;padding:0 2px;}
.exgrid-panel-loc .hd .x{border:0;background:transparent;font-size:var(--fs-xl, 20px);line-height:1;cursor:pointer;color:inherit;}
.exgrid-panel-loc .bd{flex:1;overflow:auto;padding:6px 10px;display:grid;grid-template-columns:repeat(auto-fill,minmax(185px,1fr));gap:2px 10px;align-content:start;}
.exgrid-panel-loc label{display:block;margin:0 0 6px;min-width:0;}
.exgrid-panel-loc label>span{display:block;font-size:var(--fs-xs, 11px);color:var(--muted,#64748b);margin-bottom:2px;}
.exgrid-panel-loc .pl-ctl{display:flex;flex-wrap:wrap;gap:2px;}
.exgrid-panel-loc .pl-op{width:100%;height:26px;padding:1px 4px;font-size:12px;border:1px solid var(--line,#cbd5e1);background:var(--panel,#fff);color:inherit;}
.exgrid-panel-loc .pl-ctl input{flex:1 1 60px;min-width:0;height:30px;padding:3px 8px;font-size:13px;border:1px solid var(--line,#cbd5e1);background:var(--panel,#fff);color:inherit;}
.exgrid-panel-loc .pl-op:focus,.exgrid-panel-loc .pl-ctl input:focus{outline:none;border-color:var(--brand,#1d6f5c);}
.exgrid-panel-loc .ft{padding:7px 10px;border-top:1px solid var(--line,#d5dfea);}
.exgrid-panel-loc .ft .xoa{width:100%;height:28px;cursor:pointer;font-size:var(--fs-sm, 12px);border:1px solid var(--line,#d5dfea);background:transparent;color:inherit;}
.exgrid-panel-loc .ft .xoa:hover{border-color:var(--brand,#1d6f5c);}
.exgrid-panel-loc .pl-help{padding:8px 10px;border-top:1px solid var(--line,#d5dfea);font-size:12px;line-height:1.45;background:var(--panel-h,#f6f8fb);}
.exgrid-panel-loc .pl-help b{display:block;margin-bottom:4px;}
.exgrid-panel-loc .pl-help ol{margin:0;padding-left:18px;}
/* Ẩn bảng nhóm mà GIỮ nhóm -> 2 icon Mở/Thu gọn ở góc phải header. */
.grid-group-corner{position:absolute;right:2px;transform:translateY(-50%);z-index:20;display:flex;align-items:center;gap:2px;}
.grid-group-corner .grid-group-iconbtn,.grid-group-corner .grid-group-spin{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:1px solid var(--line,#cbd5e1);background:var(--panel,#fff);color:var(--brand,#1d6f5c);font-size:12px;cursor:pointer;line-height:1;}
.grid-group-corner .grid-group-spin{border:0;background:transparent;}
.grid-group-corner .grid-group-iconbtn:hover{background:var(--accent-weak,#eef4ff);}
/* Kéo chip trong bảng nhóm để đổi thứ tự nhóm. */
.grid-group-chip{cursor:grab;user-select:none;}
.grid-group-chip.dragging{opacity:.45;cursor:grabbing;}
.grid-group-chip.drop-before{box-shadow:-3px 0 0 0 var(--brand,#1d6f5c);}
.grid-group-chip.drop-after{box-shadow:3px 0 0 0 var(--brand,#1d6f5c);}
.tabulator .tabulator-header{background:var(--panel-h,#f8fafc);}
.tabulator .tabulator-header .tabulator-col{background:var(--panel-h,#f8fafc);}
.tabulator .grid-head-title{height:35px;}
.tabulator .tabulator-row:hover{background:color-mix(in srgb, var(--accent,#2563eb) 6%, var(--surface, #fff));}
/* Trạng thái chọn do partCss/selection.css (kiểu R) lo — không khai lại ở đây. */
.tabulator .tabulator-cell{padding:6px 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* Dòng SỬA DỞ CHƯA LƯU (2026-08-13): chữ nghiêng thôi quá kín, người nhập không biết dòng nào còn
   treo. Thêm vệt cam mép trái + nền nhạt -> nhìn phát ra ngay; lưu xong class row-dirty tự gỡ.
   Dòng đang sửa LUÔN là dòng selected, mà selection.css (kiểu R) khai nền/vạch chọn kèm
   !important cho cả .tabulator-selected.row-dirty -> nền teal chọn thắng, vệt cam chỉ còn thấy
   khi dòng KHÔNG được chọn. background vẫn cần !important để thắng zebra/hover cục bộ. */
.tabulator .tabulator-row.row-dirty{box-shadow:inset 3px 0 0 var(--warn-bar,#d97706);background:var(--row-dirty-bg,rgba(217,119,6,.09))!important;}
.tabulator .tabulator-row.row-new:not(.row-dirty){box-shadow:inset 3px 0 0 var(--brand,#1d6f5c);}
/* Dropdown lookup dạng BẢNG (dropdownColumn có opts.cols) — bám form chọn thuốc/vật tư BVST6:
   một dải tiêu đề dính trên đầu + mỗi lựa chọn là một hàng nhiều cột. Chỉ .gtd-grid mới đổi,
   dropdown lookup một cột của các màn khác giữ nguyên. --gtd-tpl do JS đặt theo cấu hình cột. */
.ts-dropdown.gtd-grid{font-size:var(--fs-sm,12px);}
.ts-dropdown.gtd-grid .gtd-h,.ts-dropdown.gtd-grid .gtd-r{display:grid;grid-template-columns:var(--gtd-tpl);gap:8px;align-items:center;}
.ts-dropdown.gtd-grid .gtd-h{padding:5px 10px;background:var(--brand-soft,#ecfdf3);color:var(--brand,#1d6f5c);font-size:var(--fs-xs,11px);font-weight:var(--fw-semibold,600);text-transform:uppercase;letter-spacing:.03em;border-bottom:1px solid var(--line,#e5e7eb);}
/* .option CHÍNH LÀ hàng .gtd-r (TomSelect gắn class lên gốc template) -> padding đặt ở đây, khớp dải tiêu đề. */
.ts-dropdown.gtd-grid .option{padding:5px 10px!important;border-bottom:1px solid var(--line,#eef1f5);}
.ts-dropdown.gtd-grid .gtd-r{line-height:1.3;}
.ts-dropdown.gtd-grid .gtd-h>span,.ts-dropdown.gtd-grid .gtd-r>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;}
.ts-dropdown.gtd-grid .gtd-h>span.r,.ts-dropdown.gtd-grid .gtd-r>span.r{text-align:right;font-variant-numeric:tabular-nums;}
.ts-dropdown.gtd-grid .gtd-r>span.b b{color:var(--brand-dark,#13503f);}

/* ==== 04-grid.js — trước đây chèn bằng <style id="exgrid-cellpop-style"> ==== */
.exgrid-cellpop-bg{position:fixed;inset:0;z-index:100001;background:rgba(15,23,42,.28);display:flex;align-items:center;justify-content:center;padding:24px;}
.exgrid-cellpop{background:var(--surface,var(--panel,#fff));color:var(--text,#0f172a);border:1px solid var(--line,#d0d7de);border-radius:var(--radius,2px);box-shadow:var(--shadow-lg,0 12px 40px rgba(0,0,0,.24));width:min(620px,94vw);max-height:82vh;display:flex;flex-direction:column;}
.exgrid-cellpop-head{display:flex;align-items:center;gap:4px;padding:6px 10px;border-bottom:1px solid var(--line,#e5e7eb);background:var(--surface-2,var(--panel-h,#f6f8fb));}
.exgrid-cellpop-head b{flex:1;min-width:0;font-size:13px;font-weight:var(--fw-semibold,600);color:var(--text,#0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.exgrid-cellpop-x{border:0;background:transparent;color:var(--muted,#475569);font-size:var(--fs-xl, 20px);line-height:1;cursor:pointer;padding:2px 6px;}
.exgrid-cellpop-x:hover{color:var(--text,#0f172a);}
.exgrid-cellpop-x:focus-visible,.exgrid-cellpop-btn:focus-visible{outline:2px solid var(--brand,#055952);outline-offset:1px;}
.exgrid-cellpop-body{padding:8px;flex:1;min-height:0;display:flex;}
.exgrid-cellpop-ta{width:100%;min-height:180px;resize:vertical;border:1px solid var(--line,#cbd5e1);border-radius:var(--radius-sm,2px);padding:6px 8px;font-size:13px;font-family:inherit;line-height:1.5;color:var(--text,#0f172a);background:var(--surface,#fff);outline:none;box-sizing:border-box;}
.exgrid-cellpop-ta:focus{border-color:var(--brand,#055952);box-shadow:var(--focus-ring,0 0 0 3px rgba(37,99,235,.24));}
.exgrid-cellpop-ta[readonly]{background:var(--surface-2,#f6f8fb);}
.exgrid-cellpop-foot{display:flex;justify-content:flex-end;gap:6px;padding:6px 8px;border-top:1px solid var(--line,#e5e7eb);}
.exgrid-cellpop-btn{border:1px solid var(--line,#cbd5e1);background:var(--surface,#fff);color:var(--text,#0f172a);border-radius:var(--radius-sm,2px);padding:5px 14px;font-size:13px;font-weight:var(--fw-semibold,600);cursor:pointer;}
.exgrid-cellpop-btn:hover{border-color:var(--brand,#055952);}
.exgrid-cellpop-btn.primary{background:var(--brand,#055952);border-color:var(--brand,#055952);color:var(--btn-on, #fff);}

/* ==== 06-worklist.js — trước đây chèn bằng <style id="worklist-table-style"> ==== */
.wl-grid.tabulator {
    overflow:hidden; border:0; background:var(--surface); font-family:var(--font-ui); font-size:var(--fs-sm);
    /* Dòng chọn theo chuẩn chung --row-sel* (design-tokens.css), KHÔNG ghi đè màu riêng:
       bản pha 12% cũ quá nhạt, lẫn với sọc/hover nên không nhận ra dòng đang chọn. */
    --cs-table-row-h:var(--h-grid-compact);
}
.wl-grid.tabulator .tabulator-placeholder { justify-content:flex-start; }
.wl-grid.tabulator .tabulator-header { height:auto !important; border-top:0; border-bottom:1px solid var(--grid-neutral-line) !important; }
.wl-grid.tabulator .tabulator-header, .wl-grid.tabulator .tabulator-col { background:var(--grid-neutral-header); color:var(--grid-neutral-text); border-color:var(--grid-neutral-line); }
.wl-grid.tabulator .tabulator-col-title { height:auto; }
.wl-grid.tabulator .grid-head-title { height:calc(var(--h-grid-compact) - 1px); padding:0 var(--sp-2); color:inherit; }
.wl-grid.tabulator .tabulator-row { min-height:var(--h-grid-compact); background:var(--surface); border-bottom:1px solid var(--grid-neutral-line); cursor:pointer; }
.wl-grid.tabulator .tabulator-row:nth-child(even) { background:color-mix(in srgb, var(--grid-neutral-line) 26%, var(--surface)); }
.wl-grid.tabulator .tabulator-cell { height:calc(var(--h-grid-compact) - 1px); line-height:1.5; padding:var(--sp-1) var(--sp-2); border-right:1px solid var(--grid-neutral-line); color:var(--grid-neutral-text); }
.wl-grid.tabulator .tabulator-cell:last-child { border-right:0; }
.wl-grid.tabulator .tabulator-row:hover:not(.tabulator-selected) { background:color-mix(in srgb, var(--btn-primary) 6%, var(--surface)); }
.wl-grid.tabulator .tabulator-row.wl-priority:not(.tabulator-selected) { background:var(--badge-warn-bg,#fffbeb); }
.wl-grid.tabulator .tabulator-row.wl-capcuu:not(.tabulator-selected) { background:var(--st-danger-bg,#fef2f2); }
.wl-grid .wl-priority-mark { color:var(--badge-warn-text,#92400e); }
.wl-grid .wl-capcuu-mark { color:var(--st-danger-text,#b91c1c); }
/* Chỉ ô MANG DẤU đậm lên, không đậm cả dòng (dòng đã có nền riêng). */
.wl-grid .wl-priority-mark, .wl-grid .wl-capcuu-mark { font-weight:var(--fw-semibold,600); }
.wl-grid .wl-wait-clock, .wl-grid .wl-money { font-family:var(--font-mono); font-variant-numeric:tabular-nums; }
/* Danh sách chia NHÓM kiểu HisSite (06-worklist.js danhSachNhom) — port khung .blv-qgrp-* (banlamviec-2.css, khối
   nhomTheo Vai18) của engine bàn làm việc, quy về token Clinic. Mỗi nhóm: dải tiêu đề in hoa + thân cao riêng chứa một
   newGrid đầy đủ chức năng (menu chuột phải). Chiều cao thân do JS đặt (số dòng / thanh kéo). */
.wd-dsn { height:100%; overflow:auto; }
.wd-dsn .blv-qgrp-list { display:flex; flex-direction:column; }
/* Thanh kéo giữa 2 nhóm (split mover) — cùng dáng .ws-body > .resizer (screen-shell.css) nhưng nằm ngang: kéo chỉnh
   chiều cao thân nhóm phía trên, nháy đúp về mặc định. Nhóm trên đang thu -> chỉ còn là khoảng cách, không kéo. */
.wd-dsn .wd-dsn-keo { position:relative; flex:0 0 auto; height:6px; background:var(--line);
    cursor:row-resize; touch-action:none; transition:background .15s; }
.wd-dsn .wd-dsn-keo::before { position:absolute; top:50%; left:50%; width:28px; height:2px; border-radius:2px;
    background:var(--muted-2); content:""; opacity:.75; transform:translate(-50%, -50%); }
.wd-dsn .wd-dsn-keo:hover, .wd-dsn .wd-dsn-keo.dang-keo { background:var(--brand-dark); }
.wd-dsn .wd-dsn-keo:hover::before, .wd-dsn .wd-dsn-keo.dang-keo::before { background:var(--surface); opacity:.9; }
.wd-dsn .wd-dsn-keo:focus-visible { outline:2px solid var(--brand); outline-offset:1px; }
/* LIỀN MẠCH giữa các trạng thái: nhóm trên đang thu -> bỏ hẳn thanh kéo, dải nhóm sau nối sát (chung viền). */
.wd-dsn .blv-qgrp-sec.collapsed + .wd-dsn-keo { display:none; }
.wd-dsn .blv-qgrp-sec ~ .blv-qgrp-sec > .blv-qgrp-out { border-top:0; }
.wd-dsn .blv-qgrp-out { display:flex; align-items:center; gap:var(--sp-1); padding:5px var(--sp-2); cursor:pointer;
    background:var(--surface-soft); border:1px solid var(--grid-neutral-line); color:var(--brand-dark);
    font-size:var(--fs-xs); font-weight:800; text-transform:uppercase; letter-spacing:.3px; }
.wd-dsn .blv-qgrp-out:focus-visible { outline:2px solid var(--brand); outline-offset:-2px; }
.wd-dsn .blv-qgrp-out .c { margin-left:2px; color:var(--muted); font-weight:var(--fw-semibold); text-transform:none; }
.wd-dsn .blv-grp-chev { transition:transform .15s; }
.wd-dsn .blv-qgrp-sec.collapsed .blv-grp-chev { transform:rotate(-90deg); }
.wd-dsn .blv-qgrp-body { overflow:hidden; border:1px solid var(--grid-neutral-line); border-top:0; }
.wd-dsn .blv-qgrp-body > .wl-grid, .wd-dsn > .wd-dsn-phang { height:100%; }
.wd-dsn .blv-qgrp-sec.collapsed .blv-qgrp-body { display:none; }
/* Cỡ chữ/đệm ô theo HisSite (--blv-fs-base 12px, ô 3px 8px — banlamviec-4.css): dòng gọn hơn .wl-grid mặc định. */
.wd-dsn .wl-grid.tabulator .tabulator-cell { height:auto; padding:3px 8px; font-size:var(--fs-sm); line-height:1.5; }
.wd-dsn .wl-grid.tabulator .tabulator-row { min-height:0; }
/* Dòng đang chọn (mỗi nhóm một lưới -> giữ dấu chọn khi nạp lại / khi chọn sang nhóm khác). */
.wd-dsn .wl-grid.tabulator .tabulator-row.wd-dsn-sel { background:var(--row-sel); }
.wd-dsn .wl-grid.tabulator .tabulator-row.wd-dsn-sel .tabulator-cell { color:var(--row-sel-text); font-weight:var(--row-sel-weight); }
.wd-dsn .wl-grid.tabulator .tabulator-row.wd-dsn-sel .tabulator-cell:first-child { box-shadow:inset var(--row-sel-bar-width) 0 0 var(--row-sel-bar); }
.wd-dsn .wl-wait-clock { font-family:var(--font-mono); font-variant-numeric:tabular-nums; }
.wl-grid .wl-wait-clock, .wl-grid .wl-wait { color:var(--st-wait-text); }
.wl-grid .wl-progress { color:var(--st-progress-text); }
.wl-grid .wl-done, .wl-grid .wl-m-ok { color:var(--st-done-text); }
.wl-grid .wl-end { color:var(--st-end-text); }
.wl-grid .wl-neutral, .wl-grid .wl-m-mute { color:var(--muted); }
.wl-grid .wl-warn { color:var(--st-warn-text); }
.wl-grid .wl-danger, .wl-grid .wl-m-due { color:var(--st-danger-text); }

/* ==== 07-datatable.js — trước đây chèn bằng <style id="data-table-style"> ==== */
/* Token: xem ghi chú cùng nội dung ở 06-worklist.js — nhóm --text-1/2/3, --row-alt,
   --ok-bg/--warn-bg trước 13/08/2026 KHÔNG nơi nào khai, lưới chạy bằng fallback. */
.dt{--dt-line:var(--line,#e3e9ee);--dt-line2:#eef2f5;--dt-alt:var(--row-zebra,#f9fbfc);--dt-hover:var(--row-hover,#eef6f3);--dt-sel:var(--row-sel,#8fdcb8);--dt-brand:var(--row-sel-bar,#1d6f5c);--dt-ink:var(--text,#1f2a36);--dt-ink2:var(--muted,#5b6b7b);--dt-ink3:var(--muted-2,#8a99a8);
  display:flex;flex-direction:column;min-height:0;background:var(--surface,#fff);border:1px solid var(--dt-line);border-radius:var(--radius,2px);overflow:hidden;}
.dt-scroll{overflow:auto;min-height:0;flex:1;}
.dt table{width:100%;border-collapse:collapse;font-size:13px;}
/* Tiêu đề cột: --fs-sm 12px (thang 7 bậc). Trước là 11.5px — nửa bậc, ngoài thang, dưới ngưỡng đọc thoải mái. */
.dt thead th{background:var(--surface,#fff);text-align:left;font-weight:700;color:var(--dt-ink2);font-size:var(--fs-sm,12px);text-transform:uppercase;letter-spacing:.02em;padding:10px 12px;border-bottom:1.5px solid var(--dt-line);white-space:nowrap;}
.dt thead th.r{text-align:right;}
.dt thead th.c{text-align:center;}
.dt tbody td{padding:9px 12px;border-bottom:1px solid var(--dt-line2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:340px;color:var(--dt-ink);}
.dt tbody tr:nth-child(even){background:var(--dt-alt);}
.dt tbody tr{cursor:pointer;transition:background .1s;}
.dt tbody tr:hover{background:var(--dt-hover);}
/* Trạng thái chọn do partCss/selection.css (kiểu R) lo — không khai lại ở đây. */
.dt td.dt-num{font-family:"SFMono-Regular",ui-monospace,"Cascadia Mono",Consolas,monospace;text-align:right;}
.dt td.dt-c{text-align:center;}
.dt td.dt-wrap{white-space:normal;overflow:visible;text-overflow:clip;max-width:none;color:var(--dt-ink2);}
.dt .dt-badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px;white-space:nowrap;line-height:1.3;}
.dt .dt-badge::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;}
.dt .dt-badge-ok{background:var(--st-done-bg,#e6f4ec);color:var(--st-done-text,#1f7a46);}
.dt .dt-badge-wait{background:var(--st-wait-bg,#fdf1e3);color:var(--st-wait-text,#b9721b);}
.dt .dt-badge-neutral{background:var(--surface-3, #eef2f5);color:#5b6b7b;}
.dt td.dt-empty-cell{color:var(--dt-ink3);}
.dt-empty{padding:26px 14px;text-align:center;color:var(--dt-ink3);font-size:13px;}
/* ==== FREEZE cột đầu (opts.freeze=N): cột 1..N dính trái khi scroll ngang ==== */
/* Thang z-index: thead thường 5 > body-freeze 2; ô góc thead-freeze 6 = trên cùng; group row 4 (dưới thead). */
.dt th.dt-frozen,.dt td.dt-frozen{position:sticky;left:0;z-index:2;background:var(--surface, #fff);}
.dt thead th.dt-frozen{z-index:6;}
.dt tbody tr:nth-child(even) td.dt-frozen{background:var(--dt-alt);}
.dt tbody tr:hover td.dt-frozen{background:var(--dt-hover);}
/* Trạng thái chọn do partCss/selection.css (kiểu R) lo — không khai lại ở đây (kể cả cột đóng băng). */
.dt td.dt-frozen-last,.dt th.dt-frozen-last{box-shadow:2px 0 0 rgba(0,0,0,.04),4px 0 6px -4px rgba(0,0,0,.14);}
/* ==== CHECKBOX chọn dòng (opts.checkbox=true) ==== */
.dt th.dt-ck,.dt td.dt-ck{width:36px;text-align:center;padding-left:0;padding-right:0;}
.dt input.dt-ckbox{width:15px;height:15px;cursor:pointer;accent-color:var(--dt-brand);}
/* ==== GROUP header (opts.groupBy) ==== */
.dt tr.dt-grp{background:linear-gradient(0deg,var(--dt-alt),var(--dt-alt));cursor:default;}
.dt tr.dt-grp td{padding:8px 12px;border-bottom:1.5px solid var(--dt-line);position:sticky;left:0;z-index:4;background:var(--dt-alt);}
.dt tr.dt-grp:hover td{background:var(--dt-alt);}
.dt .dt-grp-toggle{display:inline-flex;align-items:center;gap:8px;font-weight:700;color:var(--dt-ink);cursor:pointer;user-select:none;}
.dt .dt-grp-toggle .fa,.dt .dt-grp-toggle i{font-size:11px;color:var(--dt-ink2);transition:transform .15s;}
.dt tr.dt-grp.dt-collapsed .dt-grp-toggle i{transform:rotate(-90deg);}
.dt .dt-grp-def{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap;}
.dt .dt-grp-def .badge-soft{background:var(--dt-sel);color:var(--dt-brand);font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;}
.dt .dt-grp-money{display:inline-flex;gap:14px;font-size:12px;color:var(--dt-ink2);font-weight:500;}
.dt .dt-grp-money b{color:var(--dt-ink);}
.dt tr.dt-hidden{display:none;}
/* ==== Menu CHỌN CỘT (opts.columnPicker=true) ==== */
.dt-colmenu{position:absolute;z-index:60;min-width:200px;max-height:340px;overflow:auto;background:var(--surface,#fff);border:1px solid var(--line,#e3e9ee);border-radius:var(--radius,2px);box-shadow:var(--shadow-lg,0 12px 30px -8px rgba(0,0,0,.22));padding:6px;}
.dt-colmenu label{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:var(--radius-sm,2px);cursor:pointer;font-size:13px;color:var(--text,#1f2a36);}
.dt-colmenu label:hover{background:var(--surface-2, #eef6f3);}
.dt-colmenu input{width:15px;height:15px;accent-color:var(--main-color,#055952);cursor:pointer;}
/* ==== autoFit: khi ĐO, cho ô không cắt cụt để đọc đúng bề rộng nội dung ==== */
.dt table.dt-measuring td,.dt table.dt-measuring th{white-space:nowrap;overflow:visible;text-overflow:clip;max-width:none;}
/* ==== Ô SỬA (chế độ editing) ==== */
.dt td.dt-editing{padding:4px 8px;}
.dt input.dt-editin{width:100%;height:26px;border:1px solid var(--line-2,#cbd5d0);border-radius:2px;padding:0 8px;font-size:13px;font-family:inherit;color:var(--dt-ink);background:var(--surface, #fff);outline:none;}
.dt input.dt-editin:focus{border-color:var(--dt-brand);box-shadow:0 0 0 2px var(--brand-sel,#d1fae0);}
/* ==== LỖI TẠI Ô (wdThongBao.loiO; alertToas + focus ô tự chuyển về đây) — mẫu màn Đăng ký ==== */
.wd-o-loi{border-color:var(--btn-danger,#dc2626);box-shadow:var(--loi-o-ring);}
/* Màn không tự định kiểu focus -> viền focus mặc định (đen) của trình duyệt đè viền đỏ; đổi nó sang đỏ, vẫn thấy focus. */
.wd-o-loi:focus-visible{outline:2px solid var(--btn-danger,#dc2626);outline-offset:-1px;}
.wd-o-loi-msg{display:block;min-width:0;margin-top:2px;color:var(--st-danger-text,#b91c1c);font-size:var(--fs-xs,11px);line-height:1.2;overflow-wrap:anywhere;}
.wd-o-loi-msg[hidden]{display:none;}
.wd-o-loi-xuong{flex-wrap:wrap;}
.wd-o-loi-xuong > .wd-o-loi-msg{flex:0 0 100%;}
/* Ô nằm trong hàng flex/grid không có khung riêng: dòng lỗi NỔI ngay dưới ô, không xô bố cục. */
.wd-o-loi-msg.wd-o-loi-noi{position:absolute;z-index:5;margin:0;padding:1px 4px;max-width:320px;background:var(--surface,#fff);border-radius:2px;box-shadow:var(--shadow-sm,0 1px 3px rgba(0,0,0,.12));}

/* ── Header bàn làm việc + ghim danh sách dùng chung (06-worklist.js taoHeaderLamViec / ganGhimDanhSach) — chuyển từ
   màn Bác sĩ (kham-benh-bac-si.css) để mọi màn danh sách trái dùng lại. ── */
/* Header kiểu bàn làm việc HisSite (port .blv-head + .blv-hstats .blv-ftab, banlamviec.css / banlamviec-2.css):
   dải brand, icon tròn, chip trạng thái (ô màu icon · số đậm · nhãn) bấm = lọc, dấu cấp cứu/ưu tiên, công cụ phải. */
.wd-hdr { position:relative; z-index:20; display:flex; flex:0 0 auto; align-items:center; gap:var(--sp-2); min-height:36px;
    padding:2px var(--sp-2) 2px 3px; color:var(--btn-on);
    background:linear-gradient(90deg, var(--brand) 0%, color-mix(in srgb, var(--brand) 82%, var(--brand-dark)) 100%); }
.wd-hdr .wd-hdr-circle { display:flex; flex:0 0 auto; align-items:center; justify-content:center; width:30px; height:30px; border-radius:50%;
    background:color-mix(in srgb, var(--btn-on) 18%, transparent); }
.wd-hdr-tabs { display:flex; flex:0 1 auto; align-items:center; gap:6px; min-width:0; overflow:hidden; }
.wd-hdr .wd-hdr-tab { display:inline-flex; flex:0 1 auto; align-items:center; gap:7px; min-width:0; height:28px; padding:0 11px 0 4px;
    border:1px solid color-mix(in srgb, var(--btn-on) 22%, transparent); background:color-mix(in srgb, var(--btn-on) 14%, transparent);
    color:var(--btn-on); font:var(--fs-sm)/1 var(--font-ui); white-space:nowrap; cursor:pointer; transition:background .15s; }
/* Như .blv-ftab HisSite: chip chưa chọn trong mờ chữ trắng trên dải màu; chip đang chọn nền trắng chữ brand. */
.wd-hdr .wd-hdr-tab:hover { background:color-mix(in srgb, var(--btn-on) 24%, transparent); }
.wd-hdr .wd-hdr-tab[aria-pressed="true"] { border-color:var(--surface); background:var(--surface); color:var(--brand-dark); }
.wd-hdr .wd-hdr-tab:focus-visible { outline:2px solid var(--btn-on); outline-offset:2px; }
.wd-hdr .wd-hdr-tab .ic { display:flex; flex:0 0 auto; align-items:center; justify-content:center; width:19px; height:19px; color:var(--btn-on);
    background:var(--brand-dark); box-shadow:0 0 0 1px color-mix(in srgb, var(--btn-on) 35%, transparent); }
.wd-hdr .wd-hdr-tab .ic i { font-size:var(--fs-xs); }
.wd-hdr .wd-hdr-tab.cam .ic { background:var(--btn-warn); }
.wd-hdr .wd-hdr-tab.xanh .ic { background:var(--btn-primary); }
.wd-hdr .wd-hdr-tab.luc .ic { background:var(--brand); }
.wd-hdr .wd-hdr-tab.do .ic { background:var(--btn-danger); }
.wd-hdr .wd-hdr-tab.tim .ic { background:var(--btn-purple-icon); }
/* Thanh tiêu đề danh sách gọn (theo .blv-ph HisSite): đệm 3px 8px, chữ 13px đậm, control cao --wd-ds-h (26px). */
/* Áp cho MỌI thanh tiêu đề danh sách (.ws-left-head, .xx-list-h…): lặp class để đạt (0,2,0) — thắng rule 1 class của
   thanh tiêu đề màn, còn rule 2 class nạp sau ở module (tinh chỉnh --wd-ds-h riêng) vẫn thắng. */
.wd-ds-head.wd-ds-head { padding:3px 8px; font-size:var(--fs-base); font-weight:var(--fw-bold); --wd-ds-h:26px; }
/* Ô tìm nhanh nằm trên thanh tiêu đề danh sách (mẫu màn Bác sĩ, dùng lại ở CĐHA): ô + nút kính lúp liền khối,
   đứng trước nút thu/mở + ghim trong cùng cụm .kb-list-head-tools. */
.kb-list-head-tools { display:inline-flex; align-items:center; gap:var(--sp-1); flex:1 1 auto; min-width:0; max-width:290px; margin-left:auto; }
/* Cột trái hẹp: giữ tiêu đề một dòng, ô tìm (min-width:0) co lại thay vì đẩy chữ xuống dòng. */
.wd-ds-head > span:has(+ .kb-list-head-tools) { flex:0 0 auto; margin-right:var(--sp-2); white-space:nowrap; }
.kb-queue-search { display:flex; align-items:center; flex:1 1 auto; min-width:0; height:var(--wd-ds-h, var(--h-input)); overflow:hidden; border:1px solid var(--line-2); border-radius:var(--radius-sm); background:var(--surface); }
.wd-ds-head.wd-ds-head .kb-queue-search > input { flex:1 1 auto; width:100%; min-width:0; height:calc(var(--wd-ds-h, var(--h-input)) - 2px) !important; min-height:calc(var(--wd-ds-h, var(--h-input)) - 2px) !important; padding:0 var(--sp-2) !important; border:0 !important; border-radius:0 !important; outline:0; background:transparent; color:var(--text); font:var(--fs-base)/1.4 var(--font-ui); }
.wd-ds-head.wd-ds-head .kb-queue-search:focus-within { border-color:var(--brand); box-shadow:var(--focus-ring); }
.wd-ds-head.wd-ds-head .kb-queue-search-trigger { display:inline-flex; align-items:center; justify-content:center; flex:0 0 var(--wd-ds-h, var(--h-input)); width:var(--wd-ds-h, var(--h-input)); height:calc(var(--wd-ds-h, var(--h-input)) - 2px); margin:0; padding:0; border:0; border-left:1px solid var(--line); border-radius:0; color:var(--brand); background:var(--surface); cursor:pointer; }
.wd-ds-head.wd-ds-head .kb-queue-search-trigger:hover { background:var(--brand-soft); }
.wd-ds-head.wd-ds-head .kb-queue-search-trigger:focus-visible { outline:2px solid var(--brand); outline-offset:-3px; }
.wd-hdr .wd-hdr-tab .v { flex:0 0 auto; font-size:var(--fs-base); font-weight:var(--fw-bold); }
.wd-hdr .wd-hdr-tab .k { min-width:0; overflow:hidden; font-size:var(--fs-xs); text-overflow:ellipsis; }
.wd-hdr-dau { display:flex; flex:0 0 auto; align-items:center; gap:6px; }
/* Dải phòng/khoa (cfg.dai): cùng dáng chip trên dải màu — chưa chọn trong mờ chữ trắng, đang chọn nền trắng chữ brand.
   Kiểu T của selection.css bỏ qua nút trong dải này (nền brand-soft, vạch dưới không hợp dải màu). */
.wd-hdr .wd-hdr-dai { display:flex; flex:1 1 0; align-items:center; gap:6px; min-width:120px; overflow-x:auto; scrollbar-width:thin; }
.wd-hdr .wd-hdr-dai .kb-room-tab { display:flex; flex:none; align-items:center; gap:8px; min-width:0; height:28px; padding:0 10px;
    border:1px solid color-mix(in srgb, var(--btn-on) 22%, transparent); background:color-mix(in srgb, var(--btn-on) 14%, transparent); white-space:nowrap; }
.wd-hdr .wd-hdr-dai .kb-room-tab:not(.active) { color:var(--btn-on); }
.wd-hdr .wd-hdr-dai .kb-room-tab:not(.active):hover { background:color-mix(in srgb, var(--btn-on) 24%, transparent); }
.wd-hdr .wd-hdr-dai .kb-room-tab.active { border-color:var(--surface); background:var(--surface); color:var(--brand-dark); }
.wd-hdr .wd-hdr-dai .kb-room-tab:focus-visible { outline:2px solid var(--btn-on); outline-offset:-3px; }
.wd-hdr .wd-hdr-dai .kb-room-tab.active:focus-visible { outline-color:var(--brand-dark); }
.wd-hdr .wd-hdr-pill { display:inline-flex; align-items:center; gap:5px; height:22px; padding:0 8px; font-size:var(--fs-xs); font-weight:var(--fw-semibold); white-space:nowrap; }
.wd-hdr .wd-hdr-pill.do { background:var(--st-danger-bg); color:var(--st-danger-text); }
.wd-hdr .wd-hdr-pill.vang { background:var(--badge-warn-bg); color:var(--badge-warn-text); }
.wd-hdr-tools { display:flex; flex:0 0 auto; align-items:center; gap:6px; margin-left:auto; }
.wd-hdr .wd-hdr-btn { display:inline-flex; align-items:center; justify-content:center; gap:6px; min-width:30px; height:28px; padding:0 var(--sp-2);
    border:1px solid color-mix(in srgb, var(--btn-on) 40%, transparent); background:transparent; color:var(--btn-on);
    font:var(--fw-semibold) var(--fs-sm)/1 var(--font-ui); cursor:pointer; }
.wd-hdr .wd-hdr-btn:hover, .wd-hdr .wd-hdr-btn[aria-expanded="true"] { background:color-mix(in srgb, var(--btn-on) 16%, transparent); }
.wd-hdr .wd-hdr-btn:focus-visible { outline:2px solid var(--btn-on); outline-offset:1px; }
.wd-hdr-more { position:relative; }
.wd-hdr .wd-hdr-menu { position:absolute; top:calc(100% + 4px); right:0; z-index:30; display:none; min-width:220px; padding:4px;
    background:var(--surface); border:1px solid var(--line); box-shadow:var(--shadow-md); }
.wd-hdr .wd-hdr-menu.mo { display:block; }
/* Mục menu là div (button trong .ws bị luật chung ép căn giữa) -> căn trái thẳng cột icon + chữ như menu Xử trí. */
.wd-hdr .wd-hdr-menu > [role="menuitem"] { display:flex; align-items:center; justify-content:flex-start; gap:8px; padding:6px 10px;
    color:var(--text); font:var(--fs-sm)/1.3 var(--font-ui); text-align:left; white-space:nowrap; cursor:pointer; }
.wd-hdr .wd-hdr-menu > [role="menuitem"]:hover, .wd-hdr .wd-hdr-menu > [role="menuitem"]:focus { background:var(--surface-hover); outline:0; }
.wd-hdr .wd-hdr-menu > [role="menuitem"] i { flex:0 0 16px; color:var(--brand); text-align:center; }
/* Ghim / bỏ ghim danh sách trái (port HisSite .blv-ql-unpinned / .blv-ql-float, banlamviec-3.css; 06-worklist.js
   ganGhimDanhSach). Bề rộng do JS đặt inline (ws-split cũng inline) — ở đây chỉ vị trí, trượt, bóng. */
.wd-hdr .wd-hdr-circle-btn { width:30px; min-width:30px; height:30px; padding:0; border:0; border-radius:50%;
    background:color-mix(in srgb, var(--btn-on) 18%, transparent); }
.wd-hdr .wd-hdr-circle-btn:hover, .wd-hdr .wd-hdr-circle-btn[aria-expanded="true"] { background:color-mix(in srgb, var(--btn-on) 40%, transparent); }
/* Chỗ chứa công cụ ở thanh tiêu đề danh sách (cfg.ghim.dau: ô tìm, nút thu/mở nhóm, ghim) — DÙNG CHUNG thay các
   .xx-ds-dau tự viết ở module: dồn phải, căn giữa dọc, co được khi thanh hẹp. */
.wd-ds-dau { display:inline-flex; flex:1 1 auto; align-items:center; justify-content:flex-end; gap:var(--sp-1); min-width:0; margin-left:auto; }
.wd-ds-nut { display:inline-flex; flex:0 0 auto; align-items:center; justify-content:center; width:var(--wd-ds-h, var(--h-input)); height:var(--wd-ds-h, var(--h-input));
    padding:0; border:1px solid var(--line-2); background:var(--surface); color:var(--muted); cursor:pointer; }
.wd-ds-nut:hover { color:var(--brand); background:var(--brand-soft); }
.wd-ds-ghim[aria-pressed="false"] { border-color:var(--brand); background:var(--brand-soft); color:var(--brand-dark); }
.wd-ds-nut:focus-visible { outline:2px solid var(--brand); outline-offset:1px; }
.wd-ds-boghim { position:relative; overflow:hidden; }
.wd-ds-boghim > .resizer { display:none; }
.wd-ds-boghim > .wd-ds-trai { position:absolute; top:0; bottom:0; left:0; z-index:45; max-width:82%;
    background:var(--surface); box-shadow:2px 0 14px rgba(15, 23, 42, .28); transform:translateX(-101%); visibility:hidden;
    transition:transform .18s ease, visibility 0s linear .18s; }
/* z-index nhắc lại ở đây: màn đặt .ws-body > .ws-left { z-index:1 } cùng độ ưu tiên, nạp sau rule trên -> ô TomSelect (.ts-control lớp 1) nổi đè danh sách. */
.wd-ds-boghim.wd-ds-xoe > .wd-ds-trai { z-index:45; transform:translateX(0); visibility:visible; transition:transform .18s ease; }
.wd-ds-rz { display:none; }
.wd-ds-xoe > .wd-ds-trai > .wd-ds-rz { position:absolute; top:0; right:0; z-index:5; display:block; width:6px; height:100%; cursor:col-resize; touch-action:none; }
.wd-ds-xoe > .wd-ds-trai > .wd-ds-rz:hover { background:var(--brand); }
body.wd-ds-dang-keo { cursor:col-resize; user-select:none; }
@media (prefers-reduced-motion: reduce) { .wd-ds-boghim > .wd-ds-trai { transition:none; } }
/* Hẹp: chip chỉ còn icon + số (title vẫn đủ tên), như .blv-hstats co nhãn. */
@media (max-width: 900px) { .wd-hdr .wd-hdr-tab .k, .wd-hdr .wd-hdr-btn.chu span { display:none; } }
/* cheDo 'loc' (taoHeaderLamViec): chip trạng thái nằm TRONG bộ lọc trái — màn chạy trong khung đã có thanh tab trên cùng
   (khối Dược). Nền sáng, chip viền mảnh, chip đang chọn nền brand nhạt; nhãn «Trạng thái» cùng cột nhãn bộ lọc. */
.wd-hdr.wd-hdr-loc { z-index:auto; flex-wrap:wrap; gap:4px var(--sp-1); min-height:0; padding:0 0 var(--sp-1); background:none; color:var(--text); }
.wd-hdr-loc .wd-hdr-nhan { flex:0 0 auto; min-width:var(--loc-label-w, 60px); color:var(--muted); font-size:var(--fs-sm); }
/* Trong bộ lọc lưới .loc-filter: trải hết hàng và nằm CUỐI (sau Từ/Đến, Kho…) như ô «Trạng thái» cũ. */
.loc-filter > .wd-hdr-loc { grid-column:1 / -1; order:99; }
/* cheDo 'loc' mặc định = MỘT ô select «Trạng thái» (.loc-field, khuôn ô lọc chung) — cũng nằm cuối bộ lọc như ô cũ. */
.loc-filter > .wd-hdr-chon { order:99; }
.wd-hdr-loc .wd-hdr-tabs { flex:1 1 auto; flex-wrap:wrap; gap:4px; overflow:visible; }
.wd-hdr-loc .wd-hdr-tab { height:24px; padding:0 8px 0 3px; border-color:var(--line-2); background:var(--surface); color:var(--text); }
.wd-hdr-loc .wd-hdr-tab:hover { background:var(--surface-hover); }
.wd-hdr-loc .wd-hdr-tab[aria-pressed="true"] { border-color:var(--brand); background:var(--brand-soft); color:var(--brand-dark); }
.wd-hdr-loc .wd-hdr-tab:focus-visible { outline-color:var(--brand); }
.wd-hdr-loc .wd-hdr-tab .ic { width:17px; height:17px; box-shadow:none; }
.wd-hdr-loc .wd-hdr-tools { margin-left:auto; }
.wd-hdr-loc .wd-hdr-btn { height:24px; min-width:24px; border-color:var(--line-2); background:var(--surface); color:var(--brand); }
.wd-hdr-loc .wd-hdr-btn:hover { background:var(--brand-soft); }
.wd-hdr-loc .wd-hdr-btn:focus-visible { outline-color:var(--brand); }
/* Bỏ ghim ở chế độ 'loc': nút «Hiện danh sách» nổi ở mép trái vùng làm việc (cột trái đang ẩn). */
.wd-ds-boghim > .wd-ds-hien-noi { position:absolute; top:6px; left:6px; z-index:44; display:inline-flex; align-items:center; justify-content:center;
    width:30px; height:30px; padding:0; border:0; border-radius:50%; background:var(--brand); color:var(--btn-on); box-shadow:var(--shadow-md); cursor:pointer; }
.wd-ds-boghim > .wd-ds-hien-noi:hover { background:var(--brand-dark); }
.wd-ds-boghim > .wd-ds-hien-noi:focus-visible { outline:2px solid var(--brand-dark); outline-offset:2px; }

/* Ô soạn chữ BVST6 bằng Jodit — newRichTextBvst6 (exComponent/02-inputs.js): khung, chữ khớp ô nhập chuẩn. */
.jodit-container.wd-rt-bvst6:not(.jodit_inline) { border:1px solid var(--line-2); border-radius:var(--radius-sm); background:var(--surface); }
.jodit-container.wd-rt-bvst6:not(.jodit_inline):focus-within { border-color:var(--focus-bd); box-shadow:var(--focus-ring); }
.wd-rt-bvst6 .jodit-toolbar__box:not(:empty) { border-bottom:1px solid var(--line); background:var(--surface-2); }
.wd-rt-bvst6 .jodit-wysiwyg { font-family:inherit; font-size:var(--fs-base); line-height:1.45; padding:7px 9px; color:var(--text); }
.wd-rt-bvst6 .jodit-placeholder { font-size:var(--fs-base); padding:7px 9px; color:var(--muted-2); }
.wd-rt-bvst6 .jodit-status-bar { display:none; }

/* Danh sách ĐỦ các mục đã chọn dưới ô chọn nhiều (newDropDown tuỳ chọn hienDanhSachChon): mỗi mục một dòng,
   chữ dài tự xuống dòng để đọc hết; vạch trái màu chủ đạo nhạt, nút bỏ là nút vai trò .btn-mini.btn-icon. */
.ts-ds-chon{display:flex;flex-direction:column;gap:2px;margin-top:4px}
.ts-ds-muc{display:flex;align-items:flex-start;gap:4px;padding:0 2px 0 8px;border-left:3px solid var(--brand-2,#3b82f6);background:var(--brand-soft,#eff6ff);border-radius:var(--radius-sm,2px);font-size:var(--fs-sm,12px);line-height:1.4;color:var(--text,#0f172a)}
.ts-ds-chu{flex:1;min-width:0;overflow-wrap:anywhere;padding-block:4px}
.ts-ds-bo{flex:0 0 auto;margin-top:1px}

/* wdInHtml (fSupport.js): iframe ẩn dùng để in trang HTML dựng tại chỗ — không display:none (khung không nạp thì không in được). */
.wd-in-html-khung { position:fixed; right:0; bottom:0; width:0; height:0; border:0; }
