# Template gallery — paper-poster-html Three neutral HTML scaffolds, forked from the posterly templates (MIT, © 2026 Ruishuo Chen — see `../NOTICE.md`) and adapted for ARIS: flat de-gradient, `--fs-*` token scale, zero inline-style utility classes, and the `data-source` / `data-color-exempt` contracts. Class names are unchanged, so `COMPONENTS.md` (the component contract catalog) applies to all three. Each template is **self-contained and neutral**: no lab branding, no paper content — only `TODO` placeholders. The authoring loop is: copy one to your working dir as `poster.html` → apply a token pack → fill `TODO`s with paper content + real figures → run the gates (`run_gates.py`) and balance until they pass. Every layout-critical element carries `data-measure-role` so the measurement gate can locate columns / hero / footer regions across templates. **Do not remove these attributes** — the measure gate depends on them. ## Picking a template | Template | Canvas | Layout | Use when | |----------|--------|--------|----------| | **landscape_4col.html** | 60 × 36 in landscape | header → optional banner → **4 columns** → optional takeaways → footer | The default. Standard ML conference poster (ICML / NeurIPS / generic landscape) with ~3–5 content cards per column; mix of figures, equations, and tables. | | **landscape_hero.html** | 60 × 36 in landscape | header → **hero panel (~60%)** + supporting column (~40%) → takeaways → footer | ONE figure / table / system diagram is the main message. One big illustration left, 3–4 short cards right. No framework banner — the hero *is* the banner. | | **portrait_2col.html** | 24 × 36 in portrait | header → **2 columns** → footer (no banner, no takeaways strip) | Portrait venues / sub-A0 sizes. Vertical space is precious, so banner + takeaways are dropped; the final card in the right column carries the conclusion/takeaways. | (File names follow DESIGN_FINAL §1: the ARIS forks drop the posterly `_neutral` suffix.) ## Scaffolds, not finished posters A template is a **scaffold**, not a poster. Figures are commented out and copy is `TODO` stubs, so each column only fills the top of the canvas. That has gate consequences you should expect — do not "fix" them on a fresh scaffold: - **`preflight` passes out of the box.** It checks structure (valid `data-measure-role` values, no LaTeX residue, no bare `<` inside `$…$` math, the root `data-measure-role="poster"`), which the scaffold already satisfies. - **`style_check` source rules (1–3, 5–11) pass on the *forked* scaffold.** The ARIS fork has no inline styles, no `linear-gradient`, no stray hex outside the token block — so the static source gate is green on the empty template. (The upstream posterly *originals* keep inline styles and would FAIL `style_check` — that is expected; the fork exists precisely to fix that.) - **`measure` and `polish` are gates for your *finished* poster.** They check that columns bottom-align to within 5 px, that the gap to the footer sits in a tight band (30–50), that intercard gaps stay in [12, 50], and that the canvas fills 95–101% — properties only a *filled* poster can have. An unfilled scaffold is **expected to fail them** (huge column-bottom spread, a large gap to the footer). That is the gate telling you the poster is not finished, not a bug in the template. - **`asset_check` fails until you embed ≥2 real paper figures.** A scaffold has none. So the loop is: copy → apply token pack → fill content + drop in real figures → run `run_gates.py` and balance until `measure`/`polish`/`asset` go green. See DESIGN_FINAL §8 for the full phase structure and the worked ICLR 2026 acceptance case (§13). ## Applying a token pack (`tokens/*.json` → `:root`) The palette lives in two synchronized places: the `tokens/*.json` packs (machine-readable, what `style_check`/`run_gates` read for the accent/gold `hue_centers`) and the `:root` DESIGN TOKENS block in each template's `