🎨 Guía de creación de temas
Aprende el esquema JSON de temas de ForcedSkin y las reglas de los campos de paleta: diseña paletas para cualquier sitio y envíalas a la comunidad.
Inicio rápido
Elige un modo
Decide si el tema se ejecuta en light (paletas claras) o dark (paletas oscuras).
Completa los colores
Sigue la especificación de campos que aparece abajo — como mínimo, tu JSON debe incluir todas las claves obligatorias.
Enviar para revisión
En la página de Temas haz clic en «Enviar tema». Los administradores lo aprueban antes de que sea visible para todos.
Campos de color
Todas las entradas de la paleta deben ser cadenas hex (#RRGGBB) o valores CSS rgba(...).
backgroundObligatorioFondo principal de la página — los temas claros se acercan al blanco, los oscuros a neutros profundos. CSS var: --color-background
Ejemplo: #F8FFF8 / #101410
foregroundObligatorioTexto principal — contraste legible frente al fondo. CSS var: --color-foreground
Ejemplo: #2C3E2C / #E0E0E0
surfaceObligatorioRelleno de tarjetas/paneles/contenedores — ligeramente elevado respecto al fondo. CSS var: --color-surface
Ejemplo: #F0FFF0 / #1E221E
surfaceMutedOpcionalHovers atenuados y subcontenedores escalonados desde surface. CSS var: --color-surface-muted
Ejemplo: #F5FDF5 / #161816
borderObligatorioLíneas finas y divisores — normalmente grises de baja saturación o tonos semitransparentes. CSS var: --color-border
Ejemplo: #D8E8D8 / #333633
mutedObligatorioTexto secundario y placeholders. CSS var: --color-muted
Ejemplo: #6C7E6C / #A0A0A0
primaryObligatorioRampa de marca principal para botones/enlaces/focus — puede ser un color único o una rampa (50–950). Requiere al menos los tonos 500/600/700. Se mapea a variables CSS --color-primary- más tokens de tono (50–950)
Ejemplo: { "500": "#4CAF50", "600": "#43A047", "700": "#388E3C" }
secondaryOpcionalRampas de acento secundarias para chips/botones ghost — la estructura coincide con primary; se mapea a --color-secondary- más tokens de tono
Ejemplo: { "500": "#AAA", ... }
accentOpcionalDestacados, badges y colores de foco — la estructura coincide con primary; se mapea a --color-accent- más tokens de tono
Ejemplo: { "500": "#FFEB3B", ... }
varsOpcionalPropiedades CSS personalizadas arbitrarias — las claves omiten «--»; los valores se aplican tal cual en :root
Ejemplo: { "custom-radius": "8px" }
Rampas de color
Las claves JSON primary, secondary y accent aceptan cualquiera de los dos estilos de creación siguientes:
Compacta (tres tonos principales)
{
"primary": {
"500": "#4CAF50",
"600": "#43A047",
"700": "#388E3C"
}
}El motor promueve el tono 500 como matiz predeterminado; 600/700 cubren los estados hover/active.
Rampa completa (50 → 950, once paradas)
{
"primary": {
"50": "#E8F5E9",
"100": "#C8E6C9",
...
"500": "#4CAF50",
...
"950": "#0F3D12"
}
}Publicar la rampa completa produce transiciones tonales más suaves en todas partes.
Ejemplos completos
🌿 Ejemplo claro (light-mint)
{
"background": "#F8FFF8",
"foreground": "#2C3E2C",
"surface": "#F0FFF0",
"surfaceMuted": "#F5FDF5",
"border": "#D8E8D8",
"muted": "#6C7E6C",
"primary": {
"50": "#E8F5E9",
"100": "#C8E6C9",
"200": "#A5D6A7",
"300": "#81C784",
"400": "#66BB6A",
"500": "#4CAF50",
"600": "#43A047",
"700": "#388E3C",
"800": "#2E7D32",
"900": "#1B5E20",
"950": "#0F3D12"
},
"secondary": {
"500": "#AAAAAA",
"600": "#999999",
"700": "#777777"
},
"accent": {
"500": "#FFEB3B",
"600": "#FDD835",
"700": "#FBC02D"
}
}🌑 Ejemplo oscuro (dark-forest)
{
"background": "#101410",
"foreground": "#E0E0E0",
"surface": "#1E221E",
"surfaceMuted": "#161816",
"border": "#333633",
"muted": "#A0A0A0",
"primary": {
"500": "#4A9B6B",
"600": "#3F855C",
"700": "#346F4D"
}
}Variables personalizadas (vars)
Si los tokens predeterminados no bastan, añade CSS vars extra bajo un nodo vars — omite el prefijo -- en cada clave.
{
"background": "#101010",
"foreground": "#E0E0E0",
...
"vars": {
"radius-card": "16px",
"shadow-card": "0 2px 12px rgba(0,0,0,0.4)"
}
}Reglas de slug (name)
- Solo letras ASCII en minúsculas, dígitos y guion (
a-z 0-9 -). - Prefiere pares concisos «modo-estilo» como «dark-ocean» o «light-sakura».
- Los slugs deben ser únicos a nivel global — no pueden cambiarse tras publicarse, así que revísalos antes.
- Longitud máxima de 50 caracteres.
Envío y revisión
🔐 Inicia sesión antes de enviar.
⏳ Los envíos entran en cola de revisión; el equipo suele responder en 1-3 días laborables.
✅ Los temas aprobados aparecen en el mercado para que todos los marquen como favoritos.
❌ Colores inválidos, nombres en conflicto o incumplimientos de política serán rechazados — elimina y envía una versión corregida.
🚫 Sin código malicioso, contenido de odio ni paletas obviamente infractoras.
¿Listo? Ve al mercado de temas y publica tu paleta.
🎨 Enviar un tema