Implementar modo oscuro con Claude Code
Modo oscuro con variables CSS, preferencias del sistema, localStorage, hidratación segura y accesibilidad.
Empieza por el riesgo de producto
Implementar modo oscuro con Claude Code no consiste en pedir a Claude Code una pantalla más vistosa. El objetivo práctico es mejorar una interfaz real sin romper conversión, lectura, accesibilidad ni diseño móvil. En producción importan detalles poco brillantes: estados vacíos, carga, errores, foco de teclado, textos largos, anuncios, bloques de código y posición del CTA.
Lee también claude code design system, claude code accessibility, claude code code review. Para las referencias oficiales usa Claude Code docs, MDN prefers-color-scheme, MDN color-scheme, WCAG contrast. La instrucción a Claude Code debe incluir objetivo, límites, use case, pitfall y verificación.
Prompt recomendado
Implementa esta mejora con el cambio seguro más pequeño.
Respeta componentes existentes, tokens de diseño y rutas.
Cubre use case, pitfall, accesibilidad, móvil y estados de error.
Devuelve código copiable y una review checklist.
Use case checklist
- Landing pages y artículos donde el lector debe encontrar el siguiente paso sin perder confianza.
- Dashboards SaaS con estados de carga, vacío, error y éxito.
- Flujos de compra, registro y consulta donde el botón principal debe seguir dominando.
- Revisión en equipo, donde Claude Code entrega código y criterios de verificación.
Código de implementación
:root {
color-scheme: light;
--color-page: #ffffff;
--color-surface: #f8fafc;
--color-text: #0f172a;
--color-muted: #475569;
--color-border: #dbe3ef;
--color-link: #2563eb;
--color-focus: #f59e0b;
}
[data-theme="dark"] {
color-scheme: dark;
--color-page: #0b1120;
--color-surface: #111827;
--color-text: #f8fafc;
--color-muted: #cbd5e1;
--color-border: #334155;
--color-link: #93c5fd;
--color-focus: #fbbf24;
}
body {
background: var(--color-page);
color: var(--color-text);
}
:focus-visible {
outline: 3px solid var(--color-focus);
outline-offset: 3px;
}
const storageKey = "theme";
const root = document.documentElement;
const stored = localStorage.getItem(storageKey);
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
const theme = stored === "light" || stored === "dark" ? stored : prefersDark ? "dark" : "light";
root.dataset.theme = theme;
type Theme = "light" | "dark" | "system";
export function ThemeToggle({ value, onChange }: { value: Theme; onChange: (theme: Theme) => void }) {
return (
<fieldset aria-label="Theme">
{(["light", "dark", "system"] as const).map((theme) => (
<button
key={theme}
type="button"
aria-pressed={value === theme}
onClick={() => onChange(theme)}
>
{theme}
</button>
))}
</fieldset>
);
}
Pitfall checklist
- Optimizar solo para la captura de pantalla puede empeorar el recorrido real.
- Depender solo del color reduce la accesibilidad.
- No probar a 375px puede crear scroll horizontal en móvil.
- Ignorar datos vacíos, etiquetas largas y red lenta provoca errores reales.
- Permitir cambios no relacionados aumenta el coste de revisión.
Verificación
Pide a Claude Code una segunda pasada solo de review. Debe listar archivos cambiados, riesgos, comprobaciones de navegador y pruebas manuales. Después revisa la página en móvil, confirma que no hay overflow, que el bloque de código se desplaza, que el CTA sigue visible y que el foco se ve.
Ángulo de monetización
Este trabajo afecta anuncios, tarjetas de producto, enlaces de consulta, tablas de precios y formularios. Si quieres aplicarlo en un repositorio real, la página de formación y consultoría Claude Code convierte estas prácticas en un flujo repetible.
Nota de prueba práctica
Probé el patrón en tres pasos: implementación, review y verificación móvil. El cambio fue más fácil de revisar que un rediseño grande y permitió detectar problemas antes del despliegue.
Notas extra de revisión
- Compara capturas antes y después, revisando CTA, anuncios, texto, formularios y bloques de código.
- Pregunta a Claude Code qué se puede eliminar, qué nombres no encajan y qué supuestos son arriesgados.
- Antes de desplegar, prueba móvil, escritorio, teclado, red lenta, datos vacíos y recarga.
Notas extra de revisión
- Compara capturas antes y después, revisando CTA, anuncios, texto, formularios y bloques de código.
- Pregunta a Claude Code qué se puede eliminar, qué nombres no encajan y qué supuestos son arriesgados.
- Antes de desplegar, prueba móvil, escritorio, teclado, red lenta, datos vacíos y recarga.
Notas extra de revisión
- Compara capturas antes y después, revisando CTA, anuncios, texto, formularios y bloques de código.
- Pregunta a Claude Code qué se puede eliminar, qué nombres no encajan y qué supuestos son arriesgados.
- Antes de desplegar, prueba móvil, escritorio, teclado, red lenta, datos vacíos y recarga.
Notas extra de revisión
- Compara capturas antes y después, revisando CTA, anuncios, texto, formularios y bloques de código.
- Pregunta a Claude Code qué se puede eliminar, qué nombres no encajan y qué supuestos son arriesgados.
- Antes de desplegar, prueba móvil, escritorio, teclado, red lenta, datos vacíos y recarga.
PDF gratis: cheatsheet de Claude Code
Introduce tu email y descarga una hoja con comandos, hábitos de revisión y flujos seguros.
Cuidamos tus datos y no enviamos spam.
Sobre el autor
Masa
Ingeniero enfocado en workflows prácticos con Claude Code.
Artículos relacionados
Escalera de permisos de Claude Code para ampliar acceso sin perder control
Pasa de read-only a ediciones limitadas, comandos de prueba y checks de deploy con menos riesgo.
Claude Code Small PR Proof Pack: cambios pequeños que sí se pueden revisar
Un paquete de prueba para PRs de Claude Code: diff, checks, URL pública, CTA y rollback.
Gate de revisión antes del commit con Claude Code
Cómo revisar con Claude Code antes del commit: diff, build, URL pública, Gumroad, consultoría, tests y archivos ajenos.