Cầu lông phong trào cụm phường Cầu Giấy — vòng bảng
Đang phát · từ 08:00
Thể thao Hà Nội · Hướng dẫn giao diện sống
Token, kiểu chữ và toàn bộ component dùng chung cho cổng người dân và hệ thống điều hành nội bộ. Mọi mẫu bên dưới là component thật, chạy trực tiếp từ mã nguồn.
01
Bốn quy tắc cứng được thực thi ngay ở tầng token và kiểm tra tự động bằng npm run check:design.
01
Không emoji
Biểu tượng chỉ dùng lucide-react. Nội dung, dữ liệu mẫu và chú thích không chứa emoji.
02
Không giãn chữ
Không đặt letter-spacing khác 0. Namespace giãn chữ đã bị xóa khỏi theme, chỉ còn giá trị 0.
03
Độ đậm tối đa 700
Chỉ có font-normal, font-medium, font-semibold, font-bold (400–700).
04
Chỉ token ngữ nghĩa
Dùng bg-primary, text-muted-foreground... Không mã màu cứng, không màu Tailwind mặc định.
Ngôn ngữ và khả năng tiếp cận
02
Token định nghĩa trong globals.css dưới dạng biến CSS, tự đổi theo giao diện sáng, tối. Dùng qua lớp tiện ích: bg-*, text-*, border-*.
--background
Nền trang
--surface
Bề mặt
--surface-2
Bề mặt 2
--surface-3
Bề mặt 3
--card
Thẻ
--foreground
Chữ chính
--muted-foreground
Chữ phụ
--subtle-foreground
Chữ mờ
--border
Viền
--border-strong
Viền đậm
--input
Viền ô nhập
--ring
Viền focus
--primary
Chính
--primary-hover
Chính — hover
--primary-subtle
Chính — nền nhạt
--accent
Nhấn
--accent-hover
Nhấn — hover
--accent-subtle
Nhấn — nền nhạt
--ink
Navy (hero, sidebar)
--ink-2
Navy 2
--volt
Vạch volt (điểm nhấn hoạt động)
--secondary
Phụ
--success
Thành công
--success-subtle
Thành công — nền
--warning
Cảnh báo
--warning-subtle
Cảnh báo — nền
--danger
Nguy hiểm
--danger-subtle
Nguy hiểm — nền
--info
Thông tin
--info-subtle
Thông tin — nền
--medal-gold
Vàng
--medal-gold-subtle
Vàng — nền
--medal-silver
Bạc
--medal-silver-subtle
Bạc — nền
--medal-bronze
Đồng
--medal-bronze-subtle
Đồng — nền
--chart-1
Chuỗi 1
--chart-2
Chuỗi 2
--chart-3
Chuỗi 3
--chart-4
Chuỗi 4
--chart-5
Chuỗi 5
--chart-6
Chuỗi 6
--sidebar
Nền
--sidebar-hover
Hover
--sidebar-active
Đang chọn
--sidebar-border
Viền
03
Barlow Semi Condensed cho tiêu đề, con số lớn (font-display); Be Vietnam Pro cho nội dung (font-sans). Thang 1,200, cỡ gốc 16px.
Tiêu đề, KPI, bảng huy chương
Nội dung, nhãn, bảng
Không dùng 800, 900
Aa 1.850
Trung tâm Huấn luyện và Thi đấu
font-normal · 400 · Normal
Aa 1.850
Trung tâm Huấn luyện và Thi đấu
font-medium · 500 · Medium
Aa 1.850
Trung tâm Huấn luyện và Thi đấu
font-semibold · 600 · Semibold
Aa 1.850
Trung tâm Huấn luyện và Thi đấu
font-bold · 700 · Bold
Thêm lớp tabular cho số trong bảng, thẻ thống kê
Mặc định
1.111 / 8.888
tabular
1.111 / 8.888
04
Lưới 4px. Khoảng cách giữa các khối gap-4 hoặc gap-6; giữa các section mt-6 hoặc mt-8. Thẻ dùng rounded-lg border.
xs · 4px
sm · 6px
md · 8px
lg · 12px
xl · 16px
full
shadow-xs
xs — thẻ, ô nhập
shadow-sm
sm — thẻ hover
shadow-md
md — popover, menu
shadow-lg
lg — dialog, sheet
sport-stripes trên nền ink, vạch gradient volt — primary — accent
Dải chéo động
05
Chỉ dùng lucide-react, nét 2px, kích thước mặc định 16px trong nút (size-4), 18px trong thẻ thống kê. Biểu tượng trang trí đặt aria-hidden.
import { Trophy } from "lucide-react"06
CTA chính của cổng người dân dùng accent; thao tác chính trong nội bộ dùng primary. Mỗi vùng chỉ một nút chính.
<Button variant="primary | accent | secondary | outline | ghost | danger | link | ink | inverse">size="xs | sm | md | lg | icon | icon-sm | icon-xs"Hover, focus-visible (viền ring), nhấn, vô hiệu
07
Nhãn trạng thái ngắn. Trạng thái nghiệp vụ dùng StatusBadge với từ điển trong lib/labels.ts, không viết cứng nhãn.
<Badge tone="success" dot>08
Mọi trường nhập bọc trong Field (nhãn, gợi ý, lỗi). Lỗi đặt aria-invalid trên ô nhập và hiển thị với role alert.
Theo giấy khai sinh
Số điện thoại gồm 10 chữ số.
Hệ thống tự sinh
import { Field } from "@/components/ui/field"NativeSelect cho bộ lọc đơn giản, tốt trên di động
09
Select, Checkbox, Switch, RadioGroup — dựa trên Radix UI, đầy đủ bàn phím và ARIA.
Radix Select — bàn phím, tìm theo ký tự
import { Select } from "@/components/ui/controls"Chọn, chưa chọn, trung gian, vô hiệu
import { Checkbox } from "@/components/ui/controls"Bật, tắt tức thời — không cần nút lưu
import { Switch } from "@/components/ui/controls"Một lựa chọn trong nhóm nhỏ
import { RadioGroup, RadioGroupItem } from "@/components/ui/controls"10
Tabs line cho trang chi tiết; Tabs pill cho bảng điều hành; Segmented để đổi chế độ xem.
Điều hướng nội dung trong trang
<TabsList variant="line">Dùng trên bảng điều hành, cuộn ngang trên điện thoại
<TabsList variant="pill">Chuyển chế độ hiển thị, không đổi URL
import { Segmented } from "@/components/ui/controls"11
Dialog, Sheet, DropdownMenu, Popover, Tooltip và thông báo toast (sonner).
Mọi thao tác ghi mở Dialog có form đầy đủ
import { Dialog, DialogContent, ... } from "@/components/ui/overlay"Xem chi tiết bản ghi, không rời ngữ cảnh danh sách
<SheetContent side="right" width="max-w-md">Thao tác phụ trên dòng; mục nguy hiểm tone danger
<DropdownMenuItem tone="danger">Popover cho bộ lọc nhanh; Tooltip chỉ cho nhãn ngắn
<Tooltip content="...">12
Alert, Avatar, Progress, Skeleton, Breadcrumb, DescriptionList, Kbd, Separator, Card.
Thông tin
Thành công
Cảnh báo
Lỗi
<Alert tone="info | success | warning | danger" title="...">Chữ viết tắt, màu theo tên
Có aria-label mô tả
Trạng thái đang tải
Tìm nhanh chức năng Ctrl K
Bộ môn Đấu kiếm · chờ lãnh đạo duyệt
13
PageHeader, SectionHeader, StatCard, EmptyState, Timeline, Stepper — import từ @/components/patterns/page.
Quản lý hồ sơ VĐV theo bộ môn, tuyến (yêu cầu 3, 11).
Thành tích
Đoàn Hà Nội, mọi cấp giải
Tông, biểu tượng, delta (invertDelta khi giảm là tốt), footer nguồn
Vận động viên
1.850
HCV SEA Games 33
29
Ca chấn thương
14
Tỷ lệ sử dụng sân
87%
Chưa có hồ sơ đăng ký
Hồ sơ người dân gửi qua cổng sẽ hiển thị tại đây.
Bộ môn trình kế hoạch
08:12 16/10/2026
Phòng HL&TĐ thẩm định
10:30 16/10/2026
Lãnh đạo phê duyệt
Chờ xử lý
Bước hiện tại dùng accent; nhãn ẩn trên màn hình nhỏ
14
DataTable: tìm kiếm không dấu, sắp xếp, phân trang, chọn dòng, kết xuất Excel/PDF. Khai báo columns trong file client.
Họ tên trong bảng là người giả định
15
Recharts bọc sẵn, màu từ token chart-1..6, tối đa 6 chuỗi, luôn có chú giải hoặc nhãn trục.
Có đường tham chiếu
16
StatusBadge, MedalTally, MedalBadge, SourceNote, DemoDataNote — import từ @/components/patterns/domain.
Nguồn: baovanhoa.vn, tuoitre.vn, vietnamplus.vn
<MedalTally gold={29} silver={23} bronze={27} size="lg" /><StatusBadge map={QUALITY} value="tot" />Bắt buộc với số liệu thật và số liệu giả định
Nguồn: Cổng TTĐT Cục Thể dục thể thao Việt Nam (tdtt.gov.vn), 07/2025
Dữ liệu minh họa phục vụ trình diễn, không phải số liệu chính thức
17
Mẫu học từ các trang tin thể thao quốc tế (docs/99-references/R03): ticker, kicker, tiêu đề khối, đọc nhiều, lịch và kết quả, bảng tổng sắp, thẻ trực tiếp. Import từ @/components/patterns/editorial.
Dải kéo tay, không tự chạy (WCAG 2.2.2)
Lịch và kết quả
Thành tích · SEA Games 33
Trực tiếpSắp diễn raKết thúcXem lạiThành tích
Hà Nội giành 29 HCV tại SEA Games 33Thành tích
VĐV Hà Nội góp mặt cả 3 HCV ASIAD 20| # | Môn | Huy chương vàng | Huy chương bạc | Huy chương đồng | Tổng |
|---|---|---|---|---|---|
| 1 | Đua thuyền | 4 | 1 | 1 | 6 |
| 2 | Karate | 3 | 1 | 0 | 4 |
| 3 | Điền kinh | 2 | 2 | 0 | 4 |
| 4 | Đấu kiếm | 2 | 1 | 5 | 8 |
| 5 | Bi sắt | 2 | 1 | 2 | 5 |
Hôm nay, Thứ Sáu 16/10
Vòng bảng · Nhà tập Cầu lông
Thứ Bảy 18/10
Bể bơi 50 m · 450 học sinh
Thứ Bảy 24/10
Nhà tập Bóng bàn · 117 VĐV
Đang phát · từ 08:00