diff --git a/.atl/skill-registry.md b/.atl/skill-registry.md index 5888a3f..1002263 100644 --- a/.atl/skill-registry.md +++ b/.atl/skill-registry.md @@ -60,14 +60,22 @@ Generated: 2026-04-13 - Coverage backend: `dotnet test --collect:"XPlat Code Coverage"` - Coverage frontend: `vitest --coverage` -### Design System (frontend) +### Design System (frontend) — v2.3 - Source of truth: `Obsidian/02-ARQUITECTURA-y-TECH-STACK/2.14 🎨 Design System.md`. Engram topic_key: `sig-cm2/design-system` -- Brand `#008fbe` (logo) → escalado OKLCH `--brand-50..950`. Neutral cool slate (`--neutral-50..950`). NO usar `gray-*`/`slate-*`/`blue-*` genéricos -- Tokens semánticos: `bg-background`, `text-foreground`, `bg-primary`, `bg-card`, `text-muted-foreground`, `border-border`, `ring-ring`. NUNCA hardcodear `bg-white`/`text-black`/hex inline -- Density compact: button 32-36px, input 36px, table row 40px. Spacing múltiplos de 4 -- Light + Dark con default = system preference (`useTheme()` hook). Smoke test en ambos antes de mergear +- Personality: tech sophisticated (Vercel/Linear/Railway). Glass + gradient mesh + multi-layer shadows + glow blobs corners +- Brand `#008fbe` (logo) → escalado OKLCH `--brand-50..950`. **Violet accent** `oklch(0.62 0.20 280)` (`--accent-violet-*`) para combos tech. Neutral cool slate con shift hue 250-252 (`--neutral-50..950`) +- NO usar `gray-*`/`slate-*`/`blue-*` genéricos de Tailwind. Solo brand/neutral/violet/semantic +- Tokens semánticos: `bg-background`, `text-foreground`, `bg-primary`, `bg-card`, `text-muted-foreground`, `border-border`, `ring-ring`, `bg-input` (con `border-input-border`). NUNCA hardcodear `bg-white`/`text-black`/hex inline +- Density compact: button 32-40px, input 40px (`h-10`), table row 40px. `--radius` base 10px (sm/md/lg/xl = 6/8/10/14) +- Light + Dark con default = system preference (`useTheme()` hook). Dark NO es pure black (slate-violet). Smoke test ambos antes de mergear - Forms: ≤4 campos single col, ≥5 campos `grid grid-cols-1 md:grid-cols-2 gap-4` - Tablas mobile: priority columns + tap-to-expand (NO cards-on-mobile, NO pure horizontal scroll) -- Toasts via `sonner` (`` ya montado en `App.tsx`). `toast.success()` / `toast.error()` +- **Utilities CSS** (`@layer components` en index.css): `.glass`, `.gradient-mesh`, `.grid-bg` (usar en root layouts), `.surface` (tablas), `.focus-glow` +- **Card variants**: `default` (shadow-md) / `elevated` / `glass` / `flat` +- **Tooltips**: usar SIEMPRE `` de `@/components/ui/tooltip` (Radix Portal). NO CSS absolute en sidebars/modals — clipping issue +- **Sidebar**: colapsable con `useSidebar()` hook (persiste en localStorage). Toggle en top header al lado del brand +- Toasts via `sonner` (`` ya montado en `App.tsx`). `toast.success()` / `toast.error()` +- TooltipProvider ya envuelve App con `delayDuration={150}` - Componentes shadcn: instalar via shadcn MCP server o `npx shadcn@latest add`. NUNCA copy-paste manual del website - WCAG AA obligatorio: focus rings visibles (ya forzado en CSS base), contrast ≥ 4.5:1 texto normal, aria-label en botones icon-only +- Browser autofill fix ya aplicado en `@layer base` — respeta tokens del DS