# Output Format The audit produces one of two outputs: - **HTML mode (default)** — a self-contained `.html` file written to the audited project's `motion-audits/` directory and opened in the user's default browser. Each Critical or Important finding gets a live, looping CSS demo card beside it. - **Terminal mode (flag-triggered)** — a decorated-markdown report rendered inline in the conversation. Use when the user passes `--terminal`, `--inline`, `--no-html`, "show the full report inline," or any natural-language equivalent. No HTML file is written. Both modes carry the same audit content; only the rendering differs. Do not summarize — users want full per-lens perspectives. --- ## HTML mode ### Canonical references | File | Role | |---|---| | `references/report-template.html` | **Source of truth.** Full worked example (fictional "Tally" habit tracker, React + Framer Motion). Every section, every token, every pattern. When in doubt about layout, structure, or styling, READ this file. | | `references/demo-shell.html` | Minimal isolated example of a single demo card with the per-finding slot pattern. Used as a per-finding template snippet. | The agent builds the report by reading these two files and adapting them to the audited project — same architecture, audit-specific content. ### File structure Single self-contained `.html`. All CSS inlined. No external JS. Fonts loaded via Google Fonts CDN (Familjen Grotesk / Public Sans / Geist Mono) with full system-stack fallbacks so the file degrades gracefully offline. ``` {project-name} motion audit — {ISO date} ``` ### Design system Neutral-default, dual-mode, severity-driven. - **Neutrals.** Cool slate-graphite at hue 255, very low chroma (0.003–0.010). `--ink` is the page background; `--paper` is the foreground text. In light mode the two swap values via the `:root:has(#theme-light:checked)` override — every other token derives from these two and flips automatically. - **Severity (FIXED, never adaptive).** Red `oklch(0.655 0.185 25)` (critical) · Amber `oklch(0.805 0.125 78)` (important) · Green `oklch(0.745 0.135 152)` (opportunity). Light-mode counterparts deepen L for contrast on white; hues stay constant. - **Timing-budget ramp (FIXED).** Same hues as severity; used in section 02 only. Instant + responsive = green, deliberate = amber, sluggish = red. - **Accent (NEUTRAL by default).** `--accent`, `--accent-soft`, `--accent-tint` alias to `--paper`, `--paper-dim`, and a low-alpha paper tint. The report has no chromatic primary color — severity is the only color in the document. An individual audit MAY repoint these three to a sampled brand color, but ONLY if the brand has at least ~40° hue clearance from each of the severity hues and is verified not to fall in the AI-cliché zone (neon cyan, purple-to-blue gradients). - **Fonts.** Display = Familjen Grotesk, body = Public Sans, mono = Geist Mono. The mono carries timing values (`240ms · ease-out`) and all small labels — never substitute a more generic mono for the timing values. ### Dual theme Pure-CSS toggle. Two radios (`#theme-dark` default-checked, `#theme-light`) live inside `.theme-switch` at the top of `.wrap`. `:root:has(#theme-light:checked)` overrides every theme-dependent token. No JS. Selector compatibility: `:has()` is Baseline 2023, supported by all modern browsers. The global toggle's visual control is a segmented `Dark / Light` pill, top-right of the page, styled to match the per-demo stage segmented control. ### The report's motion posture **The report itself has no entrance, scroll, or mount animation.** No staggered reveals. No fade-in-on-scroll. No motion on mount outside the demo cards. The demo cards are the only animated elements in the document — anything else would reproduce the AI-slop patterns this skill audits against. The one allowed transition: `border-color 0.2s ease` on lens-table rows and finding-rows for hover feedback. That's it. ### Sections (in render order) #### Global theme switch First element inside `.wrap`, right-aligned segmented `Dark / Light` pill. #### Header ``` .eyebrow ("MOTION AUDIT · DESIGN-MOTION-PRINCIPLES") h1.title ({project name} — {one-line audit framing}) p.lede ({1–2 sentence project description}) .meta-row (what it is · stack) .stats (Findings · Critical · Important · Opportunities — each is an anchor link to its rec table) ``` Each severity count pairs the number with a text label so the signal is readable under red-green color vision deficiency. Each count is an anchor link (`#rec-crit`, `#rec-imp`, `#rec-opp`) to the corresponding recommendation table. #### Overall Assessment One short paragraph in larger display type. Does this feel polished? Too much? Too little? What's working, what's not? Wraps in `
` with a `mono-label` "OVERALL" eyebrow. #### 01 · Lens summary 3-row table, one row per practitioner. Columns: Lens (with name and weight chip) · Verdict (`Strong` / `Concern` / `Problem` / `Mixed` with a colored dot) · One-line read. Weight chips indicate `Primary` / `Secondary` / `Selective` per audit context. #### 02 · Where the timings land — duration-budget diagram Motion-native analog of thumb-first's thumb-zone diagram. A horizontal SVG (`viewBox="0 0 660 300"`) plots Tally's animations as numbered dots on a 0–600ms scale with four zone bands: | Zone | Range | Color | |---|---|---| | Instant | 0–100ms | green (`--t-good`) | | Responsive | 100–300ms | green (`--t-good`) | | Deliberate | 300–500ms | amber (`--t-mid`) | | Sluggish | 500ms+ | red (`--t-slow`) | Animations with NO transition are plotted as hollow dashed circles at `x=40` (= 0ms). The paired key list to the right carries the action names and durations. A "What's off" block below explains the misalignments. The SVG uses CSS-class-driven fills (via an inline `