CommunityProgramación y desarrollogithub.com

Diseño de Mazo de Presentación

Renderiza contenido estructurado proporcionado por el usuario en una presentación HTML autónoma de 1600×900 con un lenguaje visual oscuro tipo "archivo de imágenes" (títulos serif, reglas finas, movimiento controlado, figuras SVG nativas). Úsalo cuando el usuario quiera convertir un esquema, notas o un markdown página por página en un mazo compartible y sin conexión en lugar de un pptx.

¿Qué es Diseño de Mazo de Presentación?

Esta habilidad transforma contenido estructurado (markdown o JSON) en una presentación HTML autónoma de 1600×900, completamente offline y sin dependencias externas. Está diseñada para ser un motor de maquetación y animación, no un generador de contenido ni un extractor de datos. Soporta la entrada del usuario, normaliza el formato, selecciona entre diez arquetipos de página predefinidos (portada, afirmación, figura dividida, línea de tiempo, etc.) y genera un único archivo `index.html` que funciona desde `file://`. El lenguaje visual es oscuro y editorial, con títulos serif, cuerpos sans-serif, reglas finas y movimiento controlado. La habilidad verifica automáticamente la fidelidad del contenido, maneja activos faltantes con marcadores de posición visuales, y realiza controles de calidad antes de entregar el artefacto final. Está optimizada para agentes como Claude Code, Cursor o Codex que necesitan crear presentaciones compartibles sin conexión a red.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add Xavier23010596/design-deck-render

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Diseño de Mazo de Presentación — instrucciones de operación

Renderiza el contenido que el usuario proporciona en un mazo HTML autónomo. Eres un motor de maquetación y animación, no un generador de contenido ni un extractor.

0. Alcance

Dentro del alcance: analizar el contenido del usuario, elegir arquetipos de página, escribir un archivo HTML, compilarlo en un artefacto autónomo y verificar que se renderice.

Fuera del alcance: inventar hechos, generar imágenes, obtener páginas de terceros, exportar pptx/pdf, construir un editor.

1. Restricciones no negociables

  1. Nunca codifiques endpoints o identificadores. No pueden aparecer URLs, códigos compartidos, IDs compartidos, IDs de inquilino, rutas de API, tokens, claves o nombres de cuenta en los archivos generados. Cada valor de este tipo debe ser pasado en tiempo de ejecución por el usuario. Si el usuario no proporciona uno y la tarea lo necesita, pregunta.
  2. Nunca copies código fuente de terceros. No pegues, obtengas, reflejes ni "recrees por inspección" el HTML, CSS, JS, imágenes o fuentes de otro sitio. El lenguaje visual en §4 se especifica desde primeros principios; impleméntalo solo a partir de este documento.
  3. Sin conexión por defecto. La salida no debe contener ninguna solicitud de subrecurso externo: sin enlaces CDN, sin fuentes web, sin analíticas, sin imágenes remotas. Todo el CSS y JS en línea; todas las imágenes en línea como data URIs o referenciadas desde una carpeta local que el usuario controle.
  4. Artefacto único. El entregable es un único index.html que se abre desde file:// y sigue funcionando con la red desactivada.
  5. Fidelidad del contenido. No añadas afirmaciones, números o pies de foto que el usuario no haya proporcionado. Si falta un campo, deja el espacio visiblemente vacío (ver §4.9) en lugar de rellenarlo con texto plausible.
  6. Pregunta antes de asumir el alcance. Si el número de páginas, la audiencia o el idioma no están especificados, pregunta una vez, luego procede con un valor predeterminado declarado.

2. Parámetros de ejecución

Recolecta estos antes de escribir cualquier marcado. Nada aquí tiene un valor fijo.

ParámetroRequeridoTipoNotas
content_pathsírutaFuente del contenido página por página (§3)
titlesícadenaTítulo del mazo; también se usa para <title> y el encabezado corrido
out_pathsírutaDónde escribir el único archivo compilado
langnozh-CN | enPor defecto zh-CN; afecta la pila de fuentes y la altura de línea
pagesnointNúmero de páginas esperado; si se omite, se deriva del contenido y se reporta
image_dirnorutaCarpeta local con imágenes; si se omite, usar placas de marcador de posición
accentnohexColor de acento único; por defecto #C0483C
motionnofull | calmcalm acorta las duraciones un 40% y desactiva el empuje lento

Si el usuario referencia un sitio en vivo como referencia de estilo, regístralo como prosa ("oscuro editorial, títulos serif, reglas finas") y no obtengas, incrustes ni cites sus recursos.

3. Contrato de entrada

Acepta cualquiera de los formatos; normaliza a la forma JSON en §3.3 primero.

3.1 Convención Markdown

# Título del mazo
## Página 1 — Portada
- claim: una oración, falsable
- kicker: LECTURA DE DISEÑO · 001
- image: cover.webp
- text: cuerpo corto opcional, <= 40 caracteres
## Página 2 — Afirmación
...

3.2 JSON

{
  "title": "cadena",
  "lang": "zh-CN",
  "pages": [
    {
      "id": 1,
      "kind": "cover",
      "kicker": "cadena?",
      "title": "cadena",
      "claim": "cadena?",
      "body": "cadena? (<= 40 caracteres)",
      "figure": { "src": "img/x.webp", "caption": "cadena?", "note": "cadena?" },
      "data": { "value": "0.89", "rangeStart": "0.90", "rangeEnd": "0.95", "label": "cadena" },
      "items": ["cadena", "cadena"],
      "caveat": "cadena?"
    }
  ]
}

3.3 Objeto de página normalizado

id (int, contiguo desde 1), kind, kicker, title, claim, body, figure, data, items, caveat. Las claves desconocidas se conservan en un atributo data-extra en lugar de descartarse silenciosamente.

4. Contrato de renderizado

4.1 Escenario

Lienzo fijo de 1600×900, escalado uniformemente dentro del viewport; nunca se refluye.

#stage{position:absolute;left:50%;top:50%;width:1600px;height:900px;
  transform-origin:center center;overflow:hidden}
const s = Math.min(vw / 1600, vh / 900);
stage.style.transform = `translate(-50%,-50%) scale(${s})`;

Usa visualViewport cuando esté disponible y toma Math.min(visualViewport.height, innerHeight); body debe tener position:fixed; inset:0; height:100dvh; overflow:hidden. Escucha resize, orientationchange y visualViewport.resize.

4.2 Tokens

:root{
  --ink:#0F1214; --ink2:#161A1D;
  --paper:#E9E5DC; --dim:rgba(233,229,220,.52); --faint:rgba(233,229,220,.30);
  --rule:rgba(233,229,220,.20);
  --accent:#C0483C;            /* sobrescribible mediante el parámetro `accent` */
  --serif:"Noto Serif SC","Source Han Serif SC","Songti SC",serif;
  --sans:"Noto Sans SC","Source Han Sans SC","PingFang SC","Microsoft YaHei",sans-serif;
}

El color de acento está reservado solo para numeración y figuras clave. Nunca lo uses para decoración, bordes o encabezados en masa.

4.3 Escala tipográfica

66 / 46 / 30 / 19 / 15 / 12 / 11 px. El texto del cuerpo nunca por debajo de 15 px; 11–12 px se limita a encabezados corridos, pies de foto y notas al pie. Los títulos son serif; el cuerpo es sans. Altura de línea: títulos 1.28–1.5, cuerpo 1.95–2.0. Espaciado entre letras en kickers y pies de foto: 0.14em–0.22em.

4.4 Cuadrícula

Relleno de página 84px 104px. Ancho máximo de la columna de contenido 1180 px. Las divisiones de dos columnas usan gap: 70px y una división no igual (ej. 820/512) — las mitades iguales se leen como una hoja de cálculo.

4.5 Placa (panel de imagen)

.plate{position:relative;overflow:hidden;background:var(--ink2)}
.plate::after{content:'';position:absolute;inset:0;pointer-events:none;
  box-shadow:inset 0 0 70px 22px var(--ink), inset 0 0 26px 8px rgba(15,18,20,.55)}
.plate img{width:100%;height:100%;object-fit:cover;display:block;
  transform:scale(1.07);transition:transform 11s linear}
.slide.in .plate img{transform:scale(1)}

La sombra interior disuelve el fondo claro de la propia imagen en la página oscura; sin ella cada foto muestra una costura de rectángulo brillante.

4.6 Primitivas de movimiento — una por página

ClaseEfecto
.riseDesvanecimiento hacia arriba de 16 px; escalonar con .d1–.d6
.drawCrecimiento de trazado SVG; requiere pathLength="1000"; stroke-dashoffset:1000 → 0
.wipeclip-path: inset(0 100% 0 0) → inset(0)
.popSolo opacidad, puramente retardado

Exactamente una de estas es el movimiento principal de la página; las demás solo pueden ser ecos retardados. Duración: rise 0.9 s, draw 1.7 s, wipe 1.3 s, push de imagen 11 s. La curva de aceleración es out-cubic, nunca bounce.

4.7 Arquetipos de página

Elige entre estos diez; no inventes diseños ad hoc.

  1. Portada — placa a sangre, bloque de título alineado abajo a la izquierda, divisor de regla fina, fila de subtítulo.
  2. Afirmación — una cita sobredimensionada, línea de autor, nota al pie de alcance fijada a la regla inferior.
  3. Figura dividida + texto — figura a la izquierda, kicker/título/cuerpo a la derecha, figura de escala nativa opcional.
  4. Figura a sangre + trazado — placa de ancho completo con un trazado SVG superpuesto y una etiqueta final.
  5. Anclas numeradas — figura con 2–4 insignias .pin colocadas en las partes reales, leyenda a la derecha.
  6. Conjunto escalonado — 3 placas de tamaño decreciente desplazadas a lo largo de una diagonal; un activo faltante se convierte en una tarjeta de "brecha de archivo" discontinua que nombra qué fotografiar.
  7. Barra de rango — dos puntos finales siempre visibles con ambos números; nunca mostrar un solo número más una nota.
  8. Línea de tiempo — regla horizontal, 3 nodos, el nodo fuera de alcance ahuecado.
  9. Página de costos — tres declaraciones cortas, sangría escalonada, sin imágenes (las imágenes suavizan la honestidad).
  10. Cierre cinco — cinco líneas numeradas en una regla vertical, más una oración de acción.

4.8 Cromo

Encabezado corrido (.rail) arriba a la izquierda con la etiqueta del mazo, arriba a la derecha con NN / TT; barra de progreso de 2 px en la parte inferior en color de acento; indicación de teclado que se desvanece después de 6.5 s. Teclado: ←/→/Espacio/RePág/AvPág, F pantalla completa, A reproducción automática (9 s/página), Inicio/Fin. Clic en la mitad derecha → siguiente, mitad izquierda → anterior. Táctil: deslizamiento horizontal de 50 px. Enlace profundo: ?p=N.

4.9 Activos faltantes

Si figure.src está ausente o el archivo no existe, renderiza una placa de marcador de posición, no una imagen rota:

<div class="plate" data-ph="FIG 03 · 待补:正侧全高,机位平齐腰线"></div>

Estilo [data-ph] con un rayado diagonal tenue, un contorno discontinuo de 1 px y la etiqueta centrada al 58% de opacidad. Un marcador de posición debe ser visible — un bloque oscuro en una página oscura se lee como "nada aquí".

4.10 Estado estático (requerido)

@media (prefers-reduced-motion: reduce){
  *{transition:none!important;animation:none!important}
  .draw{stroke-dashoffset:0}
  .pop,.rise,.pin{opacity:1;transform:none}
  .wipe{clip-path:none}
  .plate img{transform:none}
}

Este bloque es tanto la ruta de accesibilidad como la única forma confiable de capturar una página. No implementes una clase .static activada desde JS en su lugar.

5. Procedimiento

  1. Leer contenido. Analizar según §3, normalizar y devolver: recuento de páginas, tipos elegidos, campos faltantes. Detenerse y preguntar si falta más de un campo requerido en todas las páginas.
  2. Asignar arquetipos. Mapear cada página a uno de §4.7. Reportar el mapeo como una tabla; marcar cualquier página cuyo contenido no encaje en un arquetipo en lugar de forzarlo.
  3. Verificar activos. Para cada figure.src, verificar que el archivo exista bajo image_dir. Listar los que faltan; se convierten en marcadores de posición de §4.9.
  4. Escribir index.src.html. Marcado escrito a mano, sin motor de plantillas. Una <section class="slide" data-i="N"> por página, N contiguo desde 0.
  5. Compilar. Insertar CSS/JS e imágenes en línea en out_path. Verificar que el artefacto no referencie ninguna URL absoluta de ningún esquema (incluyendo rutas relativas al protocolo //host) y no mantenga ninguna referencia relativa img/.
  6. Verificar. Comprobaciones estáticas (ver §6) más capturas de pantalla sin cabeza de al menos las páginas 1, media, última a 1600×900 y 844×390.
  7. Reportar. Salida: recuento de páginas, tabla de arquetipos, archivos escritos, tamaño del artefacto, rutas de capturas de pantalla y cualquier marcador de posición dejado.

6. Puertas de calidad

Fallo en la compilación y corregir, no enviar con advertencias.

  • data-i contiguo desde 0; una sección por página de contenido.
  • No queda {{placeholder}} sin reemplazar.
  • Sin subrecurso externo: sin URL absoluta de ningún esquema, sin ruta relativa al protocolo.
  • El artefacto tiene cero src="img/..." restantes (todos insertados en línea) cuando se compila como archivo único.
  • @media (prefers-reduced-motion: reduce) presente.
  • Cada página tiene exactamente una clase de movimiento principal.
  • Ningún nodo de texto desborda su contenedor a 1600×900 y 844×390.
  • Las imágenes ≥ 300 KB cada una se marcan con una sugerencia de WebP.
  • Artefacto único ≤ 6 MB; más grande significa que las imágenes no se comprimieron.
  • Sin URL, código compartido, ID o token en ningún archivo generado.
  • No se incrusta código fuente, imagen o fuente de terceros.

7. Contrato de salida

<out_path>              único HTML autónomo
<directorio de trabajo>/index.src.html   fuente editable a mano (mantener junto)

Indicar explícitamente en el mensaje final: que el archivo es autónomo, que no necesita red y qué fuentes espera localmente.

8. Gestión de fallos

SituaciónRespuesta
El contenido no tiene claim por páginaPedir uno por página; no inferir afirmaciones
El número de páginas supera 22Advertir sobre la capacidad de atención; proponer fusionar, luego seguir la elección del usuario
Imagen referenciada pero faltanteRenderizar marcador de posición de §4.9 y listar la ruta en el informe
Fuentes no disponiblesContinuar; indicar la alternativa en el informe
El usuario solicita pptx/pdfRechazar y explicar que los formatos están fuera del alcance
El usuario solicita "copiar este sitio exactamente"Explicar que solo el lenguaje visual se reproduce a partir de esta especificación; no obtener ni reflejar el sitio

Skills relacionados