Resumen
Módulo public/informes/_kb/ que centraliza la identidad visual de Esferic Labs en los reportes estáticos: tema oscuro unificado y un sistema de “glosa” (glosario flotante) que marca acrónimos y términos técnicos con tooltips accesibles de bajo impacto.
El globo flotante reutilizable (kb-tip) aparece al pasar el ratón o enfocar con teclado sobre cualquier <abbr data-kb="...">, escapando contenedores recortados mediante position: fixed. Apagable por página (<html data-kb-off>) o globalmente (KB_ENABLED = false).
Componentes
kb.css (111 líneas)
Paleta oscura derivada del tema del workspace (globals.css), calibrada para lectura larga sin deslumbrar:
- Colores base: near-black (
#0a0d12bg,#e7edf5fg), azul de marca (#2962ffaccent), cyan (#22d3eeaccent-2). - Tokens semánticos:
--kb-surface-2para el globo,--kb-accent-ink(#6ea8ff) para texto legible en oscuro,--kb-border-softpara separadores sutiles. - Glosa visual:
[data-kb]se marca con subrayado punteado (text-decoration: underline dotted) en--kb-accent-inkal 60%, espesor 1px, offset 3px (low-impact). - Globo flotante:
max-width: 300px,box-shadowde doble capa (10px blur + 0px inner),transition: opacity 0.14s ease-out,z-index: 2147483000(semántico, por encima de todo). - Accesibilidad:
:focus-visiblecon outline 2px + outline-offset,role="tooltip"en el DOM, respetaprefers-reduced-motion: reduce.
kb.js (100 líneas)
Comportamiento del glosario:
- Binding: al cargar, busca todos los
[data-kb]y liga event listeners (mouseenter/mouseleave + focus/blur). Preservatabindex="0"si no existe. - Show/Hide: una única instancia de
div.kb-tip(reutilizada) que se posiciona dinamáticamente:- Arriba del elemento por defecto, 8px de separación.
- Si no cabe arriba (top < pad), cambia a debajo (
r.bottom + pad). - Centra horizontalmente, clampea a viewport (nunca sale fuera de pantalla).
- Contenido dinámico:
<span class="kb-tip-term">con el término (.textContentdel elemento), seguido del contenido dedata-kb(la definición). - Apagado: global con
KB_ENABLED = true/falseo por página con<html data-kb-off>(no liga event listeners si está presente). - Cierre: Escape key, scroll (oculta pero no destruye), resize.
Integración en reportes
Ambos reportes (roast/ y storm/) ahora incluyen:
<link rel="stylesheet" href="/informes/_kb/kb.css" />
<script src="/informes/_kb/kb.js" defer></script>
Y marcan términos específicos con <abbr data-kb="...">:
- DCIM: “Data Center Infrastructure Management: software para gestionar y vigilar en vivo la infraestructura de un datacenter — qué equipo hay, dónde está y cómo funciona”
- on-premise: “On-premise: que corre en la propia infraestructura del cliente, dentro de su red, sin depender de la nube de nadie”
Además, ambos reportes aplican tema oscuro forzado:
roast/:<html lang="es" data-theme="dark">(el atributodata-themees para referencia; el CSS oscuro de kb.css ya tiene soberanía de orden).storm/: bloque CSS adicional que sobrescribe colores clave (:rootcon--ink,--bg-soft,--blue, etc.) +body { background: #05070a; }+.page { background: #0b0e14; }.
Decisiones de diseño
-
Un único tooltip (DOM reuse): en lugar de crear un globo por término, reutiliza una instancia única (
tip), lo que reduce overhead y evita conflictos de z-index. -
Position: fixed + viewport clamping: el globo puede vivir dentro de cualquier contenedor (iframe, scroll, overflow:hidden) sin ser recortado. Se recalcula posición al medir su tamaño real (no usa valores hardcodeados).
-
Low-impact visual: el subrayado punteado + color
--kb-accent-ink60% es visible sin ser invasivo. Respetaprefers-reduced-motion. -
Apagado granular:
KB_ENABLEDpermite desactivar globalmente sin editar HTML, y<html data-kb-off>permite excepción por página. -
Accesibilidad nativa:
role="tooltip",tabindex="0"automático, focus-visible con outline, cierre con Escape, sin dependencias de ARIA adicional compleja.
Extensibilidad
El módulo es agnóstico: cualquier página del workspace puede importarlo añadiendo las dos líneas de <link> y <script>, y luego marcar sus propios términos con <abbr data-kb="...">. Caso de uso típico:
- Reportes técnicos (roast, storm, etc.).
- Documentación interna con glosario dinámico.
- Páginas públicas que quieran identidad Esferic.
Véase también
- [[concept—ux—accesibilidad-nativa]]
- [[concept—design—low-impact-ui]]
- [[feature—informes—roast-appliance-2026]]
- [[feature—informes—storm-appliance-2026]]
- [[entity—public—style—global-tokens]]