Assets y fuentes
Los assets son archivos estáticos del tema (CSS, JS, imágenes, fuentes). OmniBuy aplica fingerprinting automático para cache-busting.
Estructura de assets
themes/<tema>/assets/
├── theme.css ← Estilos principales
├── theme.js ← JavaScript del tema
├── fonts/
│ └── *.woff2 ← Fuentes self-hosted
└── images/
└── *.svg ← Iconos
Uso en templates
Usa los filtros asset_url o asset para obtener URLs fingerprinted:
<link rel="stylesheet" href="{{ 'theme.css' | asset_url }}">
<script src="{{ 'theme.js' | asset_url }}"></script>
<img src="{{ 'logo.svg' | asset_url }}" alt="Logo">
El filtro asset_url resuelve la URL con el hash del contenido:
assets/theme.css → /assets/theme.a3b4c5d6.css
Esto permite cache agresivo sin problemas de actualización.
Variables CSS del tema
El snippet _base/snippets/css_vars.html inyecta variables CSS desde los settings del tema:
{{ cssVars
"accent-color" .Settings.accent_color
"font-heading" .Settings.font_heading
"font-body" .Settings.font_body
"bg-color" .Settings.bg_color
"text-color" .Settings.text_color
}}
Esto genera un bloque <style> con las variables CSS custom:
:root {
--accent-color: #6366F1;
--font-heading: 'Inter', sans-serif;
--font-body: 'Inter', sans-serif;
--bg-color: #ffffff;
--text-color: #0f172a;
}
Fuentes web
Google Fonts
Usa el filtro googleFontsURL para generar la URL de Google Fonts:
{{ googleFontsURL "Inter:wght@400;500;600;700" "JetBrains+Mono:wght@400;500" }}
Resultado:
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
Fuentes self-hosted
Para fuentes self-hosted, colócalas en assets/fonts/ y referencialas en tu CSS:
@font-face {
font-family: 'MiFuente';
src: url('{{ "fonts/mifuente.woff2" | asset_url }}') format('woff2');
font-weight: 400;
font-display: swap;
}
Fingerprinting
El sistema de fingerprinting calcula un hash SHA-256 del contenido del archivo y lo inserta en el nombre:
theme.css → theme.a3b4c5d6.css
theme.js → theme.f7e8d9c0.js
- Los archivos se sirven con
Cache-Control: max-age=31536000,immutable - El hash cambia solo cuando el contenido cambia
- No necesitas renombrar archivos manualmente
Inyección de assets embebidos
Las secciones pueden incluir CSS y JS inline:
{{ define "sections/mi-seccion" }}
{{ style }}
.mi-seccion { padding: {{ .section.padding }}px; }
{{ endstyle }}
<section class="mi-seccion">
<!-- contenido -->
</section>
{{ script }}
document.querySelector('.mi-seccion').addEventListener('click', () => {
// lógica
});
{{ endscript }}
{{ end }}
Los tags {{ style }} y {{ script }} extraen el CSS/JS del HTML renderizado y lo inyectan en el <head> de la página. Esto permite secciones auto-contenidas.
CSS del fluid engine
Los assets del fluid engine viven en _base/assets/:
| Archivo | Contenido |
|---|---|
header-variants.css | Estilos de las 26 variantes de header |
hero-variants.css | Estilos de las 10 variantes de hero (615 líneas) |
hero-variants.js | Lógica de carousel, video, countdown del hero |
alpine.min.js | Alpine.js para interactividad |
model-viewer.min.js | Google Model Viewer para AR |
Estos assets son heredados por todos los temas vía _base. No necesitas copiarlos.
Buenas prácticas
- Usa variables CSS para colores y tipografía — no valores hardcoded
- Self-host fuentes críticas — mejor que Google Fonts para performance
- Separa CSS por componente — maintén
theme.cssorganizado - No copies assets de
_base— están heredados automáticamente - Usa
asset_urlsiempre — nunca hardcodees URLs de assets