primer commit

This commit is contained in:
absandoval
2026-10-13 21:22:54 -06:00
commit b6b4bc3f01
13 changed files with 2428 additions and 0 deletions
+96
View File
@@ -0,0 +1,96 @@
# Lista de comprobaciones pre-entrega
Ejecutar este checklist completo antes de declarar el manual terminado. Si falla cualquier punto, corregir y volver a generar el PDF.
## 1. Contenido
- [ ] El título de la portada coincide exactamente con el nombre de la aplicación.
- [ ] El índice lista todos los capítulos y secciones presentes en el cuerpo.
- [ ] Cada capítulo tiene al menos un objetivo explícito en un callout `info`.
- [ ] Cada proceso termina con un callout `tip` "Resultado final".
- [ ] La sección "Solución de problemas" existe y cubre al menos los tres errores más comunes.
- [ ] Los nombres de los botones, campos y menús son idénticos a los de la UI.
- [ ] Las acciones irreversibles están acompañadas de un callout `warning` o `danger`.
## 2. Capturas de pantalla
- [ ] Cada paso crítico tiene al menos una captura.
- [ ] Las capturas están en `artifacts/` con nombres `NN-slug.png`.
- [ ] Ninguna captura contiene contraseñas, tokens, datos personales reales o identificadores confidenciales.
- [ ] Los banners de cookies, tooltips de onboarding y notificaciones están cerrados.
- [ ] Las anotaciones numeradas coinciden con el orden de los pasos en el texto.
- [ ] Las capturas se ven nítidas en la página impresa (probar zoom 100% en el lector de PDF).
## 3. Estilo y formato
- [ ] Todos los callouts tienen modificador correcto (`info`, `warning`, `danger`, `tip`, `note`).
- [ ] Ningún párrafo excede 4 líneas en pantalla.
- [ ] No hay cursivas decorativas; las negritas se usan solo para destacar UI ("Haga clic en **Guardar**").
- [ ] No hay colores fuera de la paleta autorizada (ver `estilo.md`).
- [ ] No hay tipografías distintas a Inter y JetBrains Mono.
- [ ] Los bloques de código usan `pre code` y no se parten a la mitad de página.
## 4. Numeración y referencias
- [ ] Los pasos siguen numeración global sin reiniciar.
- [ ] Las figuras se enumeran automáticamente y el caption coincide con el contenido de la imagen.
- [ ] Las referencias cruzadas (por ejemplo, "ver paso 4") son correctas.
- [ ] El índice generado automáticamente coincide con los encabezados reales.
## 5. Impresión y paginación
- [ ] Cada capítulo (`h1`) empieza en página nueva.
- [ ] Ningún heading queda al final de página sin contenido después.
- [ ] Ningún `.step-block`, `.callout` o `figure` se parte a la mitad.
- [ ] La cabecera muestra el nombre del capítulo actual.
- [ ] El pie muestra "Página X de Y" coherente (X nunca excede Y, Y es el total real).
- [ ] La portada y la página de aviso de propiedad no muestran cabecera ni pie.
- [ ] El aviso de propiedad menciona explícitamente a "FactorPesca S.A. de C.V." como titular del documento.
- [ ] La portada usa sangrado completo (el fondo navy llega al borde de la hoja).
- [ ] Las imágenes no pierden color ni contraste al imprimir (`-webkit-print-color-adjust: exact`).
## 6. PDF final
- [ ] El PDF se abre sin errores en al menos dos visores (Chromium y un lector externo como Preview o Acrobat).
- [ ] El tamaño del PDF es razonable (menos de 25 MB para manuales de hasta 60 páginas; reducir peso si supera).
- [ ] Los marcadores de navegación del PDF están generados para cada capítulo.
- [ ] El archivo de salida se llama `manual-{aplicacion}-v{X.Y.Z}.pdf` y se entrega en `dist/`.
## 7. Procedimiento de revisión
1. Generar el PDF.
2. Recorrer el manual página a página. Marcar cualquier desviación.
3. Corregir el HTML/CSS/JS fuente (nunca el PDF).
4. Volver a generar.
5. Repetir hasta que el checklist esté completo.
6. Marcar el manual como `released` en el changelog del proyecto.
## 8. Errores frecuentes
- **PDF sin color de fondo**: falta `-webkit-print-color-adjust: exact`. Revisar `manual.css`.
- **TOC vacío**: los headings no tienen `data-toc` o están dentro de contenedores excluidos. Revisar `manual.js`.
- **Anotaciones mal posicionadas**: las coordenadas no están en porcentaje. Revisar `data-annotations`.
- **Pasos partiéndose a la mitad**: falta `break-inside: avoid` o el contenido del paso es demasiado alto. Dividir el paso.
- **Saltos de página inconsistentes**: la cabecera/pie no están en `@page`. Revisar `manual.css` sección `@page`.
## 9. Limitaciones técnicas conocidas
- **Números de página en el índice automático**: el script `manual.js` no
puede conocer el número de página final de cada sección en el momento de
renderizar el PDF, porque Chromium solo expone esos números después de
paginar. Por eso las entradas del TOC muestran `—` como número. Tres
opciones para resolverlo:
1. **Aceptar la limitación**: dejar el guion y añadir a mano los números
tras la primera generación, editando `templates/manual.html` y usando
`data-toc-label` con la numeración correcta.
2. **Hacer un build en dos pasadas**: generar el PDF una vez, leer los
números de página reales del PDF resultante y volver a renderizar con
los números ya conocidos. Requiere un parser de PDF.
3. **Quitar los números del TOC**: ocultar la columna derecha de cada
fila del índice con CSS y dejar solo el nombre del capítulo/sección
con sus líderes de puntos. Es la opción más limpia visualmente.
- **Named pages en Chromium**: el uso de `@page cover` y `@page copyright` está
soportado pero requiere que la sección use exactamente la clase CSS
correspondiente (`cover`, `copyright-page`, etc.) sin selectores anidados.
+121
View File
@@ -0,0 +1,121 @@
# Capturas de pantalla
Cómo producir las capturas que acompañarán a los manuales. Esta guía presupone que tienes instalada la skill `playwright-skill` de lackeyjb.
## Configuración del navegador
- **Viewport**: 1440×900 px (escritorio estándar).
- **Factor de escala**: 2 (DPR 2). Resultado: imagen a 2880×1800. Reduce al 50% en el CSS con `max-width: 100%` y `image-rendering: -webkit-optimize-contrast`.
- **Localización**: `es-ES` (o la del usuario). Forzar la zona horaria de la operación si afecta a la UI.
- **User agent**: dejar el de Chromium por defecto.
- **Modo headless**: recomendado. Usar `headless: true` para ejecuciones desatendidas. Reservar headed para depuración puntual.
Plantilla de configuración para `playwright-skill`:
```bash
export PW_HEADLESS=true
export PW_ARTIFACT_DIR="$PWD/artifacts"
node "$SKILL_DIR/run.js" "$TMP_DIR/capturar-flujo.js"
```
## Resolución y nombrado
- Tamaño final recomendado: entre 1200 y 1600 px de ancho (después del downscale). Más grande no mejora la impresión y aumenta el peso del PDF.
- Formato: PNG para capturas con texto nítido. JPEG (`quality: 80`) para pantallas con muchas fotos.
- Nombres de archivo: `NN-slug-corto.png` donde `NN` es el número de paso. Ejemplo: `01-login.png`, `02-panel-principal.png`, `03-formulario-cliente.png`.
- Guardar todas las capturas dentro de `artifacts/` en la raíz del manual. El build copia esa carpeta al directorio temporal de render.
## Antes de capturar
1. **Sesión limpia**: cierra banners de cookies, notificaciones push y tooltips de onboarding. Si la app tiene un banner de "tour", descártalo.
2. **Datos consistentes**: usa siempre el mismo usuario de pruebas, mismo idioma y mismo conjunto de datos. Cualquier inconsistencia se notará en el manual.
3. **Quita lo accesorio**: oculta elementos beta, flags, datos personales reales, mensajes transitorios. No falsees pantallas: si un paso intermedio no es representativo, no lo fotografíes.
4. **Espera activa**: usa `await page.locator(...).waitFor({ state: 'visible' })` o `await page.getByRole(...).waitFor()` en lugar de `waitForTimeout`. La captura debe hacerse después de que la UI termine de actualizarse.
## Encuadre
- Captura la pantalla completa con `fullPage: true` solo si la página entera es el contenido relevante. Para vistas con scroll, prefiere captura del viewport (`fullPage: false`).
- Recorta a la zona de interés con `page.locator(selector).screenshot({ path })` cuando solo importa un componente (por ejemplo, un modal).
- Deja al menos 16pt de margen visual alrededor del elemento principal.
- Incluye en la captura el contexto suficiente para que el lector se ubique: la barra de navegación, el breadcrumb o el encabezado de sección son válidos.
- Evita capturas con scrollbars visibles a menos que sea indispensable.
## Privacidad y seguridad
- **Nunca** incluyas contraseñas, tokens, claves API, datos personales reales o números de identificación reales. Sustituye por placeholders tipográficos como `usuario@ejemplo.com`, `••••••••`, `1234567X` o cuentas de prueba claramente ficticias.
- Antes de capturar, valida que la vista no contenga datos sensibles: usa cuentas de test y datos sintéticos.
- Si necesitas capturar un error real, anonimiza la URL y los IDs antes de pegarla en el manual.
- Revisa el fondo de la captura: pueden aparecer datos de otras pestañas sincronizadas, notificaciones del sistema o fechas de la máquina.
## Anotaciones
Las anotaciones se aplican en el HTML con la clase `.annotations` y el atributo `data-annotations`. Cada elemento del array es un marcador posicionado en porcentaje respecto a la imagen:
```html
<figure class="screenshot-frame">
<img src="artifacts/01-login.png" alt="Pantalla de inicio de sesión" />
<ol class="annotations" data-annotations='[
{"x": 62, "y": 58, "n": 1, "label": "Botón Iniciar sesión"},
{"x": 50, "y": 74, "n": 2, "label": "Campo contraseña"}
]'></ol>
<figcaption>Inicio de sesión con credenciales de prueba.</figcaption>
</figure>
```
Convenciones:
- `x` y `y` son porcentajes sobre el ancho y alto de la imagen. 0/0 es la esquina superior izquierda, 100/100 la inferior derecha.
- `n` es el número que se muestra en el círculo. Debe coincidir con el orden lógico del paso (1, 2, 3…).
- `label` es texto accesible (lectores de pantalla) y se usa como tooltip al pasar el cursor.
- En el manual impreso, los marcadores se muestran en blanco con borde primary, número primary.
## Plantilla de script Playwright
```javascript
const { chromium } = require('playwright');
const path = require('node:path');
const fs = require('node:fs');
const TARGET = process.env.TARGET_URL || 'http://localhost:3000';
const ART = process.env.PW_ARTIFACT_DIR || path.join(process.cwd(), 'artifacts');
fs.mkdirSync(ART, { recursive: true });
(async () => {
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({
viewport: { width: 1440, height: 900 },
deviceScaleFactor: 2,
locale: 'es-ES',
timezoneId: 'Europe/Madrid',
});
const page = await context.newPage();
// Paso 1: login
await page.goto(`${TARGET}/login`);
await page.getByLabel('Email').waitFor();
await page.screenshot({ path: path.join(ART, '01-login.png'), fullPage: false });
// Paso 2: panel principal
await page.getByLabel('Email').fill('demo@factorpesca.com');
await page.getByLabel('Contraseña').fill('Demo-2025!');
await page.getByRole('button', { name: 'Iniciar sesión' }).click();
await page.getByRole('heading', { name: /panel/i }).waitFor();
await page.screenshot({ path: path.join(ART, '02-panel.png'), fullPage: false });
await browser.close();
})();
```
Guarda el script como `scripts/capturar.js` y ejecútalo a través de la skill `playwright-skill` con `node "$SKILL_DIR/run.js" capturar.js`.
## Verificación rápida
Antes de pasar al redactor, ejecuta este checklist:
- [ ] Las capturas se ven nítidas a tamaño real (sin pixelado al 100%).
- [ ] El texto de la UI es legible.
- [ ] No hay datos personales reales.
- [ ] El número de capturas coincide con el número de pasos previstos.
- [ ] Los nombres de archivo siguen el patrón `NN-slug.png`.
- [ ] Cada captura muestra el estado final del paso anterior, no un estado intermedio de carga.
- [ ] Los banners de cookies, tooltips de onboarding y notificaciones de "tour" están cerrados.
+156
View File
@@ -0,0 +1,156 @@
# Estilo visual
Identidad obligatoria para todos los manuales PDF generados por esta skill. Cualquier desviación rompe la consistencia de la marca FactorPesca.
## Paleta de colores
| Token | Hex | Uso principal |
|---|---|---|
| `--color-primary` | `#0B2545` | Portada, H1, H2, banda superior, línea fina decorativa |
| `--color-primary-600` | `#13315C` | H3, texto sobre fondos claros cuando se necesita profundidad |
| `--color-primary-100` | `#E6ECF2` | Fondo de callouts suaves, filas alternadas sutiles |
| `--color-accent` | `#F4A300` | Círculos numeradores de pasos, marcadores de anotación, subtítulo de portada, foco |
| `--color-accent-600` | `#D88C00` | Estados activos y hover del accent |
| `--text-primary` | `#1A1A1A` | Cuerpo del documento |
| `--text-secondary` | `#404040` | Subtítulos, descripciones cortas |
| `--text-muted` | `#6B7280` | Metadatos, captions, fechas |
| `--surface` | `#FFFFFF` | Fondo de página |
| `--surface-alt` | `#F3F4F6` | Filas alternadas de tablas, zonas de respiro |
| `--border` | `#E5E7EB` | Bordes de tablas, marcos de capturas |
| `--success` | `#047857` | Callouts `tip` y resultados exitosos |
| `--warning` | `#B45309` | Callouts `warning` y advertencias |
| `--danger` | `#B91C1C` | Callouts `danger` y operaciones destructivas |
| `--info` | `#1D4ED8` | Callouts `info` y aclaraciones |
Reglas de uso:
- El blanco de página es la única superficie de fondo permitida para el contenido.
- El `--color-accent` se reserva para numeración, foco y elementos interactivos. **No** se usa como fondo de grandes áreas.
- Los callouts siempre combinan barra lateral de 4pt coloreada + fondo `--color-primary-100` (versión suave) o blanco con borde coloreado (versión estricta).
- Contraste mínimo: 4.5:1 para texto sobre fondo (cumple WCAG AA).
## Tipografía
Familias (cargar desde Google Fonts dentro de `manual.css`):
- **Inter** 300 / 400 / 600 / 700 — títulos, cuerpo, UI.
- **JetBrains Mono** 400 / 500 — código, rutas, comandos, datos identificadores.
Escala en puntos (optimizada para página Letter 8.5×11"):
| Estilo | Familia | Peso | Tamaño | Interlineado | Uso |
|---|---|---|---|---|---|
| Display (portada) | Inter | 700 | 36pt | 1.15 | Título de la portada |
| H1 (capítulo) | Inter | 700 | 28pt | 1.20 | Inicio de cada capítulo |
| H2 | Inter | 700 | 20pt | 1.25 | Secciones dentro de un capítulo |
| H3 | Inter | 600 | 15pt | 1.30 | Sub-secciones |
| H4 | Inter | 600 | 12pt | 1.30 | Etiquetas, mini-encabezados |
| Body | Inter | 400 | 11pt | 1.55 | Párrafos del manual |
| Body énfasis | Inter | 600 | 11pt | 1.55 | Texto destacado en línea |
| Caption | Inter | 400 | 9pt | 1.40 | Subtítulos de figuras, pies de tabla |
| Eyebrow | Inter | 600 | 9pt tracking 0.12em uppercase | 1.40 | Etiquetas small caps, banda superior |
| Code | JetBrains Mono | 400 | 9.5pt | 1.50 | Bloques `pre code` y teclas |
| Code énfasis | JetBrains Mono | 500 | 9.5pt | 1.50 | Palabras reservadas inline `code` |
Reglas de uso:
- Los números de paso se renderizan en Inter 700 13pt blanco sobre `--color-accent`.
- Los nombres de botones o campos se escriben exactamente como aparecen en la UI, entre comillas tipográficas « », o en `code` si son identificadores técnicos.
- No usar cursiva. Las cursivas solo se reservan para nombres científicos o títulos de obras externas.
- No usar subrayado excepto en enlaces web (que en el PDF se muestran como `--color-info` sin subrayado en la versión final).
## Componentes
Todos los componentes se aplican con clases CSS. El HTML sólo necesita marcar la estructura semántica y la clase adecuada.
### Callout
```html
<aside class="callout callout-warning">
<div class="callout-title">Advertencia</div>
<p>Esta acción cierra la temporada y no se puede deshacer.</p>
</aside>
```
Modificadores: `callout-info`, `callout-warning`, `callout-danger`, `callout-tip`, `callout-note`.
Anatomía: barra lateral 4pt coloreada + caja con fondo `--color-primary-100` + icono 18pt a la izquierda (Unicode o SVG inline) + título 12pt bold + cuerpo 11pt.
### Bloque de paso (`.step-block`)
```html
<article class="step-block" data-step>
<div class="step-number" aria-hidden="true">1</div>
<div class="step-content">
<h3 class="step-title">Iniciar sesión en la plataforma</h3>
<p>Abra el navegador y vaya a <code>https://app.factorpesca.com</code>.</p>
<figure class="screenshot-frame">
<img src="artifacts/01-login.png" alt="Pantalla de inicio de sesión" />
<ol class="annotations" data-annotations='[{"x":62,"y":58,"n":1},{"x":50,"y":74,"n":2}]'></ol>
</figure>
<aside class="callout callout-info callout-result">
<div class="callout-title">Resultado esperado</div>
<p>Verá el panel principal con su nombre en la esquina superior derecha.</p>
</aside>
</div>
</article>
```
El círculo del paso usa `--color-accent`. El JS inyecta el número automáticamente si se omite, pero se recomienda fijarlo en el HTML.
### Captura con anotaciones (`.screenshot-frame`)
- Imagen con `box-shadow: 0 2pt 8pt rgba(0,0,0,0.08)` y borde 1pt `--color-border`.
- Caption automática con prefijo "Figura N." y descripción leída de `figcaption` o `alt`.
- Anotaciones: círculos blancos 22pt con borde 2pt `--color-primary` y número `--color-primary` 11pt bold. Se posicionan con `top` / `left` en porcentajes sobre la imagen.
- En impresión, las anotaciones conservan tamaño y color (requiere `-webkit-print-color-adjust: exact`).
### Bloque de código (`.code-block`)
```html
<pre class="code-block"><code>npx skills add lackeyjb/playwright-skill --skill playwright-skill --yes</code></pre>
```
Fondo `#1E1E2E`, texto `#F8F8F2`, padding 14pt, radio 4pt, JetBrains Mono 9.5pt, números de línea automáticos.
### Tabla de datos (`.data-table`)
Header con fondo `--color-primary` y texto blanco Inter 600 10pt. Filas alternadas blanco / `--color-surface-alt`. Borde inferior 0.5pt `--color-border`. Padding 8pt vertical, 10pt horizontal.
### Badge
```html
<span class="badge badge-version">NUEVO</span>
```
Fondo `--color-accent`, texto blanco, padding 2pt 8pt, radio 12pt, Inter 700 8pt uppercase.
## Iconografía
- Iconos en línea con Unicode cuando sea viable: ⚠ info, ⚠ warning, ⛔ danger, ✅ tip, ⓘ note.
- Iconos decorativos en SVG inline con `currentColor` para heredar el color del contexto.
- Los iconos no son funcionales: cada callout lleva además texto explícito.
## Tono editorial
- Voz: segunda persona del singular o plural según el caso ("Abra el menú", "Vayan al panel").
- Tiempo verbal: presente indicativo para acciones ("Haga clic"), futuro para consecuencias ("Aparecerá un mensaje").
- Direccionalidad: "arriba a la derecha", "en la columna central", nunca "donde indica la flecha".
- Términos: usar los nombres exactos de la UI; si se traduce, mantener coherencia durante todo el manual.
- Evitar: "simplemente", "fácilmente", "obviamente", "basta con", jerga innecesaria.
- Preferir: verbos directos, frases cortas, una idea por oración.
- Párrafos: máximo 4 líneas en pantalla. Si excede, dividir en pasos o lista.
- Listas: usar listas numeradas para procedimientos secuenciales, con viñetas para enumeraciones sin orden.
## Reglas de impresión
- Tamaño Letter 8.5×11" obligatorio.
- Margen 22mm en los cuatro lados. La portada se imprime sin márgenes (full bleed).
- Cabecera: nombre del capítulo actual (eyebrow) en `Inter 600 9pt`, color `--color-primary-600`, línea inferior 0.5pt `--color-border`.
- Pie: "FactorPesca · Manual de usuario" a la izquierda, "Página X de Y" a la derecha.
- Salto de página:
- Cada `h1` de capítulo empieza en página nueva.
- `h2`, `h3`, `h4` no quedan huérfanos al final de página.
- `.step-block`, `.callout`, `.screenshot-frame`, `.code-block`, `figure`, `table` no se parten.
- Color: `-webkit-print-color-adjust: exact;` y `print-color-adjust: exact;` en todos los elementos coloreados.
- Imágenes: máximo 700px de ancho real (escala 2x retina queda a 1400px).
+154
View File
@@ -0,0 +1,154 @@
# Estructura del documento
Anatomía obligatoria de cualquier manual generado por esta skill. Omite o añade secciones solo si el usuario lo pide explícitamente.
## Visión general
```
1. Portada
2. Índice
3. Resumen ejecutivo
4. Requisitos previos
5. Capítulo 1
6. Capítulo 2
...
N. Solución de problemas
N+1. Glosario (opcional)
N+2. Aviso de propiedad y confidencialidad (obligatoria)
```
## 1. Portada
Elementos obligatorios:
- Logo de FactorPesca (placeholder hasta que se sustituya por el definitivo).
- Eyebrow en accent color (por defecto «Manual de usuario»).
- Título del manual: "Manual de [Aplicación]".
- Subtítulo descriptivo de una línea.
La portada es deliberadamente minimalista: solo logo, eyebrow, título y
subtítulo. Sin versión, fecha de emisión, autor ni metadatos.
Plantilla HTML: la primera página dentro de `templates/manual.html` con clase `cover`. Forzar `break-after: page` en `@media print`.
## 2. Índice
- Generado automáticamente por `manual.js` a partir de los `h1`, `h2`, `h3` del documento.
- Numeración con líderes de puntos (CSS `leader`).
- Mostrar solo `h1` y `h2` por defecto. Si un capítulo tiene muchas sub-secciones, incluir `h3` discretamente con sangrado.
- Numeración: capítulos en romanos (I, II, III), secciones en arábigos (1.1, 1.2).
## 3. Resumen ejecutivo
- Una página con tres bloques:
1. **Objetivo**: para qué sirve el manual y qué aprenderá el lector.
2. **Audiencia**: a quién va dirigido (operadores, supervisores, administradores, etc.).
3. **Alcance**: qué procesos cubre y qué procesos quedan fuera.
Si el manual es muy largo (>40 páginas), dividir el resumen en "objetivo" y "cómo leer este manual".
## 4. Requisitos previos
Lista de todo lo que el lector necesita antes de empezar:
- **Software**: navegador, sistema operativo, plugins.
- **Cuenta**: tipo de usuario y permisos necesarios.
- **Datos**: archivos, credenciales o recursos de entrada.
- **Conocimientos**: formación previa recomendada.
Estructura como `.checklist` o `.data-table` con dos columnas ("Requisito", "Detalle").
## 5. Capítulos (núcleo del manual)
Un capítulo por proceso de usuario. Estructura interna:
1. **Encabezado del capítulo** (`<h1 data-chapter>`)
2. **Objetivo del capítulo** (caja `.callout-info` con título "Objetivo").
3. **Pasos** (cada uno un `.step-block`).
4. **Resultado del proceso** (caja `.callout-tip` con título "Resultado final").
5. **Errores comunes** (caja `.callout-warning` con título "Errores comunes"), si aplica.
Reglas:
- Un capítulo describe un proceso completo. Si el proceso es muy largo, dividirlo en varios capítulos, pero numerarlos con un prefijo común (4.1, 4.2, 4.3).
- El primer paso de cada capítulo debe incluir una captura del estado inicial (pantalla previa).
- El último paso debe mostrar el estado final con un callout `tip` "Resultado final".
- Evitar capítulo con más de 12 pasos. Si los hay, dividir.
## 6. Solución de problemas
Apartado obligatorio. Estructura:
```html
<section id="troubleshooting">
<h1>Solución de problemas</h1>
<p>Si encuentra algún error, busque el síntoma en esta sección antes de contactar al soporte.</p>
<article class="trouble">
<h3 class="trouble-symptom">No puedo iniciar sesión</h3>
<p><strong>Causa probable:</strong> la cuenta está bloqueada tras tres intentos fallidos.</p>
<p><strong>Solución:</strong> espere 15 minutos o solicite el desbloqueo al administrador.</p>
</article>
...
</section>
```
Cada problema: síntoma, causa, solución. Como máximo cinco problemas por bloque; si hay más, agrupar por categoría con `<h2>`.
## 7. Glosario (opcional)
Tabla de dos columnas: término, definición. Incluir solo si el manual usa jerga técnica o nombres propios.
## 8. Aviso de propiedad y confidencialidad (obligatoria)
Última página del manual. Su propósito es reforzar visualmente que el
documento es **propiedad privada de FactorPesca S.A. de C.V.** y
establecer las restricciones de uso, reproducción y divulgación.
Elementos obligatorios:
- Marca `©` grande en la parte superior.
- Razón social completa: `FactorPesca S.A. de C.V.`
- Subtítulo "Todos los derechos reservados."
- Título centrado: "Aviso de propiedad y confidencialidad".
- Cinco párrafos numerados en lenguaje formal que cubran:
1. Propiedad intelectual sobre todos los elementos del documento.
2. Prohibición de reproducción, distribución y transformación sin
autorización escrita.
3. Carácter privado y confidencial de la información, y obligación
de devolución o destrucción al término de la relación.
4. Reconocimiento de marcas registradas de terceros.
5. Ausencia de garantía y limitación de responsabilidad.
- Caja de contacto (callout primario) con el correo del área legal:
`legal@factorpesca.com`.
- Pie pequeño con la atribución de la skill y la tipografía usada.
Sin cabecera ni pie de página (clase `no-chrome` y named page
`copyright`). El borde superior de 6pt en color primary marca la
transición desde el contenido del manual hacia el cierre legal.
## Numeración y jerarquía
- Capítulos: `I`, `II`, `III`...
- Secciones: `1.1`, `1.2`, `2.1`...
- Sub-secciones: `1.1.1`, `1.1.2`...
- Pasos: numeración global con círculo de accent (`1`, `2`, `3`...). No reiniciar en cada capítulo.
- Figuras: `Figura 1.`, `Figura 2.`... (auto-numeradas por `manual.js`).
- Tablas: `Tabla 1.`, `Tabla 2.`... (auto-numeradas por `manual.js`).
## Saltos de página
- `h1` siempre en página nueva (`break-before: page`).
- `h2` puede fluir, pero nunca quedar al final de la página (`break-after: avoid` en el heading + `break-before: avoid` en el primer párrafo).
- Ningún `.step-block` puede partirse a la mitad (`break-inside: avoid`).
- Una figura o tabla debe vivir entera en la misma página, salvo que sea muy alta: en ese caso, el caption se imprime en ambas páginas.
## Encabezados y pies
Configurados en `manual.css` con `@page` Paged Media. Cada página muestra:
- Cabecera: nombre del capítulo actual (eyebrow small caps).
- Pie izquierda: "FactorPesca · Manual de usuario de [Aplicación]".
- Pie derecha: "Página X de Y".
Las páginas marcadas con `.no-chrome` (portada, aviso de propiedad) ocultan cabecera y pie.