19 · Components
19 — Components
Sección titulada «19 — Components»Versión: 0.1 Última actualización: 2026-04-24
Design system de componentes alineados con el brand identity. Cada componente rechaza explícitamente defaults de AI-template.
Principios de componentes
Sección titulada «Principios de componentes»- Función > decoración — cada elemento gana su lugar
- Restraint — shadows sutiles, bordes definidos, transiciones calmadas
- Texturas cálidas — subtle paper grain donde aporte
- Typography-first — texto cuidado antes de container ornamental
- Border > fill cuando sea posible — borders finos definen jerarquía
Containers
Sección titulada «Containers»Card (estándar)
Sección titulada «Card (estándar)»Para contenido agrupado (chapter preview, lesson card, etc.)
Dark mode:
bg: ink-2 (#24201a)border: 1px border-warm (#3a2f25)radius: 6px (NO 16px rounded pill)padding: 20-24pxshadow: NONE (solo hover)hover: border cambia a terracotta, shadow 0 2px 8px rgba(214,122,60,0.08)Anatomía:
┌─────────────────────────────┐│ [CH 01] [5 steps · 15 min] │ ← meta row (Work Sans 12px uppercase)│ ││ Chapter Title │ ← Fraunces 22px│ ││ Short description text that │ ← Work Sans 15px, text-secondary│ gives context. ││ ││ ───── │ ← optional divider (border-warm)│ [Action →] [more →] │ ← CTAs└─────────────────────────────┘Panel (featured)
Sección titulada «Panel (featured)»Para hero sections dentro de pages.
bg: gradient sutil sobre ink con 3-5% tint de accent del chapterborder-left: 4px solid [chapter accent] ← identidad visiblepadding: 32-40pxtypography: Fraunces grande para título, resto Work SansDivider
Sección titulada «Divider»Simple:
border-top: 1px solid border-warm (#3a2f25)margin: 32px 0Con ornamento (para separar sections grandes — marginal):
1px line con símbolo central:────── ✦ ──────centered · color: text-muted · 12pxButtons
Sección titulada «Buttons»Regla absoluta: NO rounded-full pills (tipo Linear). NO shadow floating. NO gradient fill. NO hover-scale.
Primary (CTA principal)
Sección titulada «Primary (CTA principal)»bg: terracotta (#d67a3c)text: ink (#1a1511) — oscuro sobre cálidopadding: 10px 20px (compacto, no oversized)radius: 6pxfont: Work Sans 500 · 15pxhover: brightness 108%, nada másactive: brightness 95%disabled: opacity 0.4Secondary (outline)
Sección titulada «Secondary (outline)»bg: transparentborder: 1px solid añil (#6a7ab5)text: añilpadding: same as primaryhover: background añil/10, text color staysGhost (minimal)
Sección titulada «Ghost (minimal)»bg: transparenttext: text-primarypadding: 8px 12pxhover: bg ink-2, no borderused: navigation, tool menusIcon button
Sección titulada «Icon button»size: 36x36pxbg: transparenticon: 16-20pxhover: bg ink-2, scale: none (NO scale 1.1)Form elements
Sección titulada «Form elements»Input (text)
Sección titulada «Input (text)»bg: ink-3 (#2f2a22)border: 1px solid border-warmradius: 4px (más cuadrado que buttons — inputs son más formales)padding: 10px 14pxfont: Work Sans 15pxtext: text-primaryplaceholder: text-muted
focus: border-color terracotta, no glow/ring (ring-0)error: border-color oxblood, helper text oxblood belowCheckbox
Sección titulada «Checkbox»16x16pxbg: ink-3border: 1px border-warm (unchecked)bg-checked: terracottacheck mark: ink color
NOT rounded-full pill toggles — actual squares con check marksSelect / Dropdown
Sección titulada «Select / Dropdown»same as input, + chevron de la paletadropdown panel: bg ink-2, border-warm, subtle shadowitem hover: bg ink-3item active: bg terracotta/10 border-left terracotta 2pxNavigation
Sección titulada «Navigation»Top bar
Sección titulada «Top bar»Anatomía:
┌────────────────────────────────────────────────┐│ Academia Agentes Home Catálogo Docs ││ ─── │ ← subtle bottom line└────────────────────────────────────────────────┘Specs:
bg: ink con 95% opacity + backdrop-blur-sm (subtle, NOT glassmorphism)border-bottom: 1px border-warmpadding: 12px 24pxheight: 56pxlogo: Fraunces 18px 600, terracotta accent colornav items: Work Sans 15px, text-secondary, hover → text-primaryactive item: text-primary, border-bottom 2px terracotta (inline)Chapter tabs (within lesson)
Sección titulada «Chapter tabs (within lesson)»Horizontal scroll con themed accents:
bg: ink-2 con backdrop-blurtab inactive: bg-neutral-800/50, text-muted, 12pxtab current: bg [chapter-theme-accent], text inktab completed: bg ink-3, text-secondary, prefix ✓gap between: 8pxpadding per tab: 6px 12pxradius: 4pxProgress bar
Sección titulada «Progress bar»Regla: progress bars son CRUCIALES para engagement. No escondidos.
height: 4-6px (visible)bg (track): ink-3bg (filled): terracotta o gradient sutil terracotta → cempazúchiltransition: width 300-500ms ease-outAudio player (StepAudioPlayer)
Sección titulada «Audio player (StepAudioPlayer)»Anatomía crucial — sticky top para siempre visible:
┌────────────────────────────────────────────────┐│ [▶] 🔴 Narrando... 0:12 / 0:45 [↺] │ ← controls (siempre)│ ━━━━━━━━━━━━━━━━━━──────────────────────── │ ← progress visible│ ││ Karaoke captions paragraph... │ ← text below│ past words bright, current violet/terracotta, ││ future words dimmed. │└────────────────────────────────────────────────┘
bg: ink-2border: 1px terracotta/50 (brand accent, NOT violet)play button: terracotta circle, 36-40px, pulse while playingstatus label: Work Sans 500 uppercase 11px - playing: terracotta - ended: nopal (green) - blocked: cempazúchil (yellow)progress track: ink-3progress fill: terracottatime display: JetBrains Mono 12px text-mutedKaraoke word states:
- Future:
text-muted(#8a7a6a) - Current:
terracotta(#d67a3c) bold + slight scale(1.03) - Past:
text-primary(#f4ecdf) normal
Visual renderers (chapter internals)
Sección titulada «Visual renderers (chapter internals)»ScreenshotTerminal
Sección titulada «ScreenshotTerminal»Keep current chrome style BUT adjust colors:
outer bg: ink (#1a1511) con slight inner shadowchrome bar: ink-2 con macOS dots NOT in Apple exact colors — use ours: red: oxblood yellow: cempazúchil green: nopalbody font: JetBrains Mono 13pxprompt color: terracottacommand color: text-primaryoutput: text-secondarycaption: Work Sans 12px italic below, text-mutedScreenshotEditor
Sección titulada «ScreenshotEditor»chrome bar: ink-2 con file tab highlighted en terracotta border-bottomfile path: JetBrains Mono 12px text-secondaryline numbers: text-mutedcode: JetBrains Mono 13px text-primaryhighlight line bg: terracotta/15 (NOT violet)annotation arrow + text: añilDiagramStages
Sección titulada «DiagramStages»Container:
bg: ink-2 with paper texture SVG overlay (very subtle, 3-5% opacity)border: 1px border-warmpadding: 20px (tighter than before)svg container: min-height 150px (no 200+), responsivecaption: Work Sans 13px text-secondary centerstage dots: ink-3 default, terracotta current, hover text-secondaryMini Quiz
Sección titulada «Mini Quiz»bg: ink-2border: 1px border-warmpadding: 20-24px
question: Fraunces 18px 600 text-primaryoption default: bg ink-3, border border-warm, text text-primaryoption hover: border terracotta/50option selected: bg terracotta/10, border terracottaoption correct revealed: bg nopal/20, border nopal, check mark nopaloption wrong revealed: bg oxblood/20, border oxblood, x mark oxbloodexplanation: bg ink-3 inset, text-secondary, smCode blocks (inline y block)
Sección titulada «Code blocks (inline y block)»Inline code (en prosa)
Sección titulada «Inline code (en prosa)»bg: ink-3padding: 2px 6pxradius: 3pxfont: JetBrains Mono 0.9em (ligeramente smaller que body)color: terracotta o cempazúchil (accent)Block code (código largo)
Sección titulada «Block code (código largo)»bg: ink-3 oscuro (maybe even darker, #1a1410)border: 1px border-warmradius: 6pxpadding: 16px 20pxcopy button: top-right ghost button, tiny
syntax highlighting theme: Tokyo Night Warm o One Light (warm side)NEVER Dracula (too cool) ni Cobalt (too saturated)Badges / tags
Sección titulada «Badges / tags»bg: ink-3text: text-secondarypadding: 3px 8pxradius: 3px (NOT pill!)font: Work Sans 500 11px uppercase letter-spacing 0.06em
variants:- default: text-secondary on ink-3- accent: [color]/15 bg, [color] text, [color]/30 border (used for chapter lane: terracotta for Builder, añil for Operator, etc.)Shadow scale
Sección titulada «Shadow scale»Very restrained. NO floating pills.
shadow-sm: 0 1px 2px rgba(0,0,0,0.2) → card hovershadow: 0 2px 8px rgba(0,0,0,0.25) → dropdowns, popoversshadow-md: 0 4px 16px rgba(0,0,0,0.3) → modals (rare)shadow-lg: 0 8px 32px rgba(0,0,0,0.4) → very rare, hero elementsLos accents NEVER glow with shadow-[color]-500/50. Si hay resalte, es con borde, no con glow.
Animation principles
Sección titulada «Animation principles»- Fast & purposeful: 120-250ms para feedback, 300-500ms para layout changes
- Easing:
ease-outpara entries,ease-in-outpara two-way - Scale animations:
1.0 → 1.02max (no1.1bouncy) - NO
animate-pulseen todo — solo para estados activos (live recording, loading) - Respect
prefers-reduced-motion— todas las transitions se desactivan
Dark mode vs Light mode
Sección titulada «Dark mode vs Light mode»Default es dark mode warm. Light mode eventual toggle:
html[data-theme="light"] { /* palette flip */ --bg: var(--color-paper); --text: var(--color-ink); /* ... */}Regla: NUNCA asumir que el user está en uno u otro — usa tokens, no hex directo.
Responsive behavior
Sección titulada «Responsive behavior»Mobile-first obligatorio. Tablet (768+) → añade comodidades. Desktop (1024+) → layout expandido.
- Tipografía: reducir 1-2 steps en mobile
- Padding containers: reducir 30-40%
- Tabs: scroll horizontal, NO se envuelven a 2 líneas
- Cards: stack vertical en mobile, grid en tablet+
- Sidebar: hidden en mobile, drawer via menu
Anti-patterns UI
Sección titulada «Anti-patterns UI»Lo que nuestro design system EXPLÍCITAMENTE evita:
- ❌ Glassmorphism:
backdrop-blur-lgconbg-white/10 - ❌ Rounded-full pills para buttons y badges
- ❌ Bento grids con 8 cards de sizes diferentes
- ❌ Gradient fills en cards (
bg-gradient-to-br) - ❌ Shadow glows con color (
shadow-[color]-500/50) - ❌ Animate pulse en todos los loading states
- ❌ Borders coloridos con rounded-2xl (tipo cards AI marketing pages)
- ❌ Emoji grandes como decoración (emoji ≤ 1em, inline)
- ❌ Hover-scale-105 transitions
- ❌ Tooltips con animate-bounce
- ❌ Frosted glass modals