# PatienceBar
Thanh kiên nhẫn của khách đang đứng giữa quầy: nhãn "KIÊN NHẪN" và thanh viền đậm vơi dần, xanh rồi vàng rồi đỏ.
## Khi nào dùng
- Dưới lời gọi món của khách ở quầy pha (bong bóng 464px trên sân khấu 768×1376).
- Khối này được vẽ trên tranh quầy (màu `stage-*`, chữ `stage-ink`), chỉ dùng trong `tt-stage` hoặc trên nền `stage-ground`/`stage-paper`; đặt thẳng lên nền theme thì nhãn "KIÊN NHẪN" mất tương phản ở Đêm dịu.
- Thẻ khách nhỏ trong làn dùng `tt-progress--patience` (mảnh 5px), không dùng khối này.
## Biến thể
| Biến thể | Lớp | Dùng khi |
|---|---|---|
| Còn nhiều | `tt-patience` | Trên 50%: fill `patience` (xanh nhạt) |
| Vừa phải | `tt-patience is-mid` | 26–50%: fill `gold` |
| Sắp hết | `tt-patience is-low` | Tới 25%: fill `warn` |
## Cấu trúc
```html
```
Cỡ: px của sân khấu (cao 20px, viền 3px, nhãn 17px). Preview chạy ở px gốc vì thanh co giãn theo bề rộng khung; đặt trong `.tt-stage` đã scale thì giữ nguyên.
## Trạng thái
| Trạng thái | Hiệu ứng |
|---|---|
| Đổi mức | `width` chuyển 0.25s tuyến tính |
| `is-mid` / `is-low` | Đổi màu fill; do `TTMU.patience` bật theo ngưỡng 50% / 25% |
## Hành vi JS
`TTMU.patience(root)` gắn một lần (`data-tt-bound`), trả về `{ value, set(fraction), destroy() }` hoặc `null` nếu đã gắn.
```js
var p = TTMU.patience(document.querySelector('.tt-patience'));
p.set(0.4); // width 40%, aria-valuenow 40, bật is-mid
```
`set` kẹp 0..1 (giá trị lạ thành 0), bỏ qua lần set trùng phần trăm như `_lastPct` của game, đặt cả `aria-valuetext` ("Còn 40%").
## Token sử dụng
`outline`, `stage-paper`, `stage-ink`, `patience`, `gold`, `warn`, `radius-6/10`, `space-8`.
## Khả năng tiếp cận
- Thanh có `role="progressbar"`, `aria-valuemin/max/now` và `aria-label` tên khách.
- Không chỉ dựa vào màu: lời gọi món và nhịp quầy vẫn báo khách sắp đi.
- Chuyển động width ngắn (.25s), tắt khi `prefers-reduced-motion`.
## Nên / Không nên
| Nên | Không nên |
|---|---|
| Gọi `set()` mỗi nhịp tick của quầy với tỉ lệ còn lại | Tự ghi `width` mà quên `aria-valuenow` |
| Dùng ở px sân khấu | Dùng trong thẻ khách 172px (dùng `tt-progress--patience`) |
## Nguồn
`.q3pat`, `.q3bar`, `.q3bar i` — css/style.css dòng 618–620; màu theo `updPat()` trong js/game.js (xanh `#8fcf8f` khi còn trên 50%, `#f4c04a` trên 25%, `#f08a8a` còn lại).
- `#f4c04a` đổi `gold`, `#f08a8a` đổi `warn` (token gần vai trò nhất).
- Ngưỡng mất sao nằm ở `stars()`: đợi quá 45% / 78% / 92% thời gian chờ thì mỗi mốc trừ 1★; thanh đổi màu theo phần còn lại 50% / 25%, không trùng với mốc sao.
- Nhãn "KIÊN NHẪN" là chữ của game; game không có nhãn thời gian.