/* CLINIC-SCOPE: shared */
/* ============================================================================
   layout-nen.css — nền của _MainLayout: full-height, khung split .ws, lớp phủ "đang tải", hộp thoại modal.
   Trước 30/09/2026 là khối <style> viết thẳng trong _MainLayout.cshtml (sửa phải build Site + publish full);
   nay là tệp tĩnh — sửa xong F5. _MainLayout nạp đúng vị trí cũ: sau ex-component.css, trước selection.css.
   Đã gỡ 79 selector theme tối (theme tối tắt cứng — docs/design.md §3.6).
   ============================================================================ */
/* Nền tảng full-height để view lấp đầy cửa sổ (tránh khoảng trống đáy) */
html, body { height: 100%; margin: 0; }
/* Thẻ <code>: hồng Bootstrap #e83e8c chỉ 3.4:1 trên nền gợi ý xám. */
code { color: var(--code-text, #c2185b); }
/* Split .ws: ws-left theo biến --ws-left-w (đã set ở script trên) -> first-paint ĐÚNG %, ws-split không phải resize lại.
   Dùng width (không dùng flex-basis) để SplitMove ghi đè inline khi KÉO. */
/* Dùng chung ngưỡng tối thiểu của cột lọc; % nhỏ trong localStorage vẫn không bóp vỡ control. */
.ws-body > .ws-left { width: var(--ws-left-w, 30%); flex: 0 0 auto; min-width: var(--w-filter-min, 240px); }
.ws-body > .ws-main { flex: 1 1 0; min-width: 0; }
/* Chống khựng do enhance control: RESERVE chiều cao input/select trong card = 32px
   (bằng .form-control / .ts-wrapper sau khi inputStyle/TomSelect/flatpickr chạy) -> card KHÔNG phình -> hết reflow. */
.ws .card-b input:not([type=checkbox]):not([type=radio]):not([type=button]),
.ws .card-b select { height: 32px; box-sizing: border-box; }
/* Header workspace gọn hơn (bớt cao cho cân đối) */
.ws-top { height: 42px; }
/* ===== Lớp phủ LOADING che "khựng" enhance control: phủ .ws-body tới khi window.load xong =====
   ws-split.js gắn class .ws-loaded để ẩn (fade). Chỉ có ở màn .ws; màn khác không có .ws-body. */
.ws-body { position: relative; }
.ws-body::before { content:""; position:absolute; inset:0; z-index:60; background:var(--surface-3, #eef1f5); transition:opacity .35s ease; }
.ws-body::after { content:""; position:absolute; top:50%; left:50%; width:40px; height:40px; margin:-20px 0 0 -20px; z-index:61; border:3px solid rgba(37,99,235,.2); border-top-color:#2563eb; border-radius:50%; animation:wsspin .7s linear infinite; transition:opacity .35s ease; }
@keyframes wsspin { to { transform: rotate(360deg); } }
.ws-body.ws-loaded::before, .ws-body.ws-loaded::after { opacity:0; pointer-events:none; }
/* Alert / Question / Dialog: margin + padding CÂN ĐỐI (đều các cạnh), gọn gàng */
.modal-dialog { margin: 1.75rem auto; }
.modal-content { border: 0; border-radius: 2px; overflow: hidden; box-shadow: 0 12px 40px rgba(0,0,0,.24); }
.modal-body { padding: 20px; font-size: 14px; line-height: 1.6; }
.modal-footer { padding: 14px 20px; gap: 10px; display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; }
.modal-footer > * { margin: 0 !important; }
.modal-footer .btn { padding: 8px 20px; min-width: 92px; }
#globalBootstrapModal .modal-body { min-height: 56px; text-align: left; }
#globalBootstrapModal .modal-footer { justify-content: center; }
#globalBootstrapModal #globalConfirmCancel.btn { color: var(--btn-on, #fff) !important; }
