@@ -136,6 +136,7 @@ Do not respond to this failure by repeatedly increasing cell radii, adding corne
## Text and Cells
- DataGrid headers use the Chinese business label from the Subject field definition or view configuration. Never expose `metadata.*` paths, snake_case names, database keys, or other technical identifiers as visible headers. When backend definitions are incomplete, resolve approved Chinese fallbacks in the shared column adapter so main grids and related-record grids remain consistent; do not add page-local string replacements.
- Use the approved five-level list typography contract everywhere: header `12px/500`, ordinary body field `14px/400`, primary field `14px/550`, secondary field `13px/400`, and chip/tag/status text `12px/500`. Use `var(--rc-text-muted)` for headers and secondary fields, `var(--rc-text-secondary)` for ordinary fields, and `var(--rc-text-primary)` for primary fields.
- The shared DataGrid wrapper must own reusable `primary`, `secondary`, `text-pair`, `number`, and `chip` styles. Pages identify field meaning; they must not recreate font size, weight, color, gap, truncation, or tag typography.
- A primary/secondary pair is a compact vertical stack with a `0.25rem` gap. Primary and secondary lines both remain one line and use Tooltip when truncated unless the migrated legacy comparison/list cell already intentionally allows short wrapping. The primary line carries identity or the main comparison value at `14px/550` and `var(--rc-text-primary)`; the secondary line carries code, department, role, location, related project names, or other context at `13px/400` using the weaker `--rc-data-grid-secondary-color` (`#7A8596` in light theme and `#8B8B95` in dark theme). The two lines must be visually separated enough that they do not read as one bold block, especially in dark mode. If a primary/secondary cell has no click-through detail action, both visible lines must expose their complete raw text through the shared HeroUI Tooltip on Hover/focus; do not hide overflow without an affordance to read the full value.