From eb435642c9a22b73fb288f6826a7960f8f017b70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leopoldo=20Rodr=C3=ADguez?= Date: Tue, 20 Oct 2026 18:00:17 -0600 Subject: [PATCH] auto-sync 2026-10-20 18:00 --- docs/actas/index.md | 4 +- docs/admin.html | 7 +- docs/bitacora.md | 65 ++ docs/campo/index.md | 14 +- docs/cuenta.html | 17 +- docs/descargas/index.md | 2 +- .../procedimiento-diagnostico-campo.md | 2 +- docs/diagnostico/tablero-campo.html | 200 +----- docs/fonts/OFL-Atkinson-Hyperlegible-Mono.txt | 93 +++ docs/fonts/OFL-Atkinson-Hyperlegible-Next.txt | 93 +++ docs/fonts/OFL-League-Spartan.txt | 93 +++ .../atkinson-hyperlegible-mono-latin.woff2 | Bin 0 -> 17752 bytes .../atkinson-hyperlegible-next-latin.woff2 | Bin 0 -> 33996 bytes docs/fonts/league-spartan-latin.woff2 | Bin 0 -> 24020 bytes docs/formularios/acta.css | 192 +++-- docs/formularios/acta.js | 48 +- docs/formularios/ardusimple.html | 1 + docs/formularios/banco.html | 1 + docs/formularios/dano.html | 1 + docs/formularios/diagnostico.html | 1 + docs/formularios/ensamble.html | 1 + docs/formularios/envio.html | 1 + docs/formularios/ethernet-serie.html | 1 + docs/formularios/instalacion.html | 3 +- docs/formularios/integracion.html | 1 + docs/formularios/modem4g.html | 1 + docs/formularios/prueba-bateria.html | 1 + docs/formularios/recepcion.html | 1 + docs/formularios/reflasheo.html | 1 + docs/formularios/v4.html | 3 +- docs/formularios/v5.html | 1 + docs/formularios/ver.html | 7 +- docs/hardware/index.md | 4 +- docs/historia/index.md | 2 +- docs/img/favicon.png | Bin 12461 -> 3261 bytes docs/img/helgen-icono-180.png | Bin 0 -> 6696 bytes docs/img/helgen-logo-claro.svg | 1 + docs/img/helgen-logo-indigo.svg | 1 + docs/img/helgen-logo-white.png | Bin 12800 -> 0 bytes docs/img/helgen-logo.png | Bin 38343 -> 0 bytes docs/img/helgen-mascara.svg | 1 + docs/index.md | 10 +- docs/inventario/index.md | 12 +- docs/inventario/inventario.html | 241 +------ docs/js/sitio.js | 33 + docs/js/tema.js | 43 ++ docs/procedimientos/ciclo-de-vida.md | 2 +- docs/procedimientos/v4-prueba-fw-0.5.6.md | 4 +- docs/produccion/index.md | 10 +- docs/salir.html | 3 +- docs/sitios/index.md | 16 +- docs/sitios/sitio.html | 204 +----- docs/stylesheets/extra.css | 526 ++++++++++---- docs/stylesheets/helgen.css | 202 ++++++ docs/tablero.html | 224 +----- docs/tableros/actas.md | 173 +++++ docs/tableros/campo.md | 146 ++++ docs/tableros/equipo.html | 226 +----- docs/tableros/equipo.md | 205 ++++++ docs/tableros/index.md | 39 +- docs/tableros/ingenieria.html | 125 +--- docs/tableros/ingenieria.md | 115 +++ docs/tableros/inventario.md | 219 ++++++ docs/tableros/kanban.html | 54 +- docs/tableros/kanban.js | 212 ++++-- docs/tableros/pendientes.md | 47 ++ docs/tableros/produccion.html | 236 +------ docs/tableros/produccion.md | 232 ++++++ docs/tableros/sitio.md | 178 +++++ docs/tableros/tablero.css | 666 ++++++++++++++---- docs/tableros/unidad.md | 268 +++++++ docs/taller/index.md | 4 +- docs/unidad.html | 341 +-------- hooks/frontmatter.py | 47 ++ hooks/iconos.py | 38 + mkdocs.yml | 331 +++++---- overrides/.icons/helgen/actas.svg | 1 + overrides/.icons/helgen/admin.svg | 1 + overrides/.icons/helgen/arriba.svg | 1 + overrides/.icons/helgen/aviso.svg | 1 + overrides/.icons/helgen/barras.svg | 1 + overrides/.icons/helgen/bitacora.svg | 1 + overrides/.icons/helgen/buscar.svg | 1 + overrides/.icons/helgen/campo.svg | 1 + overrides/.icons/helgen/cerrar.svg | 1 + overrides/.icons/helgen/cobre.svg | 1 + overrides/.icons/helgen/cuenta.svg | 1 + overrides/.icons/helgen/derecha.svg | 1 + overrides/.icons/helgen/descargas.svg | 1 + overrides/.icons/helgen/documento.svg | 1 + overrides/.icons/helgen/equipo.svg | 1 + overrides/.icons/helgen/fabrica.svg | 1 + overrides/.icons/helgen/fecha.svg | 1 + overrides/.icons/helgen/historia.svg | 1 + overrides/.icons/helgen/ingenieria.svg | 1 + overrides/.icons/helgen/inicio.svg | 1 + overrides/.icons/helgen/inventario.svg | 1 + overrides/.icons/helgen/izquierda.svg | 1 + overrides/.icons/helgen/liga.svg | 1 + overrides/.icons/helgen/luna.svg | 1 + overrides/.icons/helgen/manuales.svg | 1 + overrides/.icons/helgen/mas.svg | 1 + overrides/.icons/helgen/menu.svg | 1 + overrides/.icons/helgen/mios.svg | 1 + overrides/.icons/helgen/pendientes.svg | 1 + overrides/.icons/helgen/salir.svg | 1 + overrides/.icons/helgen/sitios.svg | 1 + overrides/.icons/helgen/sol.svg | 1 + overrides/.icons/helgen/taller.svg | 1 + overrides/.icons/helgen/tarjetas.svg | 1 + overrides/.icons/helgen/unidad.svg | 1 + overrides/.icons/helgen/visitas.svg | 1 + overrides/main.html | 13 + overrides/partials/logo.html | 3 + overrides/tablero.html | 17 + 115 files changed, 3943 insertions(+), 2423 deletions(-) create mode 100644 docs/bitacora.md create mode 100644 docs/fonts/OFL-Atkinson-Hyperlegible-Mono.txt create mode 100644 docs/fonts/OFL-Atkinson-Hyperlegible-Next.txt create mode 100644 docs/fonts/OFL-League-Spartan.txt create mode 100644 docs/fonts/atkinson-hyperlegible-mono-latin.woff2 create mode 100644 docs/fonts/atkinson-hyperlegible-next-latin.woff2 create mode 100644 docs/fonts/league-spartan-latin.woff2 create mode 100644 docs/img/helgen-icono-180.png create mode 100644 docs/img/helgen-logo-claro.svg create mode 100644 docs/img/helgen-logo-indigo.svg delete mode 100644 docs/img/helgen-logo-white.png delete mode 100644 docs/img/helgen-logo.png create mode 100644 docs/img/helgen-mascara.svg create mode 100644 docs/js/sitio.js create mode 100644 docs/js/tema.js create mode 100644 docs/stylesheets/helgen.css create mode 100644 docs/tableros/actas.md create mode 100644 docs/tableros/campo.md create mode 100644 docs/tableros/equipo.md create mode 100644 docs/tableros/ingenieria.md create mode 100644 docs/tableros/inventario.md create mode 100644 docs/tableros/pendientes.md create mode 100644 docs/tableros/produccion.md create mode 100644 docs/tableros/sitio.md create mode 100644 docs/tableros/unidad.md create mode 100644 hooks/frontmatter.py create mode 100644 hooks/iconos.py create mode 100644 overrides/.icons/helgen/actas.svg create mode 100644 overrides/.icons/helgen/admin.svg create mode 100644 overrides/.icons/helgen/arriba.svg create mode 100644 overrides/.icons/helgen/aviso.svg create mode 100644 overrides/.icons/helgen/barras.svg create mode 100644 overrides/.icons/helgen/bitacora.svg create mode 100644 overrides/.icons/helgen/buscar.svg create mode 100644 overrides/.icons/helgen/campo.svg create mode 100644 overrides/.icons/helgen/cerrar.svg create mode 100644 overrides/.icons/helgen/cobre.svg create mode 100644 overrides/.icons/helgen/cuenta.svg create mode 100644 overrides/.icons/helgen/derecha.svg create mode 100644 overrides/.icons/helgen/descargas.svg create mode 100644 overrides/.icons/helgen/documento.svg create mode 100644 overrides/.icons/helgen/equipo.svg create mode 100644 overrides/.icons/helgen/fabrica.svg create mode 100644 overrides/.icons/helgen/fecha.svg create mode 100644 overrides/.icons/helgen/historia.svg create mode 100644 overrides/.icons/helgen/ingenieria.svg create mode 100644 overrides/.icons/helgen/inicio.svg create mode 100644 overrides/.icons/helgen/inventario.svg create mode 100644 overrides/.icons/helgen/izquierda.svg create mode 100644 overrides/.icons/helgen/liga.svg create mode 100644 overrides/.icons/helgen/luna.svg create mode 100644 overrides/.icons/helgen/manuales.svg create mode 100644 overrides/.icons/helgen/mas.svg create mode 100644 overrides/.icons/helgen/menu.svg create mode 100644 overrides/.icons/helgen/mios.svg create mode 100644 overrides/.icons/helgen/pendientes.svg create mode 100644 overrides/.icons/helgen/salir.svg create mode 100644 overrides/.icons/helgen/sitios.svg create mode 100644 overrides/.icons/helgen/sol.svg create mode 100644 overrides/.icons/helgen/taller.svg create mode 100644 overrides/.icons/helgen/tarjetas.svg create mode 100644 overrides/.icons/helgen/unidad.svg create mode 100644 overrides/.icons/helgen/visitas.svg create mode 100644 overrides/main.html create mode 100644 overrides/partials/logo.html create mode 100644 overrides/tablero.html diff --git a/docs/actas/index.md b/docs/actas/index.md index 952929b..b3e8282 100644 --- a/docs/actas/index.md +++ b/docs/actas/index.md @@ -42,7 +42,7 @@ El acta de ensamble no deja elegir un módulo sin aprobar, sin integración o ya | Acta | Qué registra | Procedimiento | |---|---|---| | [Instalación en campo](../formularios/instalacion.html) | Una por unidad y vehículo: sitio, equipo, alimentación 24 V, antenas, RTK FIX, señal 4G, fotos | [Checklist de puesta en marcha](../procedimientos/v5-checklist-puesta-en-marcha.md) · [Sitios](../sitios/index.md) | -| [Diagnóstico en campo](../formularios/diagnostico.html) | Una por visita; muestra las visitas anteriores y admite fotos desde el teléfono | [Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) · [Tablero de campo](../diagnostico/tablero-campo.html) | +| [Diagnóstico en campo](../formularios/diagnostico.html) | Una por visita; muestra las visitas anteriores y admite fotos desde el teléfono | [Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) · [Tablero de campo](../tableros/campo.md) | | [Envío](../formularios/envio.html) · [Recepción](../formularios/recepcion.html) | El tramo entre el banco y el puerto | [Ciclo de vida](../procedimientos/ciclo-de-vida.md) | | [Daño o incidente](../formularios/dano.html) | Cualquier serie; la marca en todos los formularios. «Reparada» la levanta, «Baja» la hace permanente | [Ciclo de vida](../procedimientos/ciclo-de-vida.md#dano-o-incidente) | @@ -51,7 +51,7 @@ El acta de ensamble no deja elegir un módulo sin aprobar, sin integración o ya 1. Abre el formulario y elige la serie (o los módulos, en integración y ensamble). 2. Llena cada sección conforme avanzas. Se guarda solo en el navegador: al reabrir con la misma serie recuperas lo escrito. 3. Marca el resultado (Aprobada / Falla), escribe tu nombre y confirma que seguiste el procedimiento. -4. Pulsa Enviar acta firmada. Queda en el servidor y en el [tablero](../tablero.html). +4. Pulsa Enviar acta firmada. Queda en el servidor y en el [tablero](../tableros/actas.md). La serie PRUEBA sirve para practicar: no cuenta y se puede reenviar. diff --git a/docs/admin.html b/docs/admin.html index d73d635..a6d4dd0 100644 --- a/docs/admin.html +++ b/docs/admin.html @@ -4,21 +4,22 @@ Administración — HBOX +

Administración de actas

Solo para el administrador.

-
← TableroUsuarios y equipo →
+
← Estado de actasUsuarios y equipo →

Comprobando permisos…

@@ -47,7 +48,7 @@
- 👁 Ver lo que escribí + Ver lo que escribí
@@ -72,7 +73,7 @@

Si olvidaste tu contraseña

No hay recuperación por correo: pídele a Leo que te la restablezca desde esta misma página. - Si todavía no tienes acceso, pídeselo a Leo (Administración → Usuarios y equipo). + Si todavía no tienes acceso, pídeselo a Leo (Administración → Usuarios y equipo).

@@ -94,7 +95,7 @@ function aviso(el, texto, bien) { yo = j.user || ''; $('quien').innerHTML = yo ? 'Entraste como ' + yo + '' + (j.admin ? ' · administrador' : '') - : '⚠ No puedo identificarte. Vuelve a entrar al sitio y recarga esta página.'; + : 'No puedo identificarte. Vuelve a entrar al sitio y recarga esta página.'; if (j.admin) { $('bloqueAdmin').style.display = ''; try { @@ -130,7 +131,7 @@ $('nueva').addEventListener('input', () => { $('ver').addEventListener('click', () => { const t = $('nueva').type === 'password' ? 'text' : 'password'; $('nueva').type = t; $('confirma').type = t; $('actual').type = t; - $('ver').textContent = t === 'text' ? '🙈 Ocultar' : '👁 Ver lo que escribí'; + $('ver').textContent = t === 'text' ? 'Ocultar' : 'Ver lo que escribí'; }); const AVISO_SESION = @@ -148,7 +149,7 @@ $('guardar').addEventListener('click', async () => { }); const j = await r.json(); if (!r.ok || !j.ok) throw new Error(j.error || ('HTTP ' + r.status)); - aviso($('msg'), '✓ Contraseña cambiada.' + AVISO_SESION, true); + aviso($('msg'), 'Contraseña cambiada.' + AVISO_SESION, true); $('actual').value = $('nueva').value = $('confirma').value = ''; $('barra').style.width = '0'; } catch (e) { @@ -169,7 +170,7 @@ $('resetear').addEventListener('click', async () => { }); const j = await r.json(); if (!r.ok || !j.ok) throw new Error(j.error || ('HTTP ' + r.status)); - aviso($('msgR'), '✓ Contraseña de ' + u + ' restablecida. Pásasela en persona o por ' + aviso($('msgR'), 'Contraseña de ' + u + ' restablecida. Pásasela en persona o por ' + 'mensaje directo, y dile que la cambie aquí mismo cuando entre.' + (u === yo ? AVISO_SESION : ''), true); $('nuevaR').value = ''; diff --git a/docs/descargas/index.md b/docs/descargas/index.md index 77a5f8c..156fa1f 100644 --- a/docs/descargas/index.md +++ b/docs/descargas/index.md @@ -15,7 +15,7 @@ version: "2.3" | Módem 4G NTRIP Master | Parámetros `$$$AS+…` | Terminal serie por el USB XBEE | [Módem 4G](#parametros-del-modem-4g-ntrip-master) | | simpleRTK2B Pro (ZED-F9P) | Configuración u-center y firmware u-blox | u-center por el USB POWER+GPS | [ZED-F9P](#firmware-y-configuracion-del-simplertk2b-pro-zed-f9p) | -Cada carga se registra en el [acta de reflasheo](../formularios/reflasheo.html) y queda en el [expediente](../unidad.html) con las capturas de antes y después. +Cada carga se registra en el [acta de reflasheo](../formularios/reflasheo.html) y queda en el [expediente](../tableros/unidad.md) con las capturas de antes y después. ## Verifica el SHA-256 diff --git a/docs/diagnostico/procedimiento-diagnostico-campo.md b/docs/diagnostico/procedimiento-diagnostico-campo.md index 6b8102c..4d9e165 100644 --- a/docs/diagnostico/procedimiento-diagnostico-campo.md +++ b/docs/diagnostico/procedimiento-diagnostico-campo.md @@ -152,7 +152,7 @@ Elige lo que observaste, no lo que supones. "No está claro" es una respuesta v ## 8. Después de enviar el acta -- Queda en el servidor con tu nombre, hora y fotos, y aparece en el [tablero de campo](tablero-campo.html). +- Queda en el servidor con tu nombre, hora y fotos, y aparece en el [tablero de campo](../tableros/campo.md). - Quien abra el acta de esa unidad verá tu visita antes de empezar. - Sin señal, el acta se guarda sola en el teléfono; fotos y envío necesitan datos. Si falla, reintenta desde el mismo formulario. - Unidad desmontada: sigue en [diagnóstico en banco](../procedimientos/diagnostico-banco.md). Tarjeta: [manual V3](../manuales/manual-tarjeta-V3.md). diff --git a/docs/diagnostico/tablero-campo.html b/docs/diagnostico/tablero-campo.html index 69caf26..dd73b79 100644 --- a/docs/diagnostico/tablero-campo.html +++ b/docs/diagnostico/tablero-campo.html @@ -1,200 +1,18 @@ + -Tablero de campo — diagnósticos HBOX - + +Visitas de campo - Drogheda + + + -
-
-

Tablero de campo — diagnósticos HBOX

Cargando…
-
- ← Documentación - Nueva acta de diagnóstico - -
-
-
-
- - +

Este tablero ahora está dentro del sitio: Visitas de campo.

diff --git a/docs/fonts/OFL-Atkinson-Hyperlegible-Mono.txt b/docs/fonts/OFL-Atkinson-Hyperlegible-Mono.txt new file mode 100644 index 0000000..8d2ce88 --- /dev/null +++ b/docs/fonts/OFL-Atkinson-Hyperlegible-Mono.txt @@ -0,0 +1,93 @@ +Copyright 2020-2024 The Atkinson Hyperlegible Mono Project Authors (https://github.com/googlefonts/atkinson-hyperlegible-next-mono) AtkinsonHyperlegibleMono-Italic[wght].ttf: Copyright 2020-2024 The Atkinson Hyperlegible Mono Project Authors (https://github.com/googlefonts/atkinson-hyperlegible-next-mono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/fonts/OFL-Atkinson-Hyperlegible-Next.txt b/docs/fonts/OFL-Atkinson-Hyperlegible-Next.txt new file mode 100644 index 0000000..9459440 --- /dev/null +++ b/docs/fonts/OFL-Atkinson-Hyperlegible-Next.txt @@ -0,0 +1,93 @@ +Copyright 2020-2024 The Atkinson Hyperlegible Next Project Authors (https://github.com/googlefonts/atkinson-hyperlegible-next) AtkinsonHyperlegibleNext-Italic[wght].ttf: Copyright 2020-2024 The Atkinson Hyperlegible Next Project Authors (https://github.com/googlefonts/atkinson-hyperlegible-next) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/fonts/OFL-League-Spartan.txt b/docs/fonts/OFL-League-Spartan.txt new file mode 100644 index 0000000..a3dad34 --- /dev/null +++ b/docs/fonts/OFL-League-Spartan.txt @@ -0,0 +1,93 @@ +Copyright 2020 The League Spartan Project Authors (https://github.com/theleagueof/league-spartan) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/fonts/atkinson-hyperlegible-mono-latin.woff2 b/docs/fonts/atkinson-hyperlegible-mono-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f5c108140795b5fd70aa7ac1221a00c3d9815f65 GIT binary patch literal 17752 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 literal 0 HcmV?d00001 diff --git a/docs/fonts/atkinson-hyperlegible-next-latin.woff2 b/docs/fonts/atkinson-hyperlegible-next-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a9ca4bd6ffda7092b397871cd3b5ad38a372046d GIT binary patch literal 33996 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 y agrega el botón de modo al encabezado). */ +@import url("../stylesheets/helgen.css"); + +:root { + /* nombres de siempre, ahora sobre los tokens de Helgen (los usan acta.js y las páginas) */ + --naranja: var(--hg-liga); + --naranja-suave: var(--hg-acento-suave); + --tinta: var(--hg-texto); + --tinta2: var(--hg-texto-2); + --linea: var(--hg-linea); + --papel: var(--hg-fondo); + --tarjeta: var(--hg-plano); + --ok: var(--hg-hecho); + --falla: var(--hg-bloqueado); + --ok-bg: var(--hg-hecho-bg); + --falla-bg: var(--hg-bloqueado-bg); + --aviso: var(--hg-aviso); + --aviso-bg: var(--hg-aviso-bg); + --plane: var(--hg-liga); + --crit: var(--hg-bloqueado); + --crit-soft: var(--hg-bloqueado-bg); } + *{box-sizing:border-box} -body{margin:0;background:var(--papel);color:var(--tinta); - font:16px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-text-size-adjust:100%} +body{margin:0;background:var(--hg-fondo);color:var(--hg-texto); + font:16px/1.5 var(--hg-fuente);-webkit-text-size-adjust:100%; + -webkit-font-smoothing:antialiased} +a{color:var(--hg-liga)} +:focus-visible{outline:2px solid var(--hg-foco);outline-offset:2px} +code{font-family:var(--hg-fuente-mono);font-size:.9em;background:var(--hg-elevado);border-radius:4px;padding:0 .3em} .wrap{max-width:820px;margin:0 auto;padding:16px 16px 120px} -header.top{background:#2C3C5B;color:#fff;padding:16px;border-radius:12px;margin-bottom:16px} -header.top h1{margin:0;font-size:20px} -header.top p{margin:4px 0 0;color:#d7d2c8;font-size:14px} -.borrador{background:var(--aviso-bg);border:1px solid var(--aviso);color:#a5620a; +header.top{position:relative;background:var(--hg-barra);color:var(--hg-texto);border:1px solid var(--hg-linea); + padding:16px 58px 16px 16px;border-radius:12px;margin-bottom:16px} +html[data-tema="claro"] header.top{background:var(--hg-indigo);border-color:var(--hg-indigo);color:#fff} +header.top h1{margin:0;font-family:var(--hg-fuente-titulo);font-weight:600;font-size:23px;line-height:1.15;letter-spacing:0} +header.top p{margin:6px 0 0;color:var(--hg-texto-2);font-size:14px} +html[data-tema="claro"] header.top p{color:rgba(255,255,255,.78)} +/* botón de modo claro/oscuro (js/tema.js) */ +.hg-modo{position:absolute;top:12px;right:12px;width:34px;height:34px;display:grid;place-items:center; + border-radius:8px;border:1px solid var(--hg-linea-2);background:transparent;color:var(--hg-texto-2);cursor:pointer;padding:0} +.hg-modo:hover{color:var(--hg-texto-fuerte);background:var(--hg-elevado)} +html[data-tema="claro"] .hg-modo{border-color:rgba(255,255,255,.35);color:rgba(255,255,255,.85)} +html[data-tema="claro"] .hg-modo:hover{background:rgba(255,255,255,.12);color:#fff} + +.borrador{background:var(--aviso-bg);border:1px solid color-mix(in srgb,var(--aviso) 45%,transparent);color:var(--aviso); padding:10px 14px;border-radius:10px;margin-bottom:16px;font-size:14px} .datos{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:8px} @media(max-width:560px){.datos{grid-template-columns:1fr}} -label{display:block;font-weight:600;font-size:14px;margin-bottom:4px} -input[type=text],input[type=number],select,textarea{ - width:100%;padding:11px 12px;border:1px solid var(--linea);border-radius:9px; - font-size:16px;background:#fff;color:var(--tinta)} -input:focus,select:focus,textarea:focus{outline:2px solid var(--naranja);border-color:var(--naranja)} -section.paso{background:var(--tarjeta);border:1px solid var(--linea);border-radius:12px; +label{display:block;font-weight:600;font-size:14px;margin-bottom:5px;color:var(--hg-texto-2)} +input[type=text],input[type=number],input[type=password],input[type=email],input[type=tel],select,textarea{ + width:100%;padding:11px 12px;border:1px solid var(--hg-linea-2);border-radius:9px; + font:inherit;font-size:16px;background:var(--hg-plano);color:var(--hg-texto)} +input::placeholder,textarea::placeholder{color:var(--hg-texto-3)} +input:focus,select:focus,textarea:focus{outline:2px solid var(--hg-foco);outline-offset:1px;border-color:transparent} +section.paso{background:var(--hg-plano-2);border:1px solid var(--hg-linea);border-radius:12px; padding:14px 16px;margin:14px 0} -section.paso h2{margin:0 0 4px;font-size:17px;color:var(--naranja)} -section.paso .sub{color:var(--tinta2);font-size:13.5px;margin:0 0 10px} -.item{padding:10px 0;border-top:1px solid var(--linea)} +section.paso h2{margin:0 0 4px;font-family:var(--hg-fuente-titulo);font-weight:600;font-size:19px;line-height:1.2;color:var(--hg-texto-fuerte)} +section.paso .sub{color:var(--hg-texto-2);font-size:14px;margin:0 0 10px} +.item{padding:10px 0;border-top:1px solid var(--hg-linea)} .item:first-of-type{border-top:0} .chk{display:flex;gap:12px;align-items:flex-start;cursor:pointer} -.chk input{width:26px;height:26px;margin:1px 0 0;flex:0 0 auto;accent-color:var(--naranja)} +.chk input{width:26px;height:26px;margin:1px 0 0;flex:0 0 auto;accent-color:var(--hg-teal)} .chk .txt{flex:1} .medida{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center} .medida .txt{flex:1 1 100%;font-weight:600} -.medida .esp{flex:1 1 100%;color:var(--tinta2);font-size:13px;margin-top:-2px} +.medida .esp{flex:1 1 100%;color:var(--hg-texto-2);font-size:13px;margin-top:-2px} .medida input{max-width:150px} -.medida .u{color:var(--tinta2)} -.nota-item{color:var(--tinta2);font-size:14px} -.aviso{background:var(--aviso-bg);border-left:3px solid var(--aviso);padding:8px 12px; - border-radius:0 8px 8px 0;font-size:13.5px;margin:6px 0} -.firma{background:var(--naranja-suave);border:1px solid #ffd8a8} +.medida .u{color:var(--hg-texto-2)} +.nota-item{color:var(--hg-texto-2);font-size:14px} +.aviso{background:var(--aviso-bg);border:1px solid color-mix(in srgb,var(--aviso) 35%,transparent);padding:8px 12px; + border-radius:8px;font-size:13.5px;margin:6px 0;color:var(--hg-texto)} +.firma{background:var(--hg-plano)} .resultado{display:flex;gap:10px;margin-top:6px} -.resultado label{flex:1;border:2px solid var(--linea);border-radius:10px;padding:12px; - text-align:center;cursor:pointer;font-weight:700;margin:0} +.resultado label{flex:1;border:2px solid var(--hg-linea-2);border-radius:10px;padding:12px; + text-align:center;cursor:pointer;font-weight:700;margin:0;color:var(--hg-texto)} .resultado input{position:absolute;opacity:0} .resultado label:has(input:checked).ok{border-color:var(--ok);background:var(--ok-bg);color:var(--ok)} .resultado label:has(input:checked).falla{border-color:var(--falla);background:var(--falla-bg);color:var(--falla)} -.barra{position:fixed;left:0;right:0;bottom:0;background:#fff;border-top:1px solid var(--linea); +.resultado label:has(input:focus-visible){outline:2px solid var(--hg-foco);outline-offset:2px} +.barra{position:fixed;left:0;right:0;bottom:0;background:var(--hg-barra);border-top:1px solid var(--hg-linea); padding:12px 16px;display:flex;gap:12px;align-items:center;justify-content:space-between} -.barra .estado{font-size:13px;color:var(--tinta2)} -button.enviar{background:var(--naranja);color:#fff;border:0;border-radius:10px; - padding:13px 22px;font-size:16px;font-weight:700;cursor:pointer} +.barra .estado{font-size:13px;color:var(--hg-texto-2)} +button.enviar{background:var(--hg-acento);color:var(--hg-sobre-acento);border:0;border-radius:10px; + padding:13px 22px;font:inherit;font-size:16px;font-weight:700;cursor:pointer} +button.enviar:hover:not(:disabled){filter:brightness(1.07)} button.enviar:disabled{opacity:.5;cursor:not-allowed} .msg{padding:12px 14px;border-radius:10px;margin-top:12px;font-weight:600;display:none} -.msg.ok{display:block;background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok)} -.msg.err{display:block;background:var(--falla-bg);color:var(--falla);border:1px solid var(--falla)} +.msg.ok{display:block;background:var(--ok-bg);color:var(--ok);border:1px solid color-mix(in srgb,var(--ok) 40%,transparent)} +.msg.err{display:block;background:var(--falla-bg);color:var(--falla);border:1px solid color-mix(in srgb,var(--falla) 45%,transparent)} .enviada{opacity:.6;pointer-events:none} -a.volver{color:var(--naranja);font-size:14px;text-decoration:none} -button.limpiar{background:#fff;color:var(--tinta2);border:1px solid var(--linea); - border-radius:10px;padding:13px 16px;font-size:15px;cursor:pointer} -button.limpiar:hover{border-color:var(--naranja);color:var(--naranja)} +a.volver{color:var(--hg-liga);font-size:14px;text-decoration:none} +a.volver:hover{text-decoration:underline} +button.limpiar{background:transparent;color:var(--hg-texto-2);border:1px solid var(--hg-linea-2); + border-radius:10px;padding:13px 16px;font:inherit;font-size:15px;cursor:pointer} +button.limpiar:hover{border-color:var(--hg-linea-2);background:var(--hg-elevado);color:var(--hg-texto-fuerte)} /* ---- actas compuestas (ensamble / integración): estado de cada módulo ---- */ .datos{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))} -.datos .serie-calc{grid-column:1 / -1;background:var(--naranja-suave);border:1px solid #ffd8a8;border-radius:10px;padding:10px 12px} -.datos .serie-calc input{font-weight:700;font-size:20px;letter-spacing:.04em;background:#fff} -.badge{display:inline-block;margin-top:6px;font-size:13px;font-weight:700;padding:3px 10px;border-radius:99px;background:#f1efe9;color:var(--tinta2)} +.datos .serie-calc{grid-column:1 / -1;background:var(--hg-plano);border:1px solid var(--hg-linea);border-radius:10px;padding:10px 12px} +.datos .serie-calc input{font-family:var(--hg-fuente-mono);font-weight:600;font-size:20px;letter-spacing:.04em;background:var(--hg-plano-2)} +.badge{display:inline-block;margin-top:6px;font-size:13px;font-weight:600;padding:3px 10px;border-radius:6px;background:var(--hg-pend-bg);color:var(--hg-texto-2)} .badge.ok{background:var(--ok-bg);color:var(--ok)} .badge.falla{background:var(--falla-bg);color:var(--falla)} -.badge.pend{background:#f1efe9;color:var(--tinta2)} +.badge.pend{background:var(--hg-pend-bg);color:var(--hg-texto-2)} .radios{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:4px} -.radios .rad{font-weight:500;display:flex;align-items:center;gap:6px;cursor:pointer} -.radios input{width:22px;height:22px;accent-color:var(--naranja)} +.radios .rad{font-weight:500;display:flex;align-items:center;gap:6px;cursor:pointer;color:var(--hg-texto)} +.radios input{width:22px;height:22px;accent-color:var(--hg-teal)} /* ================= actas de campo (diagnóstico / instalación) ================= */ @@ -77,41 +114,42 @@ button.limpiar:hover{border-color:var(--naranja);color:var(--naranja)} .oculto{display:none !important} /* la unidad elegida: máquina y terminal, para que el técnico confirme que abrió la correcta */ -.ficha-unidad:not(:empty){margin-top:8px;padding:8px 10px;background:var(--naranja-suave); - border:1px solid #ffd8a8;border-radius:8px;font-size:13.5px;line-height:1.35} +.ficha-unidad:not(:empty){margin-top:8px;padding:8px 10px;background:var(--hg-plano); + border:1px solid var(--hg-linea);border-radius:8px;font-size:13.5px;line-height:1.35} /* historial de visitas anteriores a la misma unidad */ -.hist{margin:0 0 14px;padding:12px 14px;background:#eef3f8;border:1px solid #c9dcec; - border-radius:10px;font-size:14px;color:#1b3b57} +.hist{margin:0 0 14px;padding:12px 14px;background:var(--hg-info-bg);border:1px solid color-mix(in srgb,var(--hg-info) 30%,transparent); + border-radius:10px;font-size:14px;color:var(--hg-texto)} .hist:empty{display:none} .hist-t{margin-bottom:6px} -.hist-r{padding:4px 0;border-top:1px solid #d6e4f0} +.hist-r{padding:4px 0;border-top:1px solid color-mix(in srgb,var(--hg-info) 22%,transparent)} /* fotos */ .item.foto .txt{display:block;font-weight:600;margin-bottom:8px} -button.btn-foto{width:100%;background:#fff;color:var(--naranja);border:2px dashed var(--naranja); - border-radius:12px;padding:16px;font-size:16px;font-weight:700;cursor:pointer} -button.btn-foto:active{background:var(--naranja-suave)} +button.btn-foto{width:100%;background:transparent;color:var(--hg-liga);border:2px dashed var(--hg-linea-2); + border-radius:12px;padding:16px;font:inherit;font-size:16px;font-weight:700;cursor:pointer} +button.btn-foto:hover{border-color:var(--hg-liga)} +button.btn-foto:active{background:var(--hg-acento-suave)} .miniaturas{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px} .miniaturas:empty{margin-top:0} -.mini{width:104px;border:1px solid var(--linea);border-radius:10px;padding:6px;background:#fff; +.mini{width:104px;border:1px solid var(--hg-linea);border-radius:10px;padding:6px;background:var(--hg-plano); display:flex;flex-direction:column;gap:4px;align-items:center} -.mini img{width:90px;height:90px;object-fit:cover;border-radius:6px;background:#eee} +.mini img{width:90px;height:90px;object-fit:cover;border-radius:6px;background:var(--hg-pend-bg)} .mini .est{font-size:11px;font-weight:700;text-align:center;line-height:1.2} -.mini.ok{border-color:var(--ok)} .mini.ok .est{color:var(--ok)} -.mini.err{border-color:var(--falla)} .mini.err .est{color:var(--falla)} -.mini.subiendo .est{color:var(--tinta2)} -button.mini-btn{background:#fff;border:1px solid var(--linea);border-radius:6px; - font-size:11px;padding:3px 7px;cursor:pointer;color:var(--tinta2)} +.mini.ok{border-color:color-mix(in srgb,var(--ok) 55%,transparent)} .mini.ok .est{color:var(--ok)} +.mini.err{border-color:color-mix(in srgb,var(--falla) 55%,transparent)} .mini.err .est{color:var(--falla)} +.mini.subiendo .est{color:var(--hg-texto-2)} +button.mini-btn{background:transparent;border:1px solid var(--hg-linea-2);border-radius:6px; + font:inherit;font-size:11px;padding:3px 7px;cursor:pointer;color:var(--hg-texto-2)} /* aviso de seguridad: más fuerte que un 'aviso' normal */ -.peligro{background:var(--falla-bg);border:2px solid var(--falla);color:#a01a1a; +.peligro{background:var(--falla-bg);border:2px solid var(--falla);color:var(--hg-texto); padding:12px 14px;border-radius:10px;margin:10px 0;font-size:14px;line-height:1.45} .peligro b{color:var(--falla)} /* en el patio: con guantes, sol y prisa — todo más grande */ @media(max-width:560px){ - body{font:17px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif} + body{font-size:17px;line-height:1.55} .wrap{padding:12px 12px 130px} .chk input{width:30px;height:30px} .medida input{max-width:none;flex:1 1 140px;font-size:17px;padding:13px 12px} @@ -124,24 +162,32 @@ button.mini-btn{background:#fff;border:1px solid var(--linea);border-radius:6px; /* archivos de log adjuntos (capturas por USB) */ .mini.doc{width:auto;min-width:160px;max-width:260px;flex-direction:row;flex-wrap:wrap; align-items:center;gap:6px;padding:8px 10px} -.mini.doc .ico{font-size:18px} -.mini.doc .nom{font-size:12.5px;font-weight:600;word-break:break-all;flex:1 1 90px} +.mini.doc .ico{font-size:12px;font-weight:700;color:var(--hg-texto-3)} +.mini.doc .nom{font-family:var(--hg-fuente-mono);font-size:12.5px;font-weight:500;word-break:break-all;flex:1 1 90px} .mini.doc .est{font-size:11.5px;flex:0 0 auto} -input[type=date]{width:100%;padding:11px 12px;border:1px solid var(--linea);border-radius:9px; - font-size:16px;background:#fff;color:var(--tinta)} +input[type=date]{width:100%;padding:11px 12px;border:1px solid var(--hg-linea-2);border-radius:9px; + font:inherit;font-size:16px;background:var(--hg-plano);color:var(--hg-texto)} /* marca de daño / baja: se muestra en cualquier acta al elegir la serie */ .marca{display:none;margin:0 0 14px;padding:12px 14px;border-radius:10px;font-size:14.5px;line-height:1.45} -.marca.danada{display:block;background:var(--aviso-bg);border:2px solid var(--aviso);color:#7a4a00} -.marca.baja{display:block;background:var(--falla-bg);border:2px solid var(--falla);color:#8a1a1a} +.marca.danada{display:block;background:var(--aviso-bg);border:2px solid var(--aviso);color:var(--hg-texto)} +.marca.baja{display:block;background:var(--falla-bg);border:2px solid var(--falla);color:var(--hg-texto)} .marca a{color:inherit;font-weight:700} /* tabla de registro (tipo 'tabla') */ .tabla-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-top:6px} .tabla{border-collapse:collapse;font-size:13px;min-width:100%} -.tabla th,.tabla td{border:1px solid #ddd;padding:4px 5px;text-align:left;vertical-align:middle;white-space:nowrap} -.tabla thead th{background:#f3f3f3;font-weight:600;font-size:12px} -.tabla tbody th{background:#fafafa;font-weight:600;font-variant-numeric:tabular-nums} -.tabla input,.tabla select{width:100%;min-width:64px;font-size:14px;padding:6px 6px;border:1px solid #ccc;border-radius:6px;box-sizing:border-box} +.tabla th,.tabla td{border:1px solid var(--hg-linea);padding:4px 5px;text-align:left;vertical-align:middle;white-space:nowrap} +.tabla thead th{background:var(--hg-plano);color:var(--hg-texto-2);font-weight:600;font-size:12px} +.tabla tbody th{background:var(--hg-plano-2);font-weight:600;font-variant-numeric:tabular-nums} +.tabla input,.tabla select{width:100%;min-width:64px;font-size:14px;padding:6px 6px;border:1px solid var(--hg-linea-2);border-radius:6px;box-sizing:border-box;background:var(--hg-plano);color:var(--hg-texto)} .tabla input[inputmode=decimal]{max-width:90px} -.enviada .tabla input,.enviada .tabla select{background:#f6f6f6} +.enviada .tabla input,.enviada .tabla select{background:var(--hg-plano-2)} + +@media print{ + body{background:#fff;color:#000} + header.top{background:#fff !important;color:#000 !important;border-color:#000} + header.top p{color:#333 !important} + .hg-modo,.barra{display:none !important} + section.paso{background:#fff;border-color:#999} +} diff --git a/docs/formularios/acta.js b/docs/formularios/acta.js index 030a537..99771a9 100644 --- a/docs/formularios/acta.js +++ b/docs/formularios/acta.js @@ -57,7 +57,7 @@ function opciones(sel, prefijo, desde, hasta, pad) { sel.append($('option', { value: '', text: '— elegir —' })); - sel.append($('option', { value: prefijo + '-PRUEBA', text: '⚙ PRUEBA (no cuenta)' })); + sel.append($('option', { value: prefijo + '-PRUEBA', text: 'PRUEBA (no cuenta)' })); for (let i = desde; i <= hasta; i++) { const s = prefijo + '-' + String(i).padStart(pad, '0'); sel.append($('option', { value: s, text: s })); @@ -81,7 +81,7 @@ wrap.append(nav); if (cfg.borrador) - wrap.append($('div', { class: 'borrador', html: '⚠ BORRADOR — este formulario aún debe revisarse con ingeniería antes de usarlo como registro oficial.' })); + wrap.append($('div', { class: 'borrador', html: 'BORRADOR — este formulario aún debe revisarse con ingeniería antes de usarlo como registro oficial.' })); if (cfg.intro) wrap.append($('div', { class: 'nota-item', style: 'margin:0 0 10px', html: cfg.intro })); // ---------------- cabecera: serie (simple o compuesta) + técnico ---------------- @@ -108,9 +108,9 @@ serieSel.append(og); }); if (!cfg.sinEnsambladas) cargarEnsambladas(); - if (!cfg.sinEnsambladas) serieSel.insertBefore($('option', { value: '__HBOX__', text: '🧩 Unidad HBOX completa — elegir sus 3 piezas' }), serieSel.children[1] || null); - serieSel.append($('option', { value: '__OTRA__', text: '➕ Otra unidad (no está en la lista)' })); - serieSel.append($('option', { value: 'CAMPO-PRUEBA', text: '⚙ PRUEBA (no cuenta)' })); + if (!cfg.sinEnsambladas) serieSel.insertBefore($('option', { value: '__HBOX__', text: 'Unidad HBOX completa: elegir sus 3 piezas' }), serieSel.children[1] || null); + serieSel.append($('option', { value: '__OTRA__', text: 'Otra unidad (no está en la lista)' })); + serieSel.append($('option', { value: 'CAMPO-PRUEBA', text: 'PRUEBA (no cuenta)' })); // Unidad HBOX completa armada a mano: tarjeta + ArduSimple + módem → misma serie que el acta de ensamble. [['einar', 'Tarjeta EinarBoard', 'V5', 2], ['ard', 'ArduSimple', 'ARD', 3], ['modem', 'Módem 4G', 'RTK', 4]].forEach(([k, t, pre, pad]) => { const sel = $('select'); opciones(sel, pre, 1, 30, pad); armarSel[k] = sel; @@ -178,10 +178,10 @@ marcaBox.className = 'marca ' + (baja ? 'baja' : 'danada'); marcaBox.innerHTML = avisos.map(({ s, j }) => { const a = j.acta || {}; - return (j.marca === 'BAJA' ? '⛔ ' + s + ' está dada de BAJA' : '⚠ ' + s + ' está marcada como DAÑADA') + return (j.marca === 'BAJA' ? '' + s + ' está dada de BAJA' : '' + s + ' está marcada como DAÑADA') + (a.fecha ? ' desde el ' + a.fecha : '') + (a.clasificacion ? ' — ' + a.clasificacion : '') + (a.resumen ? '
' + a.resumen : '') - + '
Ver su expediente' + + '
Ver su expediente' + (j.marca === 'BAJA' ? '. No debe usarse ni instalarse.' : '. Revisa el acta de daño antes de continuar.'); }).join('
'); } @@ -344,7 +344,7 @@ box.append($('span', { class: 'txt', html: (it.req ? 'Archivo obligatorio — ' : 'Archivo — ') + it.txt })); if (it.ayuda) box.append($('div', { class: 'nota-item', html: it.ayuda })); const inp = $('input', { type: 'file', accept: '.txt,.log,.csv,.nmea,.ubx,.json,.cfg,text/plain', multiple: 'multiple', style: 'display:none' }); - const btn = $('button', { type: 'button', class: 'btn-foto', text: '📄 Subir archivo de captura' }); + const btn = $('button', { type: 'button', class: 'btn-foto', text: 'Subir archivo de captura' }); const tiras = $('div', { class: 'miniaturas', 'data-fotos': id }); const marca = $('input', { type: 'hidden', 'data-id': id, 'data-lbl': 'Archivos: ' + String(it.txt || '').replace(/<[^>]+>/g, ''), value: '' }); btn.addEventListener('click', () => inp.click()); @@ -355,7 +355,7 @@ box.append($('span', { class: 'txt', html: (it.req ? 'Foto obligatoria — ' : 'Foto — ') + it.txt })); if (it.ayuda) box.append($('div', { class: 'nota-item', html: it.ayuda })); const inp = $('input', { type: 'file', accept: 'image/*', capture: 'environment', multiple: 'multiple', style: 'display:none' }); - const btn = $('button', { type: 'button', class: 'btn-foto', text: '📷 Tomar o elegir foto' }); + const btn = $('button', { type: 'button', class: 'btn-foto', text: 'Tomar o elegir foto' }); const tiras = $('div', { class: 'miniaturas', 'data-fotos': id }); const marca = $('input', { type: 'hidden', 'data-id': id, 'data-lbl': 'Fotos: ' + String(it.txt || '').replace(/<[^>]+>/g, ''), value: '' }); btn.addEventListener('click', () => inp.click()); @@ -413,7 +413,7 @@ if (!t) return; const li = $('div', { class: 'mini ok' }); li.append($('img', { src: '/api/adjunto?ruta=' + encodeURIComponent(f.ruta) }), - $('span', { class: 'est', text: '✓ guardada' })); + $('span', { class: 'est', text: 'Guardada' })); if (marca) li.append(quitarFoto(f, li, marca)); t.append(li); }); @@ -423,9 +423,9 @@ const t = wrap.querySelector(`.miniaturas[data-fotos="${a.campo}"]`); if (!t) return; const li = $('div', { class: 'mini doc ok' }); - li.append($('span', { class: 'ico', text: '📄' }), + li.append($('span', { class: 'ico', text: 'Log' }), $('span', { class: 'nom', text: String(a.nombre || '').slice(0, 28) }), - $('span', { class: 'est', text: '✓ guardado' })); + $('span', { class: 'est', text: 'Guardado' })); t.append(li); }); } @@ -471,7 +471,7 @@ borrar.style.display = admin ? '' : 'none'; banner.className = 'msg ok'; const f = (a._recibido || '').replace('T', ' ').slice(0, 16); - banner.innerHTML = '✓ Acta ya enviada por ' + (a.tecnico || '—') + '' + banner.innerHTML = 'Acta ya enviada por ' + (a.tecnico || '—') + '' + (f ? ' el ' + f : '') + '. Registro final' + (a.resultado ? ' — resultado ' + a.resultado + '' : '') + '.' + (admin ? '' : ' Para rehacerla, pide a Leo que la borre.'); @@ -521,7 +521,7 @@ } function quitarFoto(f, li, marca) { - const b = $('button', { type: 'button', class: 'mini-btn', text: '✕ quitar' }); + const b = $('button', { type: 'button', class: 'mini-btn', text: 'Quitar' }); b.addEventListener('click', () => { fotos = fotos.filter(x => x !== f); li.remove(); marca.value = fotos.filter(x => x.campo === f.campo).length || ''; @@ -538,7 +538,7 @@ const j = await r.json(); if (!r.ok || !j.ok) throw new Error(j.error || ('HTTP ' + r.status)); const f = j.fotos[0]; f.campo = campo; fotos.push(f); - li.className = 'mini ok'; est.textContent = '✓ guardada'; + li.className = 'mini ok'; est.textContent = 'Guardada'; li.append(quitarFoto(f, li, marca)); marca.value = fotos.filter(x => x.campo === campo).length; guardarLocal(); aplicarCondiciones(); @@ -557,7 +557,7 @@ if (!serieActual()) { fail('Primero elige la unidad: los archivos se guardan con su número de serie.'); return; } for (const file of Array.from(lista).slice(0, 10)) { const li = $('div', { class: 'mini doc subiendo' }); - li.append($('span', { class: 'ico', text: '📄' }), + li.append($('span', { class: 'ico', text: 'Log' }), $('span', { class: 'nom', text: file.name.slice(0, 28) })); const est = $('span', { class: 'est', text: 'subiendo…' }); li.append(est); tiras.append(li); const fd = new FormData(); @@ -568,8 +568,8 @@ const j = await r.json(); if (!r.ok || !j.ok) throw new Error(j.error || ('HTTP ' + r.status)); const a = j.archivos[0]; a.campo = campo; archivos.push(a); - li.className = 'mini doc ok'; est.textContent = '✓ ' + kb(a.bytes); - const q = $('button', { type: 'button', class: 'mini-btn', text: '✕ quitar' }); + li.className = 'mini doc ok'; est.textContent = kb(a.bytes); + const q = $('button', { type: 'button', class: 'mini-btn', text: 'Quitar' }); q.addEventListener('click', () => { archivos = archivos.filter(x => x !== a); li.remove(); marca.value = archivos.filter(x => x.campo === campo).length || ''; @@ -609,7 +609,7 @@ const j = await r.json(); if (!j.total) { hist.innerHTML = '🆕 Primera visita registrada para esta unidad.'; return; } hist.innerHTML = ''; - hist.append($('div', { class: 'hist-t', html: '📋 ' + j.total + ' visita(s) anterior(es) a esta unidad — léelas antes de empezar:' })); + hist.append($('div', { class: 'hist-t', html: '' + j.total + ' visita(s) anterior(es) a esta unidad — léelas antes de empezar:' })); j.visitas.slice(0, 6).forEach(v => { const f = (v.recibido || '').replace('T', ' ').slice(0, 16); hist.append($('div', { class: 'hist-r', html: @@ -626,8 +626,8 @@ let verif = {}; // clave -> 'OK' | 'FALLA' | 'SIN_ACTA' | 'PRUEBA' | 'EN_USO' let usados = null; // { clave: { valor: serieUnidad } } — componentes ya asignados en otras actas de este tipo function setBadge(el, st, extra) { - const map = { OK: ['ok', '✓ Aprobado'], FALLA: ['falla', '✕ FALLA'], SIN_ACTA: ['falla', '✕ Sin acta'], - PRUEBA: ['pend', '⚙ prueba'], EN_USO: ['falla', '⚠ ya en ' + (extra || 'otra unidad')], CONSULTANDO: ['pend', '…'] }; + const map = { OK: ['ok', 'Aprobado'], FALLA: ['falla', 'Falla'], SIN_ACTA: ['falla', 'Sin acta'], + PRUEBA: ['pend', 'Prueba'], EN_USO: ['falla', 'Ya en ' + (extra || 'otra unidad')], CONSULTANDO: ['pend', '…'] }; const m = map[st] || ['pend', '—']; el.className = 'badge ' + m[0]; el.textContent = m[1]; } @@ -745,7 +745,7 @@ cargarLocal(); aplicarCondiciones(); if (compuesta && cfg.exigirAprobados && !todoAprobado()) { banner.className = 'msg err'; - banner.innerHTML = '⛔ No se puede ensamblar con esta selección. Todos los módulos deben estar aprobados en su acta y no estar ya asignados a otra unidad. Revisa los indicadores de arriba.'; + banner.innerHTML = 'No se puede ensamblar con esta selección. Todos los módulos deben estar aprobados en su acta y no estar ya asignados a otra unidad. Revisa los indicadores de arriba.'; } } } @@ -805,10 +805,10 @@ if (!r.ok || !j.ok) throw new Error(j.error || ('HTTP ' + r.status)); try { localStorage.removeItem(key()); } catch (e) {} msg.className = 'msg ok'; - msg.innerHTML = '✓ Acta enviada y registrada como ' + d.serie + '.' + msg.innerHTML = 'Acta enviada y registrada como ' + d.serie + '.' + (compuesta && !esPrueba(d.serie) ? '
Etiqueta de la unidad: ' + d.serie + '' : ''); if (cfg.repetible) { - msg.innerHTML = '✓ Registro enviado para ' + d.serie + '' + msg.innerHTML = 'Registro enviado para ' + d.serie + '' + (d.fotos && d.fotos.length ? ' con ' + d.fotos.length + ' foto(s)' : '') + '.
Ingeniería ya puede verlo. Puedes cerrar o elegir otra unidad.'; btn.disabled = false; btn.textContent = 'Enviar acta firmada'; diff --git a/docs/formularios/ardusimple.html b/docs/formularios/ardusimple.html index 4d01ca9..3084dc5 100644 --- a/docs/formularios/ardusimple.html +++ b/docs/formularios/ardusimple.html @@ -4,6 +4,7 @@ Acta de módulo — simpleRTK2B Pro (RTK) + diff --git a/docs/formularios/banco.html b/docs/formularios/banco.html index 866f061..a78ca91 100644 --- a/docs/formularios/banco.html +++ b/docs/formularios/banco.html @@ -4,6 +4,7 @@ Acta de diagnóstico en banco — HBOX + diff --git a/docs/formularios/dano.html b/docs/formularios/dano.html index 2b5c117..4f0bd11 100644 --- a/docs/formularios/dano.html +++ b/docs/formularios/dano.html @@ -4,6 +4,7 @@ Acta de daño o incidente — HBOX + diff --git a/docs/formularios/diagnostico.html b/docs/formularios/diagnostico.html index 7155065..ea2c2c1 100644 --- a/docs/formularios/diagnostico.html +++ b/docs/formularios/diagnostico.html @@ -4,6 +4,7 @@ Acta de diagnóstico en campo — HBOX + diff --git a/docs/formularios/ensamble.html b/docs/formularios/ensamble.html index f3f7323..cdbddd8 100644 --- a/docs/formularios/ensamble.html +++ b/docs/formularios/ensamble.html @@ -4,6 +4,7 @@ Acta de ensamble — unidad HBOX v5 + diff --git a/docs/formularios/envio.html b/docs/formularios/envio.html index 2f3100b..c18422e 100644 --- a/docs/formularios/envio.html +++ b/docs/formularios/envio.html @@ -4,6 +4,7 @@ Acta de envío — HBOX + diff --git a/docs/formularios/ethernet-serie.html b/docs/formularios/ethernet-serie.html index 7593c0e..2de79d9 100644 --- a/docs/formularios/ethernet-serie.html +++ b/docs/formularios/ethernet-serie.html @@ -4,6 +4,7 @@ Prueba de banco — Ethernet y puertos serie (V5) + diff --git a/docs/formularios/instalacion.html b/docs/formularios/instalacion.html index 889c032..827d698 100644 --- a/docs/formularios/instalacion.html +++ b/docs/formularios/instalacion.html @@ -4,9 +4,10 @@ Acta de instalación en campo — HBOX + diff --git a/docs/formularios/integracion.html b/docs/formularios/integracion.html index 33561bd..4b336ba 100644 --- a/docs/formularios/integracion.html +++ b/docs/formularios/integracion.html @@ -4,6 +4,7 @@ Acta de integración — RTK + 4G + diff --git a/docs/formularios/modem4g.html b/docs/formularios/modem4g.html index ff14c6d..d470d4f 100644 --- a/docs/formularios/modem4g.html +++ b/docs/formularios/modem4g.html @@ -4,6 +4,7 @@ Acta de módulo — 4G NTRIP Master + diff --git a/docs/formularios/prueba-bateria.html b/docs/formularios/prueba-bateria.html index 40c7f34..a6e27cc 100644 --- a/docs/formularios/prueba-bateria.html +++ b/docs/formularios/prueba-bateria.html @@ -4,6 +4,7 @@ Prueba de banco — módem 4G en batería + diff --git a/docs/formularios/recepcion.html b/docs/formularios/recepcion.html index e1f45f1..b03664b 100644 --- a/docs/formularios/recepcion.html +++ b/docs/formularios/recepcion.html @@ -4,6 +4,7 @@ Acta de recepción e inspección — HBOX + diff --git a/docs/formularios/reflasheo.html b/docs/formularios/reflasheo.html index 389233e..11d1c3c 100644 --- a/docs/formularios/reflasheo.html +++ b/docs/formularios/reflasheo.html @@ -4,6 +4,7 @@ Acta de reflasheo y configuración — HBOX + diff --git a/docs/formularios/v4.html b/docs/formularios/v4.html index 0bfb0de..65ad747 100644 --- a/docs/formularios/v4.html +++ b/docs/formularios/v4.html @@ -4,6 +4,7 @@ Acta de prueba — EinarBoard V4 (fw 0.6.0) + @@ -55,7 +56,7 @@ Acta.render({ + 'V4 — preparación y prueba con 0.6.0. ' + 'Graba la consola desde el primer minuto; al final se sube completa. ' + 'Si una etapa no pasa, marca «me detengo»: lo que sigue se oculta, llenas el Cierre y envías como FALLA. ' - + 'Sin número de serie: el siguiente V4 libre del tablero. La serie PRUEBA sirve para practicar.', + + 'Sin número de serie: el siguiente V4 libre del tablero de actas. La serie PRUEBA sirve para practicar.', secciones: [ { titulo: '1 · Datos', diff --git a/docs/formularios/v5.html b/docs/formularios/v5.html index 2f37bd8..ad42b36 100644 --- a/docs/formularios/v5.html +++ b/docs/formularios/v5.html @@ -4,6 +4,7 @@ Acta de prueba — EinarBoard V5 + diff --git a/docs/formularios/ver.html b/docs/formularios/ver.html index a30b6b4..d357b99 100644 --- a/docs/formularios/ver.html +++ b/docs/formularios/ver.html @@ -4,6 +4,7 @@ Ver acta — HBOX + + +Inventario - Drogheda + + + -
-
-

Inventario de materiales

Cargando…
- -
- -
- Cómo se usa -
    -
  1. El stock no se escribe a mano: es la suma de los movimientos. Llegó material → Entrada. Se usó en un ensamble o se envió → Salida con la unidad o el acta como referencia.
  2. -
  3. Contaste y no cuadra → Ajuste con el conteo físico; el sistema calcula la diferencia y la deja registrada con tu nombre.
  4. -
  5. Toca el código para ver los movimientos de ese ítem. Cada uno dice quién, cuándo, cuánto y por qué.
  6. -
  7. Alerta (rojo) = stock por debajo del mínimo. El mínimo lo pone quien compra; el tablero de producción lo repite.
  8. -
  9. Nuevo ítem solo para cosas que se cuentan: tarjetas, módulos, gabinetes, cajas, fuentes, packs, antenas, cables y los componentes de entrega larga. Nada de resistencias.
  10. -
  11. Exportar CSV baja la tabla para Excel. Nada se borra: si un ítem ya no aplica, ponle «(obsoleto)» en la descripción.
  12. -
-
- -
- - - - - - - ⬇ Exportar CSV - -
-
-
-
- - - +

Este tablero ahora está dentro del sitio: Inventario.

diff --git a/docs/js/sitio.js b/docs/js/sitio.js new file mode 100644 index 0000000..49bf787 --- /dev/null +++ b/docs/js/sitio.js @@ -0,0 +1,33 @@ +/* Sitio Drogheda: detalles que necesitan datos del servidor en todas las páginas. + - Junto a «Pendientes» en el menú lateral, cuántos hay abiertos (de /api/tareas/resumen). + Si el servidor no responde, el menú queda igual. */ +(function () { + function cuentaPendientes() { + var ligas = [].slice.call(document.querySelectorAll('.md-nav--primary a.md-nav__link')).filter(function (a) { + try { return /\/tableros\/pendientes\/?$/.test(new URL(a.href, location.href).pathname); } catch (e) { return false; } + }); + if (!ligas.length) return; + fetch('/api/tareas/resumen', { cache: 'no-store', credentials: 'same-origin' }) + .then(function (r) { return r.ok ? r.json() : null; }) + .then(function (j) { + if (!j || !j.ok || !j.por_pista) return; + var abiertos = 0; + Object.keys(j.por_pista).forEach(function (p) { + var e = j.por_pista[p] || {}; + abiertos += (e['por-hacer'] || 0) + (e['en-curso'] || 0) + (e['bloqueado'] || 0); + }); + var vencidos = (j.vencidas || []).length; + ligas.forEach(function (a) { + if (a.querySelector('.hg-cuenta')) return; + var s = document.createElement('span'); + s.className = 'hg-cuenta' + (vencidos ? ' hg-cuenta--vencidos' : ''); + s.textContent = abiertos; + s.title = abiertos + ' abiertos' + (vencidos ? ', ' + vencidos + ' vencido' + (vencidos > 1 ? 's' : '') : ''); + a.appendChild(s); + }); + }) + .catch(function () {}); + } + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', cuentaPendientes); + else cuentaPendientes(); +})(); diff --git a/docs/js/tema.js b/docs/js/tema.js new file mode 100644 index 0000000..b6c7ed5 --- /dev/null +++ b/docs/js/tema.js @@ -0,0 +1,43 @@ +/* Modo claro u oscuro en las páginas sueltas (actas, cuenta, administración). + Lee la misma preferencia que el sitio (Material la guarda en localStorage con la + clave ".__palette"; scope = extra.scope de mkdocs.yml = "/drogheda/"). + Oscuro por omisión. Va en el de cada página, antes de su hoja de estilo, + para que no parpadee. Agrega un botón de modo al encabezado de la página. */ +(function () { + var CLAVE = '/drogheda/.__palette'; + var html = document.documentElement; + function leer() { + try { var p = JSON.parse(localStorage.getItem(CLAVE) || 'null'); return p && p.color && p.color.scheme === 'default' ? 'claro' : 'oscuro'; } + catch (e) { return 'oscuro'; } + } + function aplicar(modo) { if (modo === 'claro') html.setAttribute('data-tema', 'claro'); else html.removeAttribute('data-tema'); } + function guardar(modo) { + // mismo formato que Material: índice 0 = oscuro (slate), 1 = claro (default) + var p = { index: modo === 'claro' ? 1 : 0, color: { media: '', scheme: modo === 'claro' ? 'default' : 'slate', primary: 'custom', accent: 'custom' } }; + try { localStorage.setItem(CLAVE, JSON.stringify(p)); } catch (e) {} + } + aplicar(leer()); + var SOL = ''; + var LUNA = ''; + function boton() { + var cab = document.querySelector('header.top'); + if (!cab || cab.querySelector('.hg-modo')) return; + var b = document.createElement('button'); + b.type = 'button'; b.className = 'hg-modo'; + function pintar() { + var claro = html.getAttribute('data-tema') === 'claro'; + b.setAttribute('aria-label', claro ? 'Cambiar a modo oscuro' : 'Cambiar a modo claro'); + b.title = b.getAttribute('aria-label'); + b.innerHTML = ''; + } + b.addEventListener('click', function () { + var modo = html.getAttribute('data-tema') === 'claro' ? 'oscuro' : 'claro'; + aplicar(modo); guardar(modo); pintar(); + }); + pintar(); + cab.appendChild(b); + } + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boton); else boton(); + // si la persona cambia el modo en otra pestaña del sitio, esta página lo sigue + window.addEventListener('storage', function (e) { if (e.key === CLAVE) aplicar(leer()); }); +})(); diff --git a/docs/procedimientos/ciclo-de-vida.md b/docs/procedimientos/ciclo-de-vida.md index b2bc543..63e0204 100644 --- a/docs/procedimientos/ciclo-de-vida.md +++ b/docs/procedimientos/ciclo-de-vida.md @@ -15,7 +15,7 @@ version: 1.2 - Tiempo: acta de envío o recepción 15–30 min por unidad. - Necesitas: los [formularios](../actas/index.md); para recepción, fuente de 24 V (≥ 1 A; límite en 1 A si lo tiene), multímetro, cable USB con datos y laptop. -Todas las actas cuelgan del número de serie; el [expediente](../unidad.html) de cualquier tarjeta, módulo o unidad cuenta la historia completa, daños incluidos. +Todas las actas cuelgan del número de serie; el [expediente](../tableros/unidad.md) de cualquier tarjeta, módulo o unidad cuenta la historia completa, daños incluidos. ## Mapa diff --git a/docs/procedimientos/v4-prueba-fw-0.5.6.md b/docs/procedimientos/v4-prueba-fw-0.5.6.md index b77f7e2..d9b8555 100644 --- a/docs/procedimientos/v4-prueba-fw-0.5.6.md +++ b/docs/procedimientos/v4-prueba-fw-0.5.6.md @@ -11,7 +11,7 @@ version: 1.6 !!! abstract "Para quién · Cuándo · Tiempo · Necesitas" - Para quién: técnico de banco. - - Cuándo: una vez por tarjeta V4 (EinarBoard 2.0, Blackpill en zócalo), antes de darla por buena con el firmware de campo. Sin serie: etiquétala V4-NN con el siguiente libre del [tablero](../tablero.html). + - Cuándo: una vez por tarjeta V4 (EinarBoard 2.0, Blackpill en zócalo), antes de darla por buena con el firmware de campo. Sin serie: etiquétala V4-NN con el siguiente libre del [tablero](../tableros/actas.md). - Tiempo: ~1 h por tarjeta, más ~20 min en batería. - Necesitas: tarjeta V4 completa (Blackpill, simpleRTK2B, módem con SIM, antena GNSS con cielo, antena LTE, batería); 24 V al GX16 que puedas desconectar; diodo Schottky BAT54 (como D5), BAT85, BAT43 o 1N5711, nunca 1N5819; alambre wire-wrap, cautín fino, flux, Kapton, termofil, lupa; multímetro con MIN/MAX; laptop con terminal serie y `dfu-util` o STM32CubeProgrammer; dos cables USB-A a USB-C (uno normal y uno sin 5 V, Preparación 2); cargador Li-ion de 1 celda o fuente de banco; monitor y [acta de prueba V4](../formularios/v4.html) abierta desde el inicio (se guarda sola en el navegador). @@ -113,7 +113,7 @@ Pasa si en los dos casos el módem registra solo en < 2 min y el monitor vuelve ## Registro -Todo va en el [acta de prueba V4](../formularios/v4.html), con el log completo de consola. Cada etapa termina con una pregunta de paso; si la tarjeta no pasa, marca "me detengo", llena el cierre y envía con resultado FALLA. Queda en el [expediente](../unidad.html) y en el [tablero](../tablero.html). +Todo va en el [acta de prueba V4](../formularios/v4.html), con el log completo de consola. Cada etapa termina con una pregunta de paso; si la tarjeta no pasa, marca "me detengo", llena el cierre y envía con resultado FALLA. Queda en el [expediente](../tableros/unidad.md) y en el [tablero](../tableros/actas.md). !!! danger "Detente y avisa a ingeniería" - P2 en 0 V con 24 V puestos. diff --git a/docs/produccion/index.md b/docs/produccion/index.md index 80e36cc..d5447d4 100644 --- a/docs/produccion/index.md +++ b/docs/produccion/index.md @@ -4,7 +4,7 @@ title: "Producción" # Producción -De la tarjeta desnuda a la unidad lista para embarcar. Una unidad a la vez; cada paso deja su acta y la unidad no avanza si falla un paso. Plan y avance real: [Tablero de producción](../tableros/produccion.html). Existencias: [Inventario](../inventario/inventario.html). +De la tarjeta desnuda a la unidad lista para embarcar. Una unidad a la vez; cada paso deja su acta y la unidad no avanza si falla un paso. Plan y avance real: [Tablero de producción](../tableros/produccion.md). Existencias: [Inventario](../tableros/inventario.md). ## Plan de 570 unidades (13-oct-2026) @@ -36,10 +36,10 @@ La V4 no entra al pipeline de unidades V5; se prepara y prueba en [Taller](../ta ## Dónde ver el avance -- [Tablero de producción](../tableros/produccion.html): plan 113 / 327 / 130 contra las unidades reales por etapa; bloqueos. -- [Estado de actas](../tablero.html): qué tarjeta, módulo y unidad pasó cada paso (series V5-NN, ARD-NNN, RTK-NNNN). -- [Expediente de una unidad](../unidad.html): la historia completa de una serie. +- [Tablero de producción](../tableros/produccion.md): plan 113 / 327 / 130 contra las unidades reales por etapa; bloqueos. +- [Estado de actas](../tableros/actas.md): qué tarjeta, módulo y unidad pasó cada paso (series V5-NN, ARD-NNN, RTK-NNNN). +- [Expediente de una unidad](../tableros/unidad.md): la historia completa de una serie. - [Inventario](../inventario/index.md): tarjetas, módulos, gabinetes, cajas, paquetes, fuentes; mínimos y alertas. -- [Kanban](../tableros/kanban.html): tareas de la pista Producción y Compras. +- [Pendientes](../tableros/pendientes.md): tareas de la pista Producción y Compras. - [Descargas](../descargas/index.md): firmware vigente por tarjeta y SHA-256. Hoy: 0.6.0 CAMPO; 0.6.3 solo banco. - [Índice de actas](../actas/index.md): cómo se llenan y qué registra cada una. diff --git a/docs/salir.html b/docs/salir.html index 8d37fa3..5bc1c97 100644 --- a/docs/salir.html +++ b/docs/salir.html @@ -4,6 +4,7 @@ Cerrar sesión — HBOX + @@ -12,7 +13,7 @@

Cerrando sesión…