# ItemRow
Hàng danh sách món/nguyên liệu: icon 30px, tên và dòng phụ ở giữa, điều khiển ở bên phải (tab Kho, danh sách nâng cấp).
## Khi nào dùng
- Mỗi nguyên liệu trong tab Kho: tên, hạn dùng, tồn kho, ô nhập số phần.
- Mỗi nâng cấp / mặt hàng có nút "Mua" bên phải.
## Biến thể
| Biến thể | Lớp | Dùng khi |
|---|---|---|
| Hàng | `tt-item-row` | Lưới `30px | 1fr | auto`, gap 10, vạch kẻ dưới 1px `line` |
| Nút xếp lưới | `tt-item-row__actions--grid` | Cột phải có 3 nút nhỏ cạnh nhau (gap 3) |
## Cấu trúc
```html
Trà sữa 3 ngày
10 · 0 · 4,5k
```
Phần tử con: `__icon`, `__name`, `__sub`, `__note` (.72rem, `soft`), `__actions`, `__swatch` (ô màu 26px). Dòng phụ báo "ok": `__sub--ok` (mint).
## Trạng thái
| Trạng thái | Hiệu ứng |
|---|---|
| `tt-item-row__sub.is-low` | Dòng phụ chữ `warn` đậm: tồn kho thấp/hết |
| Hàng cuối | Không có vạch kẻ dưới |
## Token sử dụng
`line`, `soft`, `warn`, `mint`, `space-4/8/10`.
## Khả năng tiếp cận
- Icon trang trí dùng `alt=""`; icon mang nghĩa trong dòng phụ cần `alt` ("Tồn", "Đã dùng").
- Tồn thấp chỉ đổi màu và đậm, nên kèm số "0" ở dòng phụ để không phụ thuộc màu.
- Ô số và hai nút trong Stepper cần `aria-label` có tên món: "Số phần Trà sữa", "Bớt Trà sữa", "Thêm Trà sữa" (đừng để trơn "Bớt"/"Thêm" lặp ở mọi dòng).
## Nên / Không nên
| Nên | Không nên |
|---|---|
| Đặt cả danh sách trong một thẻ, mỗi món một ItemRow | Tự thêm viền cho từng hàng |
| Dùng `tt-badge` cho hạn dùng, pill khuyến mãi cạnh tên | Thêm cột thứ 4 vào lưới |
## Nguồn
`.rowi`, `.rowi .nm`, `.rowi .sub`, `.rowi .sub.low`, `.btns`, `.rowi.kho .btns`, `.sw`, `.wl`, `.okline`, `.warnline` — css/style.css; markup `paneKho` trong js/game.js.
- `.rowi.kho .sbtn` (padding 3×5, .66rem) và `.rowi.offm` (opacity .5) không có lớp riêng: dùng `tt-button--small` và style của trang.
- `.sw` (26px, viền 2px `rgba(0,0,0,.12)`) -> `__swatch`, viền đổi sang `line` (token gần vai trò nhất).
- Nút "Bán 30%" là pill `tt-badge--promo` (màu đổi sang token gold).