Temas y fuentes
plasmoid es dueño de su propio CSS: una hoja de estilos pequeña y legible, impulsada por propiedades personalizadas de CSS, con modos claro y oscuro incorporados. No hay Tailwind, ni framework de CSS, ni paso de compilación más allá del propio plasmoid.
Claro y oscuro
Los colores son variables de CSS con paletas clara y oscura. La elección del lector
se aplica antes del primer renderizado mediante un diminuto script en línea, así
que no hay un destello del tema equivocado (FOUC). Un conmutador en el armazón cambia
y recuerda la preferencia. Con JavaScript desactivado, el sitio respeta el
prefers-color-scheme del sistema operativo.
Ambas paletas se verifican para garantizar un contraste de texto adecuado.
Tokens de diseño (tokens.css) — elige un tono u override
Las variables de color viven en un /assets/tokens.css generado, enlazado antes de
la hoja de estilos del chrome. Lleva la paleta completa (neutros, acento, la rampa de
gradiente de marca --ramp-1…4 + --grad-main, colores de botones y semánticos) para
claro y oscuro. El chrome —y cualquier landing que escribas— consumen estos var(--…),
así que todo el sitio se tematiza desde un archivo.
Ese archivo se ensambla a partir de una capa base compartida (neutros, semánticos, elevación) más un tono superpuesto (los matices, y las superficies que el tono ajuste).
El valor por defecto incluido
plasmoid es software distribuible, así que el binario incluye exactamente un tono:
un default sencillo, neutro y agnóstico de marca (superficies de escala de grises con
buen gusto + un acento sereno, claro/oscuro completo). Se ve bien en una página de
documentación básica de fábrica, con cero configuración. Eso es todo lo que la
mayoría de los proyectos necesitan.
[theme]
palette = "default" # the built-in neutral tone (this is also the default if omitted)
Trae tu propia biblioteca de temas (themes_dir)
Los tonos más ricos o de marca viven fuera del binario, en un directorio de
biblioteca de temas al que apuntas plasmoid. Una biblioteca es simplemente una carpeta
con la misma forma que tu docs/: un tokens.base.css y un themes/<tono>.css por cada
tono.
[theme]
themes_dir = "../brand" # relative to this docs dir (absolute paths also work)
palette = "electric-blue" # resolved from <themes_dir>/themes/electric-blue.css
O pásalos en la línea de comandos (estos anulan la configuración):
Un --themes-dir relativo se resuelve respecto a tu directorio actual; un
[theme] themes_dir relativo se resuelve respecto al directorio de documentación. La
biblioteca se lee en tiempo de compilación: sin red, sin @import, totalmente sin
conexión y reproducible.
Orden de resolución
Para un palette dado, plasmoid toma el primero que exista:
- capa base:
docs/tokens.base.css→<themes_dir>/tokens.base.css→ la base incluida - tono superpuesto:
docs/themes/<palette>.css→<themes_dir>/themes/<palette>.css→ eldefaultincluido (solo parapalette = "default") - wholesale: un
docs/tokens.csscompleto cortocircuita todo — plasmoid lo emite tal cual (copia el/assets/tokens.cssemitido como punto de partida).
Un palette que no se resuelve en ningún sitio es un error de compilación que enumera
exactamente dónde buscó plasmoid, y te recuerda que configures themes_dir si aún no lo
has hecho.
El contrato de tokens
Una base + un tono juntos deben definir cada variable que el chrome consume. Para
escribir un tono personalizado (o una biblioteca completa), establece todos estos para
claro, y anula lo que cambie para oscuro (:root[data-theme="dark"] + un espejo
@media (prefers-color-scheme: dark)):
| Grupo | Tokens |
|---|---|
| Superficies y texto | --bg, --bg-alt, --bg-elev, --bg-code, --border, --fg, --fg-muted |
| Acentos | --accent, --accent-fg (texto sobre un relleno de acento), --accent-2 |
| Rampa de gradiente | --ramp-1 … --ramp-4 (más claro → más profundo) |
| Gradientes compuestos | --grad-main (4 paradas, superficies grandes), --grad-accent (2 paradas) |
| Botones (sólidos) | --btn-bg, --btn-bg-hover, --btn-bg-active, --btn-fg, --btn-shadow, --btn-shadow-hover, --btn-shadow-soft |
| Efectos | --glow, --shadow |
| Estados semánticos | --ok, --warn, --danger |
Por convención, la capa base aporta los neutros (superficies/texto), la elevación
--shadow y los estados semánticos; cada tono aporta los acentos, la rampa, los
gradientes, los botones y --glow (y puede reajustar los neutros para adecuarse a su
matiz). Cada tono usa los mismos nombres de token, así que es un reemplazo directo:
solo difieren los colores.
Como la landing enlaza el mismo /assets/tokens.css, tu landing y tu documentación
permanecen sincronizadas sea cual sea la ruta que elijas.
Fuentes
Las fuentes están alojadas localmente: sin CDN de terceros, sin red en tiempo de compilación. plasmoid incluye una opción por defecto que prioriza la accesibilidad y te permite sustituirla:
[theme]
font_body = "Atkinson Hyperlegible" # the bundled default
font_mono = "JetBrains Mono"
fonts = "self-hosted" # "self-hosted" (default) | "system"
- Opción por defecto incluida. De fábrica, el texto del cuerpo usa Atkinson
Hyperlegible (Braille Institute, OFL), una tipografía diseñada para la máxima
legibilidad. plasmoid emite su
@font-facey suwoff2en/assets/fonts/(con la licencia), de modo que cada proyecto obtiene una buena tipografía sin ninguna configuración.font-display: swapsignifica que el texto se renderiza de inmediato con una fuente de reserva y la cambia por la fuente web cuando está lista. - Trae la tuya. Coloca archivos
woff2endocs/fonts/con los nombresbody,body-bold,body-italic,body-bolditalic(y lo mismo paramono), luego configurafont_body/font_monocon los nombres de tus familias. plasmoid conecta el@font-facepara ellas y omite la opción por defecto incluida. - Solo del sistema. Configura
fonts = "system"para la opción de cero bytes: sin@font-face, solo tus familias encabezando una sólida pila de reserva del sistema.
En cualquier caso, las familias encabezan una pila de reserva del sistema, así que el texto es legible incluso antes (o sin) cualquier fuente web.
Resaltado de código
Los bloques de código se resaltan en tiempo de compilación en clases de CSS (no estilos en línea), de modo que una única salida HTML resaltada queda tematizada tanto para claro como para oscuro mediante hojas de estilo con alcance acotado. No se envía ningún JavaScript de resaltado de sintaxis al navegador.
Accesibilidad integrada
El armazón generado usa puntos de referencia semánticos, un enlace de salto al
contenido que realmente mueve el foco, contornos de foco visibles, aria-current en
el elemento de navegación activo y un combobox de búsqueda navegable con el teclado.
La accesibilidad forma parte de la salida por defecto, no es un complemento.