[CLAUDE] FE-User: redesign foundation "nâng màu giữ brand" — gradient/accent/badge bắt mắt hơn
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m24s

Anh: giao diện đơn điệu, muốn đẹp + bắt mắt, font/màu đẹp hơn. Hướng anh chốt
"nâng màu, giữ nền xanh brand" (eoffice trước). Foundation lan tỏa toàn app, KHÔNG
đụng 65 trang lẻ.
- index.css: +accent palette teal/amberx/violet/greenx (đặt tên né trùng Tailwind)
  + utilities .app-gradient-brand / .card-accent / .icon-chip / .stat-value;
  heading 600->700 đậm hơn; .label-eyebrow brand-600. Brand #1F7DC1 + Be Vietnam Pro GIỮ.
- primitives: Button primary/danger gradient nổi bật; Input/Select/Textarea focus-glow
  mạnh hơn; Label brand-600; Dialog title-bar gradient. variant/size keys STABLE.
- shell: Layout stripe dày hơn + logo cap; PageHeader title lớn/đậm + accent bar cao;
  TopBar gradient hairline; DataTable thead gradient brand chữ trắng.
- Dashboard: KPI cards accent + icon chips.
- color maps (contract/PE phase + PE display status): -700->-800 đậm chữ, phase nháp tint brand.

Visual-only — props/handler/signature nguyên. Build PASS (tsc -b 0 error). a11y:
contrast AA + prefers-reduced-motion. fe-admin mirror đợt sau.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-06-16 10:12:40 +07:00
parent 4004481989
commit c98030f27c
14 changed files with 230 additions and 96 deletions

View File

@ -79,18 +79,19 @@ export function DataTable<T>({
onRowClick,
}: Props<T>) {
return (
// Density-first: rounded-lg + crisp border (no decorative shadow).
// rounded-lg + crisp border (no decorative shadow).
<div className="overflow-auto rounded-lg border border-slate-200 bg-white">
<table className="w-full text-[12px]">
{/* thead tint brand đậm nhận diện hơn slate (anh yêu cầu "trang trí
lên 1 tý" 06-11); brand-700 semibold uppercase 11px đạt AA trên nền nhạt. */}
<thead className="sticky top-0 z-10 bg-brand-50/60 text-brand-700">
<tr className="border-b border-brand-100">
{/* 2026-06-16 anh "thead nền màu brand đậm hơn": solid brand gradient +
white uppercase — đậm nhận diện rõ rệt (was pale brand-50/60). White
on brand-600→700 = >7:1 contrast. */}
<thead className="app-gradient-brand sticky top-0 z-10 text-white">
<tr>
{columns.map(c => (
<th
key={c.key}
className={cn(
'px-3 py-2 text-[11px] font-semibold uppercase tracking-wider',
'px-3 py-2.5 text-[11px] font-bold uppercase tracking-wider',
c.align === 'right' && 'text-right',
c.align === 'center' && 'text-center',
c.align !== 'right' && c.align !== 'center' && 'text-left',
@ -100,7 +101,7 @@ export function DataTable<T>({
{c.sortable && onSortChange ? (
<button
onClick={() => onSortChange(c.key, sortBy === c.key ? !sortDesc : false)}
className="inline-flex items-center gap-1 hover:text-slate-900"
className="inline-flex items-center gap-1 transition-colors hover:text-white/80"
>
{c.header}
{sortBy === c.key && (sortDesc ? <ChevronDown className="h-3.5 w-3.5" /> : <ChevronUp className="h-3.5 w-3.5" />)}