×
A living guide for the proposal template at Proposal Creator/template/proposal.html. Three themes, one grammar, zero guesswork.
Every accent, gradient, and overlay resolves from the active theme token. Flip the switch in the nav — the entire page re-themes: hero glow, table hover, totals gradient, everything. If a color on this page stays put when you switch themes, it's a bug.
Green + deep navy. The home kit. Use for Triumph-focused proposals and internal system.
Rich blue + yellow. Liberty leads with blue; yellow is the accent, used sparingly. Use when the proposal leads with Greenville Liberty.
Triumph green + Liberty blue. Both properties, each given equal weight. Use when the deck sells Triumph and Liberty as a bundle.
Display sizes scale fluidly via clamp() — no media-query ladder. Monospace numerics carry every stat and price so columns line up without tabular hacks.
Eight components carry the full weight of every deck. Each renders live, at real scale, with real Triumph imagery and realistic copy. Change the theme and watch them all re-tint in the same gesture.
Season-long presenting rights across every home match — the most visible role in the Triumph calendar.
Own one club per match. Branded entry, dedicated servers, private field-level experiences for clients and employees.
| Partnership Pillar | Investment |
|---|---|
| Matchday Presenting Partner | $25,000 |
| Premium Hospitality Host | $35,000 |
| Share the Magic Initiative | $35,000 |
| Employee Engagement | $10,510 |
| Phase One — per year | $105,510 |
Use one full-bleed image break between component-heavy sections. It resets the eye, anchors the page in a real place, and gives the next section room to land.
Every animation in the template is short, damped, and triggered by intent — a scroll crossing a threshold, a hover, a click. No autoplay, no loops, no parallax. When in doubt, turn it down.
Section titles fade in with a 10px rise when they enter the viewport. IntersectionObserver threshold 0.12, duration 550ms.
transform: translateY(10px) · 0.55s
On downward scroll past 120px the nav slides up. On any upward scroll it returns. No scroll-jack, no debouncing theater.
translateY(-100%) · 0.3s
Pillar bullets grow from 10px to 16px on hover — a whisper of feedback, not a flex.
width: 10 → 16 · 0.2s
Hero scroll hint bobs 8px every 2.4s. Runs once the page is idle. Disappears the moment the user scrolls.
@keyframes bob · ease-in-out
Two full-bleed breaks is the maximum for a single deck. More than that and the rhythm becomes noise. Pair them with the most emotionally resonant imagery in the project folder.
Run every check below before saying a deck is done. The recursive greps must all return zero. The live URL must return 401 (login page). Anything less and it ships broken.
tools/fix_placeholders.py after every Write. Verify with grep — must return 0.\\u0 — must be 0.--branch main.Without it, wrangler ships a preview and the custom domain keeps serving stale content. The global hook blocks this; don't bypass it.This is the grammar. Every new client deck starts from the copy-and-edit template, swaps imagery and copy, runs the placeholder fixer, and deploys. The design never slips, because the design isn't negotiable — it's the system.
Back to Top ↑