| 1 | # Oh My PPT Layout — Structural Self-check |
| 2 | |
| 3 | Run this list against the page before delivering. Items come from the project hard rules and the failure signs across SKILL.md and `catalog.md` — they are structural, not aesthetic. Visual taste is the current style's job; this list only guards structure, budget, and readability. |
| 4 | |
| 5 | Levels: |
| 6 | |
| 7 | - **P0 — not deliverable.** The page is broken; fix before it ships. |
| 8 | - **P1 — should fix.** The page works but a structural weakness will likely cause overflow or weak hierarchy. |
| 9 | - **P2 — consider optimizing.** The page is fine; these improve clarity and rhythm. |
| 10 | |
| 11 | ## P0 — not deliverable |
| 12 | |
| 13 | - Standard mode emits `data-img-slot` / `data-image-slot` / `script[data-img-intent]`, an image job, or an empty image placeholder. Standard mode does not generate images. |
| 14 | - A text-bearing element (title, body, card) uses `absolute` or `fixed` positioning. Body content must live in grid/flex flow. |
| 15 | - Body copy, ordinary labels, or card descriptions are below 18px (`text-lg` is the floor), any heading is below 24px (`text-2xl` is the floor), or auxiliary text is below 12px. These are minimums, not fixed sizes. Annotations, footers, page numbers, source/citation lines, and elements explicitly marked `data-ppt-text-role="auxiliary"` may be 12–17px. |
| 16 | - On a standard or high chart page, a two-row bottom card grid sits under the main chart. Support modules are capped at 0–2 compact blocks; 3 is allowed only when they are genuinely parallel, short facts with explicit height budget. |
| 17 | - A dense chart page expanded content into more cards without regrouping; rich content must become hierarchy, annotations, compact rows, or an evidence rail, not extra equal-weight modules. |
| 18 | - Content exceeds 1600×900 — collision, overflow, or clipping. |
| 19 | |
| 20 | ## P1 — should fix |
| 21 | |
| 22 | - The page has no single memorable message. State the one sentence the audience should leave with and confirm the slide's hero element expresses it. If two facts compete to be the hero, merge them or demote one to support — a slide with two heroes has none. |
| 23 | - The combined height of title + subtitle + metrics + chart + annotations exceeds the 900px safe budget. |
| 24 | - A content/data page has a message but no load-bearing structure: the thesis is written as text, while the chart, metric, matrix, timeline, comparison zone, or conclusion band does not visibly carry it. |
| 25 | - A non-cover / non-quote / non-divider page is top-heavy: title + real modules sit in the upper half, while the middle/lower canvas is mostly background, footer, or source text. Recompose with a full-height two-zone, timeline-lanes, balanced KPI dashboard, or chart-plus-insight skeleton. |
| 26 | - A non-cover / non-quote / non-divider page is accidentally under-filled: the chart, cards, or grid were tiny and left an unplanned empty band. Enlarge the primary module or add one concise evidence / annotation zone; do not make the whole page dense just to fill space. |
| 27 | - A `flex-1` or `h-full` card is mostly empty inside. Shrink the card or let the main chart, timeline, matrix, hero number, evidence group, or conclusion band own the remaining space. |
| 28 | - The main chart is only 220–280px tall and no other module is clearly the hero. Increase the chart role, or make a different structure carry the thesis. |
| 29 | - A grid declares more columns or rows than it fills — an empty track wastes the canvas (e.g. `grid-cols-[1fr_280px]` with only the left column populated). Fill every declared track, or remove the empty track and widen the others. |
| 30 | - A table, list, or card row is much shorter than its zone and leaves a large accidental empty band below. Increase visual scale or spacing modestly, but keep presentation-like breathing room. |
| 31 | - Consecutive pages reuse the same card grid, chip row, or table pattern. Vary the pattern across the deck. (Deck-generation only — when editing a single page you do not control its neighbors, so this check does not apply.) |
| 32 | - Nesting goes deeper than 4 levels purely for visual wrapping. Flatten wrapper chains. |
| 33 | - A 4-column card row carries long paragraphs. 4 columns are only for truly parallel short values. |
| 34 | - A chart container's padding is so large that the actual chart area is too small. |
| 35 | - An axis-heavy chart has no tick/label reserve, so axis labels press into nearby cards or the plot becomes cramped. |
| 36 | - A mixed-language long title (English + numbers + Chinese) is set vertically or compressed. Such titles must be horizontal. |
| 37 | |
| 38 | ## P2 — consider optimizing |
| 39 | |
| 40 | - A short-content page has no visual argument — just a few small cards centered. Add one visual anchor, one concise evidence rail, or a clearer expanded argument. |
| 41 | - All support modules are equal-weight cards with no primary. Establish hierarchy — one dominant module, the rest visibly supporting. |
| 42 | - Decorative lines, connectors, or SVG sit on top of the body reading path. Keep decoration behind or beside the text. |
| 43 | - An existing image asset has no `object-fit` or ratio constraint. Add one to prevent distortion. |
| 44 |