# XiDachSeat
Ghế của một khách quen ở bàn Xì Dách: avatar, tên, tiền góp vui, tay bài, trạng thái (đang suy nghĩ, đã dừng, quá chén, thắng, thua) và nút "So điểm".
## Khi nào dùng
- Mỗi khách ngồi bàn là một ghế trong `tt-xidach__players` của `XiDachTable` (lưới `auto-fit` cột tối thiểu 95px).
- Cho nhà cái (người chơi) thấy ai đang rút, ai đã dừng, ai quá chén và bấm so điểm từng người.
- Ghế chỉ hiển thị; chọn trạng thái và số tiền là việc của code.
## Biến thể
| Trạng thái ghế | Lớp | Dùng khi |
|---|---|---|
| Đang suy nghĩ… / Đã dừng | `tt-xdseat` | Mặc định (trạng thái đã dừng chỉ khác chữ trạng thái) |
| Đang suy nghĩ | `tt-xdseat is-drawing` | Viền và quầng `gold`, nền vàng nhạt (`.active-turn`) |
| Quá chén | `tt-xdseat is-busted` | Viền `warn` |
| Thắng | `tt-xdseat is-win` | Viền `mint`, nền xanh nhạt (`.settled-win`) |
| Thua | `tt-xdseat is-lose` | Viền `warn`, nền đỏ nhạt (`.settled-lose`) |
| Hoà | `tt-xdseat is-draw` | Giữ viền và nền trung tính |
## Cấu trúc
```html
🐱
Bé Mèo ConGóp vui: 20k
…
🤔Đang suy nghĩ...
```
Avatar dùng `tt-avatar` (ảnh `assets/Avatars/b07.png` với `alt=""`, hoặc emoji `aria-hidden`); tay bài là `CardHand`. Tên dài tự cắt bằng dấu "…".
## Trạng thái
| `setState` | Chữ mặc định | Biểu tượng | Nút So điểm |
|---|---|---|---|
| `idle` | Chờ chia bài | 🧋 | theo `setCanSettle` |
| `drawing` | Đang suy nghĩ... | 🤔 | theo `setCanSettle` |
| `standing` | Đã dừng | 🤫 | theo `setCanSettle` |
| `busted` | Quá chén | 💥 | theo `setCanSettle` |
| `win` · `lose` · `draw` | Thắng · Thua · Hoà | ✓ · ✗ · = | tự ẩn (đã xét) |
Chữ thay thế truyền vào `setState(name, text)`, ví dụ "Thua −10k" hoặc "Đã dừng (2 thẻ)".
## Hành vi JS
`TTMU.xiDachSeat(el, { onSettle })` gắn một lần (gắn lần hai trả về `null`) và trả về `{ state, setState(name, text), setBet(n), setCanSettle(flag), destroy() }`.
```js
var seat = TTMU.xiDachSeat(el, { onSettle: function (seatEl) { /* nhà cái bấm So điểm */ } });
seat.setBet(50000); // "Góp vui: 50k" (TTMU.formatMoney)
seat.setState('lose', 'Thua −50k');
seat.setCanSettle(false);
```
`onSettle(el)` chỉ gọi khi người dùng bấm nút `[data-xet]` đang hiện; ghế đã xét (`win` / `lose` / `draw`) bỏ qua mọi cú bấm. Các hàm `set*` từ code không gọi callback. Nút nên mang lớp `tt-xdseat__xet`; thuộc tính `hidden` ẩn được nó vì luật nền `[hidden]` của `00-base.css`.
## Token sử dụng
`panel`, `line`, `fill-muted`, `ink`, `soft`, `gold`, `mint`, `warn`, `radius-10/12`, `space-4/6`, cùng token của `tt-avatar`, `tt-button`, `CardHand`.
## Khả năng tiếp cận
- Ghế là `role="group"` có `aria-label` là tên khách; nút So điểm có `aria-label` "So điểm " để các nút giống nhau không bị đọc trùng.
- Trạng thái luôn có chữ ("Đang suy nghĩ...", "Thắng", "Thua") và biểu tượng ✓ ✗; viền và nền chỉ là phần thêm. Chữ trạng thái `ink` đạt 7:1 ở Tương phản cao.
- Nút So điểm là `