/* CheckinQR — card-colors.css (N2.8h): MÀU THẺ CHỈNH TAY. File này được nạp SAU screens.css ở mọi layout; để trống quy tắc = giao diện mặc định.
   Mỗi thẻ (.card) có khoá data-card="<màn>-<mục>" (duy nhất trong một màn, ổn định khi đổi chữ tiêu đề). Bốn biến chỉnh được:
     --card-head-bg    nền đầu thẻ   (mặc định --c-primary-soft)
     --card-head-fg    chữ đầu thẻ   (mặc định --c-text)
     --card-head-icon  icon đầu thẻ  (mặc định --c-accent)
     --card-bg         nền thân + chân thẻ (mặc định --c-surface)
   Cách viết (sáng / tối):
     .card[data-card="admin-unpaid"] { --card-head-bg: #cfe0d3; }
     @media (prefers-color-scheme: dark) { .card[data-card="admin-unpaid"] { --card-head-bg: #263d2e; } }
   Đổi MỌI thẻ: đặt biến trên .card. Được dùng mã màu hex hoặc token của tokens.css (vd var(--c-money)). Test CssContrastTest kiểm chữ/nền >= 4.5:1, icon/nền >= 3:1
   cho từng khoá ở cả sáng và tối — sai thì báo tên khoá. Thẻ lặp theo dòng dùng chung một khoá + data-id.

   ===== DANH SÁCH KHOÁ (khoá · màn · tiêu đề) =====
   -- Quản lý --
   admin-unpaid            /admin                       Chưa trả toàn công ty (preset xanh)
   admin-working           /admin                       Nhân viên đang làm việc
   admin-late              /admin                       Đi trễ hôm nay
   admin-in-effect         /admin                       Đang áp dụng hôm nay (mặc định đóng)
   admin-anomalies         /admin                       Chấm công bất thường (7 ngày · nhắc mã QR cũ · gợi ý IP quán — T1.1)
   admin-doctor            /admin                       Kiểm tra hệ thống (mặc định đóng, mở khi có lỗi)
   handle-todo             /admin/sessions              Cần làm
   handle-info             /admin/sessions              Thông tin (mặc định đóng)
   handle-links            /admin/sessions              Thêm check · Chốt ca (thẻ liên kết, không head)
   handle-empty            /admin/sessions              Không có check (thẻ rỗng)
   handle-day              /admin/sessions              Mỗi (nhân viên, ngày) một thẻ (+ data-id)
   anomaly-empty           /admin/reports/anomalies     Không có dấu hiệu (thẻ rỗng)
   admin-timesheet         /admin/timesheets            Bảng công một người — thẻ tổng (T1.3)
   audit-list              /admin/audit                 Nhật ký thao tác (T2.2)
   admin-timesheet-people  /admin/timesheets            Bảng công theo người (T1.3)
   anomaly-signal          /admin/reports/anomalies     Mỗi dấu hiệu một thẻ (+ data-id = mã dấu hiệu)
   payouts-empty           /admin/payouts               Không ai cần trả (thẻ rỗng)
   payouts-select-all      /admin/payouts               Dòng chọn tất cả (không head)
   payouts-person          /admin/payouts               Mỗi người một thẻ (+ data-id)
   payout-totals           /admin/payouts/{id}          Chốt đến ngày … — thẻ tổng đợt (preset xanh)
   payout-item             /admin/payouts/{id}          Mỗi nhân viên trong đợt (+ data-id)
   payout-void             /admin/payouts/{id}          Huỷ đợt đã trả
   payout-history          /admin/payouts/history       Các đợt thanh toán
   pay-one-form            /admin/payouts/pay/{id}      Trả một người
   pay-many-form           /admin/payouts/pay           Trả nhiều người
   adv-open                /admin/advances              Tạm ứng chưa chốt (preset xanh)
   adv-list                /admin/advances              Danh sách tạm ứng / hoàn ứng
   adv-form                /admin/advances/new          Ứng lương
   adv-edit-form           /admin/advances/{id}/edit    Sửa tạm ứng
   adv-void-form           /admin/advances/{id}/void    Huỷ tạm ứng
   refund-form             /admin/advances/refund/new   Hoàn ứng
   refund-edit-form        /admin/advances/refund/{id}/edit
   refund-void-form        /admin/advances/refund/{id}/void
   adj-empty               /admin/adjustments           Không có khoản nào (thẻ rỗng)
   adj-item                /admin/adjustments           Mỗi khoản thưởng / phạt một thẻ (+ data-id)
   adjm-form               /admin/adjustments/adjust/new   Cộng / trừ tiền
   adjm-edit-form          /admin/adjustments/adjust/{id}/edit
   adjm-void-form          /admin/adjustments/adjust/{id}/void
   retro-head              /admin/retro/{id}            Ngày lễ đang xét
   retro-empty             /admin/retro/{id}            Không có đề xuất (thẻ rỗng)
   retro-item              /admin/retro/{id}            Mỗi đề xuất truy lĩnh (+ data-id)
   close-empty             /admin/shift-close           Không ca nào cần chốt (thẻ rỗng)
   close-item              /admin/shift-close           Mỗi ca + ngày đang mở (+ data-id)
   acheck-day              /admin/checks/new            Check trong ngày của người đã chọn
   acheck-form             /admin/checks/new            Thêm check
   acheck-void-form        /admin/checks/{id}/void      Huỷ check
   corr-req                /admin/corrections/{id}      Yêu cầu sửa giờ
   corr-approve            /admin/corrections/{id}      Duyệt
   corr-reject-form        /admin/corrections/{id}/reject
   emp-list                /admin/employees             Danh sách nhân viên
   emp-profile             /admin/employees/{id}        Hồ sơ
   emp-links               /admin/employees/{id}        Các thao tác (thẻ liên kết, không head)
   emp-rates               /admin/employees/{id}        Lịch sử mức lương
   emp-shifts              /admin/employees/{id}        Lịch sử ca
   emp-form                /admin/employees/new         Thêm nhân viên
   emp-edit-form           /admin/employees/{id}/edit   Sửa thông tin
   rate-form               /admin/employees/{id}/rate   Mức lương mới
   assign-form             /admin/employees/{id}/shift · /admin/shifts/assign   Gán ca
   pw-form                 /admin/employees/{id}/password   Đặt lại mật khẩu
   temp-pw                 (sau tạo / đặt lại)          Mật khẩu tạm (thẻ giữa, không head)
   lock-current            /admin/lock                  Mốc khoá sổ
   lock-pick               /admin/lock                  Chọn ngày khoá (A66)
   lock-people             /admin/lock                  Từng người tới hôm qua (ngày sạch · lần trả gần nhất · Chưa nhận)
   lock-blockers           /admin/lock                  Việc cần xong trước khi khoá
   lock-balances           /admin/lock                  Số dư từng người tại mốc
   lock-form               /admin/lock                  Khoá sổ
   lock-history            /admin/lock                  Lịch sử khoá
   rules-current           /admin/rules                 Bộ quy tắc đang hiệu lực
   rules-scheduled         /admin/rules                 Bộ đã lên lịch (+ data-id)
   rules-draft             /admin/rules                 Bản nháp (+ data-id)
   rules-history           /admin/rules                 Lịch sử
   rule-form               /admin/rules/new             Tạo bộ quy tắc
   rule-edit-form          /admin/rules/{id}/edit       Sửa bản nháp
   qr-item                 /admin/qr                    Mỗi mã QR đang hoạt động (+ data-id)
   qr-form                 /admin/qr/new                Tạo mã QR
   ips-list                /admin/sites/{id}/trusted-ips   IP trong quán
   shifts-item             /admin/shifts                Mỗi ca một thẻ (+ data-id)
   shift-current           /admin/shifts/{code}         Phiên bản đang hiệu lực
   shift-scheduled         /admin/shifts/{code}         Phiên bản lên lịch (+ data-id)
   shift-draft             /admin/shifts/{code}         Bản nháp (+ data-id)
   shift-emps              /admin/shifts/{code}         Nhân viên trong ca
   cal-month               /admin/shifts/{code}/calendar   Lịch tháng
   cal-rest                /admin/shifts/{code}/calendar   Nghỉ tuần
   cal-holidays            /admin/shifts/{code}/calendar   Ngày lễ của ca
   shift-form              /admin/shifts/new            Tạo ca
   copy-form               /admin/shifts/{code}/calendar/copy   Sao chép lịch
   ver-form                /admin/shifts/{code}/versions/new    Phiên bản mới
   ver-edit-form           /admin/shifts/{code}/versions/{id}/edit   Sửa bản nháp ca
   rest-form               /admin/shifts/{code}/calendar/rest-days/new   Nghỉ tuần mới
   holiday-form            /admin/shifts/{code}/calendar/holidays/new    Thêm ngày lễ
   *-pick                  các form chọn người          fieldset danh sách chọn (không head): assign-pick, adv-pick, refund-pick, adjm-pick, acheck-pick, close-pick
   -- Chấm công --
   today-worked            /                            Giờ làm hôm nay (nền đậm riêng, không head)
   today-rows              /                            Các dòng tiền trong ngày (không head)
   today-unpaid            /                            Chưa nhận (preset xanh; đỏ khi âm — khối cuối)
   today-punches           /                            Chấm công trong ngày
   me-profile              /me                          Hồ sơ
   me-pay-shift            /me                          Lương và ca
   me-links                /me                          Liên kết (không head)
   rules-rate · rules-shift · rules-day · rules-bands · rules-minutes · rules-late · rules-net   /me/rules   Cách tính lương
   corr-empty              /me/corrections              Không có yêu cầu (thẻ rỗng)
   corr-item               /me/corrections              Mỗi yêu cầu (+ data-id)
   corr-day · corr-form · corr-links   /corrections/new   Ngày · form yêu cầu · liên kết
   check-day · check-form  /checks/new                  Ngày · thêm check
   check-day · check-void-form   /checks/{id}/void      Ngày · huỷ check
   timesheet-totals        /timesheet (tháng / đợt)     Tổng
   timesheet-totals-unpaid /timesheet (chưa nhận)       Tổng chưa nhận (preset xanh)
   day-checks · day-links · day-time · day-pay · day-penalty · day-bonus · day-manual · day-net · day-warn   /timesheet/{date}   Chi tiết ngày
   paid-lifetime           /paid                        Tổng đã nhận
   paid-empty              /paid                        Chưa có đợt (thẻ rỗng)
   paid-batch              /paid                        Mỗi đợt đã trả (+ data-id)
   slip-info · slip-manual · slip-adjust · slip-advance · slip-total   /paid/{batch}   Phiếu chi
   punch-invalid           /p/{code}                    QR sai (thẻ giữa, không head)
   punch-who               /p/{code}                    Ai đang chấm (không head)
   backup-form             /punch/backup                Nhập mã dự phòng
   login-form              /login                       Đăng nhập
   password-form           /password/change             Đổi mật khẩu
*/

/* ===== Preset (Quok 13/10/2026): các thẻ "Chưa trả / Chưa nhận" nền xanh như trước N2.8h ===== */
.card[data-card="admin-unpaid"],
.card[data-card="today-unpaid"],
.card[data-card="adv-open"],
.card[data-card="payout-totals"],
.card[data-card="timesheet-totals-unpaid"] {
  --card-bg: var(--c-money-bg);
  --card-head-bg: var(--c-money-bg);
  --card-head-fg: var(--c-money);
  --card-head-icon: var(--c-money);
}

/* ===== Chỉnh tay của Quok — thêm quy tắc dưới dòng này ===== */
.card[data-card="admin-late"] { --card-head-bg: var(--c-danger-bg); }
/* mặc định đóng, không cần head nổi bật → đầu thẻ cùng màu thân (Quok 13/10; Code đưa về biến --card-head-bg để test CSS xanh) */
.card[data-card="admin-in-effect"],
.card[data-card="admin-doctor"] { --card-head-bg: var(--c-surface); }

/* ===== KHÔNG SỬA KHỐI NÀY — trạng thái (âm → đỏ), đè được bằng quy tắc chỉnh tay ở trên khi cần ===== */
.card[data-card][data-state="negative"] {
  --card-bg: var(--c-danger-bg);
  --card-head-bg: var(--c-danger-bg);
  --card-head-fg: var(--c-penalty);
  --card-head-icon: var(--c-penalty);
}
.card[data-card][data-state="negative"] .unpaid-card__amount { color: var(--c-penalty); }
