← Todas las superficies

La órbita por superficie · DOOH · pDOOH

Se lee de paso

Vía pública estática y pantalla digital programática comparten una verdad: nadie se detiene a leer. La voz se reduce a lo esencial, la respuesta manda y la firma se mide en metros o en tiempo, no con el porcentaje de redes. Guía completa: docs/agent-composition/surfaces/dooh-pdooh.md.

dooh
1 aprobada · 1 pendiente
pdooh
4 opciones
Token
surfaces.dooh · pdooh

01 · dooh

DOOH · vía pública estática

La marca en la calle con una sola idea que se entiende en segundos. Se diseña en una maqueta a escala y se prueba a la distancia real.

Formatos · efeonceGraphicLine.surfaces.dooh.formats
FormatoMedidasCómo se lee
caminero-3x13000 × 1000 px · real 12 × 4 m · se lee a 30–150 m · en 3 sDesde un auto, a la distancia del token y en el tiempo del token: letra y logo se miden en metros contra la distancia más larga.
paleta-1x21000 × 2000 px · real 1 × 2 m · se lee a 2–15 mCaminando, a pocos metros: la firma se lee a la distancia máxima; la voz ocupa el tercio alto.

Reglas de la superficie

Recetas aprobadas y pendientes

caminero-lens

Aprobadapapel billboard · formato caminero-3x1
Caminero 12 × 4 m · lente AXIS · logo abajo a la izquierda
Caminero 12 × 4 m · lente AXIS · logo abajo a la izquierda
Prueba a distancia (instrumento de revisión: ver a 60 cm, zoom 100 %)
OpciónPrueba a distancia (instrumento de revisión: ver a 60 cm, zoom 100 %)

Caminero con la voz arriba a la izquierda, la lente a la derecha sobre una foto nativa 3:1 y el logo abajo a la izquierda.

Token
efeonceGraphicLine.surfaces.dooh.recipes['caminero-lens']
Tablero del canvas
dooh · Main, dooh · PruebaDistancia

Reglas de la receta

  • logo-end-of-reading-pathCarretera: el logo va abajo a la izquierda, al final del recorrido de lectura.
Valores del token
{
  "status": "approved",
  "role": "billboard",
  "formats": [
    "caminero-3x1"
  ],
  "voice": {
    "mode": "question-answer"
  },
  "lens": {
    "region": "center-end",
    "accentSphere": "upper-start",
    "circle": {
      "cxOfWidth": 0.7,
      "cyOfHeight": 0.5,
      "rOfHeight": 0.4
    },
    "ringROfHeight": 0.448
  },
  "reserves": {
    "voice": {
      "side": "start",
      "share": 0.4876666666666667,
      "fromTop": 0.2
    },
    "answer": {
      "side": "start",
      "fromTop": 0.348
    },
    "lens": {
      "side": "end",
      "share": 0.5123333333333333
    }
  },
  "type": {
    "question": {
      "m": 0.44
    },
    "answer": {
      "m": 1.32
    }
  },
  "signature": {
    "mode": "logo",
    "anchor": "bottom-start",
    "widthM": 2,
    "widthRangeM": [
      0.8,
      3
    ],
    "marginOfShortSide": 0.09
  },
  "photo": {
    "format": "3:1",
    "lever": "luz-motivada",
    "lensMm": 85,
    "lookAtLens": false
  },
  "rules": [
    "logo-end-of-reading-path"
  ],
  "references": [
    {
      "id": "caminero-lens",
      "title": "Caminero 12 × 4 m · lente AXIS · logo abajo a la izquierda",
      "status": "approved",
      "image": "/references/surfaces/dooh/caminero-lens.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "Main.dc.html"
    },
    {
      "id": "distance-test",
      "title": "Prueba a distancia (instrumento de revisión: ver a 60 cm, zoom 100 %)",
      "status": "option",
      "image": "/references/surfaces/dooh/distance-test.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PruebaDistancia.dc.html"
    }
  ]
}

paleta

Pendientepapel billboard · formato paleta-1x2
Paleta 1 × 2 m · logo 35 %
Paleta 1 × 2 m · logo 35 %
Paleta 1 × 2 m · logo 20 %
Paleta 1 × 2 m · logo 20 %

Paleta de ciudad: voz arriba, logo centrado abajo; el ancho del logo espera decisión.

Token
efeonceGraphicLine.surfaces.dooh.recipes.paleta
Tablero del canvas
dooh · Paleta35, dooh · Paleta20
Valores del token
{
  "status": "pending",
  "role": "billboard",
  "formats": [
    "paleta-1x2"
  ],
  "voice": {
    "mode": "question-answer"
  },
  "reserves": {
    "voice": {
      "side": "start",
      "fromTop": 0.065
    },
    "answer": {
      "side": "start",
      "fromTop": 0.117
    }
  },
  "type": {
    "question": {
      "m": 0.072
    },
    "answer": {
      "m": 0.216
    }
  },
  "signature": {
    "mode": "logo",
    "anchor": "bottom-center",
    "widthOfWidthOptions": [
      0.2,
      0.35
    ],
    "marginOfShortSide": 0.09,
    "decision": "pending"
  },
  "measuredContrast": {
    "question": 16.74,
    "answer": 15.7,
    "logo20": 20.12,
    "logo35": 20.03
  },
  "rules": [],
  "references": [
    {
      "id": "paleta",
      "title": "Paleta 1 × 2 m · logo 35 %",
      "status": "pending",
      "image": "/references/surfaces/dooh/paleta.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "Paleta35.dc.html"
    },
    {
      "id": "paleta-logo-20",
      "title": "Paleta 1 × 2 m · logo 20 %",
      "status": "pending",
      "image": "/references/surfaces/dooh/paleta-logo-20.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "Paleta20.dc.html"
    }
  ]
}

02 · pdooh

pDOOH · pantalla digital programática

Pantallas LED y mupis digitales comprados de forma programática: la pieza pasa diez segundos, sin audio, y la voz se arma en dos segundos como máximo.

Formatos · efeonceGraphicLine.surfaces.pdooh.formats
FormatoMedidasCómo se lee
led-16x91920 × 1080 pxDe lejos y de paso: sólo la respuesta, grande, con la lente.
mupi-9x161080 × 1920 pxA pocos metros, caminando: pregunta y respuesta, la lente arriba y el logo abajo.

Reglas de la superficie

Opciones

Medidas en el canvas y sin aprobación: se pueden proponer, declarándolo en la entrega.

led-wall-answer

Opciónpapel screen · formato led-16x9
pDOOH · pantalla LED 1920 × 1080 · lente muro, sólo respuesta
pDOOH · pantalla LED 1920 × 1080 · lente muro, sólo respuesta

Pantalla LED con la lente del muro: sólo la respuesta, el sujeto mira hacia el texto y el logo va bajo la respuesta.

Token
efeonceGraphicLine.surfaces.pdooh.recipes['led-wall-answer']
Tablero del canvas
dooh · PdoohLed

Reglas de la receta

  • answer-only-at-distanceEste formato lleva sólo la respuesta: no hay pregunta.
  • subject-looks-toward-textEl sujeto de la foto mira hacia el texto.
Valores del token
{
  "status": "option",
  "role": "screen",
  "formats": [
    "led-16x9"
  ],
  "voice": {
    "mode": "answer-only"
  },
  "lens": {
    "piece": "wall"
  },
  "reserves": {
    "answer": {
      "side": "start",
      "fromTop": 0.4376851851851852
    }
  },
  "type": {
    "answer": {
      "px": 132
    }
  },
  "signature": {
    "mode": "logo",
    "anchor": "under-answer",
    "widthOfWidth": 0.17,
    "alternative": {
      "anchor": "bottom-center",
      "widthOfWidthRange": [
        0.1,
        0.25
      ]
    }
  },
  "photo": {
    "gaze": "toward-text"
  },
  "rules": [
    "answer-only-at-distance",
    "subject-looks-toward-text"
  ],
  "references": [
    {
      "id": "led-wall-answer",
      "title": "pDOOH · pantalla LED 1920 × 1080 · lente muro, sólo respuesta",
      "status": "option",
      "image": "/references/surfaces/pdooh/led-wall-answer.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PdoohLed.dc.html"
    }
  ]
}

mupi-story

Opciónpapel screen · formato mupi-9x16
pDOOH · mupi digital 1080 × 1920 · lente story
pDOOH · mupi digital 1080 × 1920 · lente story

Mupi digital con la lente de story arriba, pregunta y respuesta debajo y el logo centrado abajo.

Token
efeonceGraphicLine.surfaces.pdooh.recipes['mupi-story']
Tablero del canvas
dooh · PdoohMupi
Valores del token
{
  "status": "option",
  "role": "screen",
  "formats": [
    "mupi-9x16"
  ],
  "voice": {
    "mode": "question-answer"
  },
  "lens": {
    "piece": "story"
  },
  "reserves": {
    "voice": {
      "side": "start",
      "fromTop": 0.6302083333333334
    },
    "answer": {
      "side": "start",
      "fromTop": 0.6597395833333334
    }
  },
  "type": {
    "question": {
      "px": 42
    },
    "answer": {
      "px": 160
    }
  },
  "signature": {
    "mode": "logo",
    "anchor": "bottom-center",
    "widthOfWidth": 0.35,
    "marginOfShortSide": 0.09
  },
  "photo": {
    "lever": "quien-sostiene",
    "lensMm": 50
  },
  "rules": [],
  "references": [
    {
      "id": "mupi-story",
      "title": "pDOOH · mupi digital 1080 × 1920 · lente story",
      "status": "option",
      "image": "/references/surfaces/pdooh/mupi-story.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PdoohMupi.dc.html"
    }
  ]
}

spot-10s

Opciónpapel spot · formato mupi-9x16
pDOOH · spot de 10 s sin audio
pDOOH · spot de 10 s sin audio
pDOOH · spot: el cuadro de sostén es el estático de respaldo
pDOOH · spot: el cuadro de sostén es el estático de respaldo

Spot de diez segundos sin audio: la voz se arma con el golpe de la esfera y el resto del tiempo sólo la foto se acerca.

Token
efeonceGraphicLine.surfaces.pdooh.recipes['spot-10s']
Tablero del canvas
dooh · PdoohStoryboard

Reglas de la receta

  • last-frame-static-fallbackEl último cuadro (o el sostén) es el estático de respaldo completo y la versión con movimiento reducido.
Línea de tiempo de la receta
TramoDesdeHasta
Abre la pregunta; la esfera espera al inicio del arco0 s1 s
El arco recorre la lente y entra la respuesta, sin esfera1 s1,8 s
La esfera cierra la respuesta con su golpe y su eco1,8 s2,2 s
Sostén: sólo la foto se acerca; es el estático de respaldo2,2 s10 s
Valores del token
{
  "status": "option",
  "role": "spot",
  "formats": [
    "mupi-9x16"
  ],
  "voice": {
    "mode": "question-answer"
  },
  "lens": {
    "piece": "story"
  },
  "signature": {
    "mode": "logo",
    "anchor": "bottom-center",
    "widthOfWidth": 0.35,
    "marginOfShortSide": 0.09
  },
  "timeline": {
    "durationMs": 10000,
    "loop": false,
    "audio": false,
    "segments": [
      {
        "id": "question-opens",
        "fromMs": 0,
        "toMs": 1000,
        "arcDeg": 1,
        "lensZoom": 1.25
      },
      {
        "id": "arc-runs-answer-enters",
        "fromMs": 1000,
        "toMs": 1800,
        "arcDeg": 28
      },
      {
        "id": "sphere-closes-answer",
        "fromMs": 1800,
        "toMs": 2200,
        "arcDeg": 50,
        "pulse": true
      },
      {
        "id": "hold",
        "fromMs": 2200,
        "toMs": 10000,
        "lensZoom": [
          1.25,
          1.42
        ],
        "staticFallback": true
      }
    ]
  },
  "rules": [
    "last-frame-static-fallback"
  ],
  "references": [
    {
      "id": "spot-10s",
      "title": "pDOOH · spot de 10 s sin audio",
      "status": "option",
      "image": "/references/surfaces/pdooh/spot-10s.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PdoohStoryboard.dc.html"
    },
    {
      "id": "spot-10s-backup",
      "title": "pDOOH · spot: el cuadro de sostén es el estático de respaldo",
      "status": "option",
      "image": "/references/surfaces/pdooh/spot-10s-backup.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PdoohStoryboard.dc.html"
    }
  ]
}

dynamic-variants

Opciónpapel variants · formato led-16x9 · mupi-9x16
pDOOH · variantes dinámicas (cada una es un estático completo)
pDOOH · variantes dinámicas (cada una es un estático completo)

Variantes por franja horaria: cada una es un estático completo y siempre hay una de respaldo.

Token
efeonceGraphicLine.surfaces.pdooh.recipes['dynamic-variants']
Tablero del canvas
dooh · PdoohDinamicas

Reglas de la receta

  • variant-is-complete-staticCada variante dinámica es un estático completo.
Valores del token
{
  "status": "option",
  "role": "variants",
  "voice": {
    "mode": "question-answer"
  },
  "variants": {
    "form": "complete-static-per-slot",
    "slots": 3,
    "fallbackSlot": "any-hour"
  },
  "rules": [
    "variant-is-complete-static"
  ],
  "references": [
    {
      "id": "dynamic-variants",
      "title": "pDOOH · variantes dinámicas (cada una es un estático completo)",
      "status": "option",
      "image": "/references/surfaces/pdooh/dynamic-variants.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PdoohDinamicas.dc.html"
    }
  ]
}

Firma

Cómo firma

La regla general es el logo de Efeonce centrado. Cada superficie la adapta a cómo se lee.

Rechazado

Lo que el operador rechazó

Lo rechazado no es receta: no tiene id ni imagen de referencia. Queda escrito para no repetirlo.

Pendientes y hallazgos a revisar

Para agentes

Intent de ejemplo

Pasa por el contrato real al construir esta página: si trae un error, el Lab no se publica. Cópialo, cambia el texto y resuélvelo.

docs/examples/surfaces/dooh-caminero-lens-intent.json

{
  "contract": "efeonce.surface-composition",
  "version": "0.1.1",
  "surface": "dooh",
  "format": "caminero-3x1",
  "role": "billboard",
  "recipe": "caminero-lens",
  "line": "growth",
  "theme": "dark",
  "voice": {
    "question": "¿Lo medimos?",
    "answer": [
      "Siempre"
    ]
  },
  "photo": {
    "register": "documental",
    "subject": "person",
    "plateRef": "ai-generations/2026-09-26_ooh-caminero-lente/plates/C2-caminero-medicion-compacta.png",
    "alt": "Un analista en una cervecería señala la curva que sube en su portátil; la lente la muestra a color"
  }
}

Resolverlo

pnpm surface:resolve -- --input docs/examples/surfaces/dooh-caminero-lens-intent.json --out /tmp/surface-manifest.json
Manifest resuelto (axis.surface-composition.v1)
{
  "schema": "axis.surface-composition.v1",
  "contract": {
    "id": "efeonce.surface-composition",
    "version": "0.1.2",
    "lifecycle": "candidate"
  },
  "status": "resolved",
  "surface": "dooh",
  "format": "caminero-3x1",
  "role": "billboard",
  "recipe": {
    "id": "caminero-lens",
    "status": "approved",
    "role": "billboard"
  },
  "use": null,
  "layout": null,
  "line": "growth",
  "theme": "dark",
  "palette": {
    "background": "#001a33",
    "accent": "#36c8bf",
    "ink": "#ffffff",
    "soft": "#e2e2e2"
  },
  "canvas": {
    "width": 3000,
    "height": 1000,
    "unit": "px",
    "format": "caminero-3x1",
    "real": {
      "width": 12,
      "height": 4,
      "unit": "m"
    },
    "pxPerMeter": 250,
    "readingDistanceM": [
      30,
      150
    ],
    "viewingTimeS": 3
  },
  "safeArea": {
    "marginOfShortSide": 0.09,
    "marginPx": 90
  },
  "reserves": [
    {
      "band": "voice",
      "side": "start",
      "share": 0.4877,
      "fromTop": 0.2
    },
    {
      "band": "answer",
      "side": "start",
      "fromTop": 0.348
    },
    {
      "band": "lens",
      "region": "center-end",
      "circle": {
        "cxOfWidth": 0.7,
        "cyOfHeight": 0.5,
        "rOfHeight": 0.4
      },
      "source": "surfaces.recipe.lens",
      "side": "end",
      "share": 0.5123
    }
  ],
  "type": {
    "question": {
      "family": "Poppins",
      "weight": 300,
      "px": 110,
      "m": 0.44,
      "lineHeight": null,
      "tracking": null,
      "uppercase": false,
      "color": "#ffffff"
    },
    "answer": {
      "family": "Bricolage Grotesque",
      "weight": 760,
      "px": 330,
      "m": 1.32,
      "lineHeight": null,
      "tracking": "-0.035em",
      "uppercase": false,
      "color": "#ffffff"
    }
  },
  "dominance": {
    "ratio": 3,
    "min": 3,
    "ok": true
  },
  "steps": null,
  "signature": {
    "mode": "logo",
    "anchor": "bottom-start",
    "widthM": 2,
    "widthRangeM": [
      0.8,
      3
    ],
    "marginOfShortSide": 0.09,
    "widthPx": 500,
    "marginPx": 90,
    "assetId": "efeonce-logo-negative",
    "alt": "Efeonce",
    "minContrast": 4.5,
    "orbitDelegate": "surface-owned"
  },
  "timeline": null,
  "rules": [
    {
      "id": "efeonce-dark-ground",
      "text": "El fondo Efeonce (#001a33) se mantiene en toda pieza de línea; la línea sólo aporta el acento (operador, 2026-09-26)."
    },
    {
      "id": "one-sphere-per-piece",
      "text": "Una esfera por pieza: cierra la respuesta; nunca es viñeta ni adorno."
    },
    {
      "id": "one-orbit-per-piece",
      "text": "Una órbita por pieza o lámina: anillo, lente, indicador o medida, uno solo."
    },
    {
      "id": "accent-text-min-size",
      "text": "El acento nunca colorea texto de menos de 24 px: ahí el texto va en blanco o suave sobre oscuro (navy sobre claro); el acento marca con un elemento de 24 px o más o con el ícono."
    },
    {
      "id": "timings-from-tokens",
      "text": "Los tiempos salen de efeonceGraphicLine (surfaces.*.timeline y motion); nunca se escriben en el script."
    },
    {
      "id": "answer-dominates-3x",
      "text": "La respuesta mide al menos 3 veces la pregunta (type.answer.minRatioOverQuestion)."
    },
    {
      "id": "figures-with-source",
      "text": "Cifras sólo con fuente; precios siempre como marcador."
    },
    {
      "id": "isotype-composed",
      "text": "El isotipo en prendas generadas se compone desde @efeoncepro/axis-brand-assets; nunca el que dibuja el modelo."
    },
    {
      "id": "cine-only-nexa-or-proposal",
      "text": "Registro cine sólo con Nexa protagonista o en las recetas de cine del deck (photo.cine.recipes: proposal-cinematic y, desde el 2026-09-27, la portada de brochure, las contraportadas con foto, la sección de cine, la lente de la propuesta sobria desde el 2026-09-28 y, como excepción aprobada con personas del equipo en luz dramática, la sección partida); proporciones reales (cámara a ~2 m, 85 mm)."
    },
    {
      "id": "no-close-gaze-pairs",
      "text": "Nunca dos personas mirándose de cerca: se lee romántico (rechazo del operador, 2026-09-27)."
    },
    {
      "id": "semantic-reserves-only",
      "text": "Sin coordenadas libres: regiones semánticas y fracciones que salen de tokens."
    },
    {
      "id": "margin-9pct-short-side",
      "text": "Margen = 9 % del lado corto."
    },
    {
      "id": "legibility-by-distance",
      "text": "Se prueba a la distancia real con el tamaño angular (paleta a 5 y 15 m; caminero a 80 y 150 m)."
    },
    {
      "id": "logo-end-of-reading-path",
      "text": "Carretera: el logo va abajo a la izquierda, al final del recorrido de lectura."
    }
  ],
  "references": [
    {
      "id": "caminero-lens",
      "title": "Caminero 12 × 4 m · lente AXIS · logo abajo a la izquierda",
      "status": "approved",
      "image": "/references/surfaces/dooh/caminero-lens.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "Main.dc.html"
    },
    {
      "id": "distance-test",
      "title": "Prueba a distancia (instrumento de revisión: ver a 60 cm, zoom 100 %)",
      "status": "option",
      "image": "/references/surfaces/dooh/distance-test.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PruebaDistancia.dc.html"
    }
  ],
  "delegates": {
    "orbit": [
      {
        "scene": "main",
        "contract": "efeonce.graphic-line-orbit",
        "intent": {
          "canvas": {
            "width": 3000,
            "height": 1000,
            "line": "growth",
            "surface": "dark",
            "channel": "print"
          },
          "elements": [
            {
              "kind": "voice",
              "id": "voice",
              "questionId": "question",
              "answerId": "answer",
              "answerText": "Siempre"
            },
            {
              "kind": "lens",
              "id": "lens",
              "photoId": "ai-generations/2026-09-26_ooh-caminero-lente/plates/C2-caminero-medicion-compacta.png",
              "alt": "Un analista en una cervecería señala la curva que sube en su portátil; la lente la muestra a color",
              "region": "center-end",
              "accentSphere": "upper-start"
            }
          ]
        }
      }
    ],
    "close": null,
    "selection": [],
    "icons": [],
    "photo": {
      "format": "3:1",
      "lever": "luz-motivada",
      "lensMm": 85,
      "lookAtLens": false,
      "register": "documental",
      "subject": "person",
      "plateRef": "ai-generations/2026-09-26_ooh-caminero-lente/plates/C2-caminero-medicion-compacta.png",
      "alt": "Un analista en una cervecería señala la curva que sube en su portátil; la lente la muestra a color",
      "native": null,
      "focus": null,
      "emblem": "compose-from-axis-brand-assets"
    }
  },
  "content": {
    "eyebrow": null,
    "question": "¿Lo medimos?",
    "answer": [
      "Siempre"
    ],
    "answerSphere": "closes-last-line",
    "body": null,
    "proof": null,
    "measure": null,
    "progress": null,
    "cta": null,
    "variants": null,
    "levels": null,
    "note": null,
    "panels": null,
    "figures": null,
    "nav": null,
    "title": null,
    "frames": null,
    "chapter": null,
    "shots": null,
    "subtitles": null,
    "lines": null,
    "slogan": null
  },
  "adapterChecks": [
    "text-inside-its-reserve",
    "text-never-crosses-ring",
    "answer-dominates-3x-painted",
    "accent-text-min-size",
    "signature-where-the-surface-says",
    "subject-outside-text-reserve",
    "last-frame-is-static-fallback",
    "legibility-at-reading-distance"
  ],
  "issues": []
}

docs/examples/surfaces/pdooh-spot-10s-intent.json

{
  "contract": "efeonce.surface-composition",
  "version": "0.1.1",
  "surface": "pdooh",
  "format": "mupi-9x16",
  "role": "spot",
  "recipe": "spot-10s",
  "line": "growth",
  "theme": "dark",
  "voice": {
    "question": "¿Cómo va?",
    "answer": [
      "En vivo"
    ]
  },
  "timeline": {
    "durationMs": 10000
  },
  "photo": {
    "register": "documental",
    "subject": "person",
    "plateRef": "ai-generations/2026-09-26_ooh-caminero-lente/plates/D1-mupi-rodaje-en-vivo.png",
    "alt": "Un operador de cámara mira el monitor mientras graba en vivo a una ceramista; la lente muestra la toma a color"
  }
}

Resolverlo

pnpm surface:resolve -- --input docs/examples/surfaces/pdooh-spot-10s-intent.json --out /tmp/surface-manifest.json
Manifest resuelto (axis.surface-composition.v1)
{
  "schema": "axis.surface-composition.v1",
  "contract": {
    "id": "efeonce.surface-composition",
    "version": "0.1.2",
    "lifecycle": "candidate"
  },
  "status": "resolved",
  "surface": "pdooh",
  "format": "mupi-9x16",
  "role": "spot",
  "recipe": {
    "id": "spot-10s",
    "status": "option",
    "role": "spot"
  },
  "use": null,
  "layout": null,
  "line": "growth",
  "theme": "dark",
  "palette": {
    "background": "#001a33",
    "accent": "#36c8bf",
    "ink": "#ffffff",
    "soft": "#e2e2e2"
  },
  "canvas": {
    "width": 1080,
    "height": 1920,
    "unit": "px",
    "format": "mupi-9x16"
  },
  "safeArea": {
    "marginOfShortSide": 0.09,
    "marginPx": 97.2
  },
  "reserves": [
    {
      "band": "lens",
      "region": "center",
      "circle": {
        "cxOfWidth": 0.3889,
        "cyOfHeight": 0.3958,
        "rOfHeight": 0.1867
      },
      "source": "pieces.lens.story"
    }
  ],
  "type": {},
  "dominance": null,
  "steps": null,
  "signature": {
    "mode": "logo",
    "anchor": "bottom-center",
    "widthOfWidth": 0.35,
    "marginOfShortSide": 0.09,
    "widthPx": 378,
    "marginPx": 97.2,
    "assetId": "efeonce-logo-negative",
    "alt": "Efeonce",
    "minContrast": 4.5,
    "orbitDelegate": "included"
  },
  "timeline": {
    "durationMs": 10000,
    "loop": false,
    "audio": false,
    "segments": [
      {
        "id": "question-opens",
        "fromMs": 0,
        "toMs": 1000,
        "arcDeg": 1,
        "lensZoom": 1.25
      },
      {
        "id": "arc-runs-answer-enters",
        "fromMs": 1000,
        "toMs": 1800,
        "arcDeg": 28
      },
      {
        "id": "sphere-closes-answer",
        "fromMs": 1800,
        "toMs": 2200,
        "arcDeg": 50,
        "pulse": true
      },
      {
        "id": "hold",
        "fromMs": 2200,
        "toMs": 10000,
        "lensZoom": [
          1.25,
          1.42
        ],
        "staticFallback": true
      }
    ],
    "close": null,
    "staticFallback": "hold",
    "reducedMotion": "static-fallback"
  },
  "rules": [
    {
      "id": "efeonce-dark-ground",
      "text": "El fondo Efeonce (#001a33) se mantiene en toda pieza de línea; la línea sólo aporta el acento (operador, 2026-09-26)."
    },
    {
      "id": "one-sphere-per-piece",
      "text": "Una esfera por pieza: cierra la respuesta; nunca es viñeta ni adorno."
    },
    {
      "id": "one-orbit-per-piece",
      "text": "Una órbita por pieza o lámina: anillo, lente, indicador o medida, uno solo."
    },
    {
      "id": "accent-text-min-size",
      "text": "El acento nunca colorea texto de menos de 24 px: ahí el texto va en blanco o suave sobre oscuro (navy sobre claro); el acento marca con un elemento de 24 px o más o con el ícono."
    },
    {
      "id": "timings-from-tokens",
      "text": "Los tiempos salen de efeonceGraphicLine (surfaces.*.timeline y motion); nunca se escriben en el script."
    },
    {
      "id": "answer-dominates-3x",
      "text": "La respuesta mide al menos 3 veces la pregunta (type.answer.minRatioOverQuestion)."
    },
    {
      "id": "figures-with-source",
      "text": "Cifras sólo con fuente; precios siempre como marcador."
    },
    {
      "id": "isotype-composed",
      "text": "El isotipo en prendas generadas se compone desde @efeoncepro/axis-brand-assets; nunca el que dibuja el modelo."
    },
    {
      "id": "cine-only-nexa-or-proposal",
      "text": "Registro cine sólo con Nexa protagonista o en las recetas de cine del deck (photo.cine.recipes: proposal-cinematic y, desde el 2026-09-27, la portada de brochure, las contraportadas con foto, la sección de cine, la lente de la propuesta sobria desde el 2026-09-28 y, como excepción aprobada con personas del equipo en luz dramática, la sección partida); proporciones reales (cámara a ~2 m, 85 mm)."
    },
    {
      "id": "no-close-gaze-pairs",
      "text": "Nunca dos personas mirándose de cerca: se lee romántico (rechazo del operador, 2026-09-27)."
    },
    {
      "id": "semantic-reserves-only",
      "text": "Sin coordenadas libres: regiones semánticas y fracciones que salen de tokens."
    },
    {
      "id": "voice-within-2s",
      "text": "En pantallas de paso la voz se arma en 2 s como máximo."
    },
    {
      "id": "no-audio-outdoor",
      "text": "En vía pública, sin audio. Con sonido, sólo el golpe sintetizado."
    },
    {
      "id": "margin-9pct-short-side",
      "text": "Margen = 9 % del lado corto."
    },
    {
      "id": "last-frame-static-fallback",
      "text": "El último cuadro (o el sostén) es el estático de respaldo completo y la versión con movimiento reducido."
    }
  ],
  "references": [
    {
      "id": "spot-10s",
      "title": "pDOOH · spot de 10 s sin audio",
      "status": "option",
      "image": "/references/surfaces/pdooh/spot-10s.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PdoohStoryboard.dc.html"
    },
    {
      "id": "spot-10s-backup",
      "title": "pDOOH · spot: el cuadro de sostén es el estático de respaldo",
      "status": "option",
      "image": "/references/surfaces/pdooh/spot-10s-backup.jpg",
      "canvasPage": "dooh",
      "canvasBoard": "PdoohStoryboard.dc.html"
    }
  ],
  "delegates": {
    "orbit": [
      {
        "scene": "main",
        "contract": "efeonce.graphic-line-orbit",
        "intent": {
          "canvas": {
            "width": 1080,
            "height": 1920,
            "line": "growth",
            "surface": "dark",
            "channel": "screen"
          },
          "elements": [
            {
              "kind": "voice",
              "id": "voice",
              "questionId": "question",
              "answerId": "answer",
              "answerText": "En vivo"
            },
            {
              "kind": "lens",
              "id": "lens",
              "photoId": "ai-generations/2026-09-26_ooh-caminero-lente/plates/D1-mupi-rodaje-en-vivo.png",
              "alt": "Un operador de cámara mira el monitor mientras graba en vivo a una ceramista; la lente muestra la toma a color",
              "region": "center"
            },
            {
              "kind": "signature",
              "id": "signature",
              "medium": "web"
            }
          ]
        }
      }
    ],
    "close": null,
    "selection": [],
    "icons": [],
    "photo": {
      "register": "documental",
      "subject": "person",
      "plateRef": "ai-generations/2026-09-26_ooh-caminero-lente/plates/D1-mupi-rodaje-en-vivo.png",
      "alt": "Un operador de cámara mira el monitor mientras graba en vivo a una ceramista; la lente muestra la toma a color",
      "native": null,
      "focus": null,
      "emblem": "compose-from-axis-brand-assets"
    }
  },
  "content": {
    "eyebrow": null,
    "question": "¿Cómo va?",
    "answer": [
      "En vivo"
    ],
    "answerSphere": "closes-last-line",
    "body": null,
    "proof": null,
    "measure": null,
    "progress": null,
    "cta": null,
    "variants": null,
    "levels": null,
    "note": null,
    "panels": null,
    "figures": null,
    "nav": null,
    "title": null,
    "frames": null,
    "chapter": null,
    "shots": null,
    "subtitles": null,
    "lines": null,
    "slogan": null
  },
  "adapterChecks": [
    "text-inside-its-reserve",
    "text-never-crosses-ring",
    "answer-dominates-3x-painted",
    "accent-text-min-size",
    "signature-where-the-surface-says",
    "subject-outside-text-reserve",
    "last-frame-is-static-fallback",
    "legibility-at-reading-distance"
  ],
  "issues": []
}

Todas las superficies en datos: /references/surfaces.json.

Qué no hacer

Lo que no se hace

Además de las reglas de todas las superficies, en el índice.