# IngredientBin Ô khay topping, foam và nguyên liệu trên quầy pha: ảnh cắt từ tranh quầy, badge số lượng, và các trạng thái khách đang gọi, đã chọn, hết, bị khoá. ## Khi nào dùng - Khay topping 4×3 (trân châu, thạch, pudding…) và 6 khay foam/đá/đường ở hàng dưới quầy. - Khách đang gọi món nào thì khay đó nhấp nháy viền cam (`is-want`). - Đo theo px sân khấu 768×1376: đặt trong `.tt-stage` rồi `TTMU.fitStage`. ## Biến thể | Biến thể | Lớp | Dùng khi | |---|---|---| | Khay topping | `tt-bin` | 107×98px, badge 28px (`tt-bin__badge`) | | Khay foam / đá / đường | `tt-bin` + `style="width:116px;height:158px"` | Có nhãn 2 dòng `tt-bin__label`, badge nhỏ `tt-bin__badge--sm` (24px) | ## Cấu trúc ```html ``` Ảnh là tranh `bg.jpg` 768×1376 cắt bằng `background-position` âm toạ độ góc trái-trên của khay (CSS đã đặt `background-size` và `no-repeat`; người dùng chỉ cần `background-image` và `background-position`). Toạ độ khay topping (từ `TCOL`/`TROW` trong game.js): cột x = 285, 402, 520, 640; hàng y = 620, 728, 836. Khay foam: x = 19 + 124 × thứ tự (0..5), y = 975. `__veil` luôn có trong DOM, chỉ hiện khi `is-empty` (chữ "Hết") hoặc `is-locked` (icon `ic_lock`). ## Trạng thái | Trạng thái | Hiệu ứng | |---|---| | `:active`, `is-on` | Lớp phủ `on-fill` 28% (`::after`, xếp tầng: ảnh crop < lớp phủ nhấn < veil/nhãn < badge) | | `is-want` | Viền `shadow-want` (trắng + cam `want`), nhịp 1.4s `tt-pulse`, nổi lên trên | | `is-picked` | Viền `shadow-pick` (4px `target`) | | `is-empty` | Lớp phủ `stage-paper` 75% + chữ "Hết" `stage-muted` 22px | | `is-locked` | Lớp phủ `stage-ground` 85% + `ic_lock`; badge topping mờ, badge nhỏ ẩn | ## Token sử dụng `shadow-want`, `shadow-pick`, `want`, `target`, `on-fill`, `stage-ink`, `outline`, `stage-paper`, `stage-ground`, `stage-muted`, `stage-track`, `alpha-veil` (độ đục lớp phủ Hết), `bin-label-bg` (nền nhãn FOAM MATCHA ở `hc`), `bin-badge`, `outline-soft`, `radius-10/14`. ## Khả năng tiếp cận - Mỗi khay là `