Prem Legends 26/27
League overview
Rules, managers, and standings in one place.
Brand book 3.2 · Product devices
How Gaffer looks, sounds, and moves. This book covers the identity, product UI, Season 26/27 kits, and match-day graphics. The identity gives us character. Clear hierarchy and useful controls make it work. Change a rule here first, then implement that decision in the product.
Gaffer lets managers build fantasy leagues around their own sport, rules, and prize structure. The league belongs to the group; Gaffer provides the competition and settlement rails.
One sentence, used everywhere: "Run the league your way. Set the rules, set the prize, and let the contract settle it."
A gaffer is the manager: picks the team, takes the blame, lifts the cup. The brand lives in the manager's world, the touchline, the team sheet, the flat cap. The cap is the signature; the expanded uppercase wordmark gives it authority at product scale.
The mark is the violet flat cap, refined July 2026 (v3.0). The lockup pairs it with an expanded Archivo 900 wordmark and a flat violet full stop. In product, components/brand/Logo.js renders both <Wordmark /> and <Monogram /> so color and scale stay consistent.
The full lockup, the monogram (avatar, favicon, tight slots), and the lockup on light mode, where only the text flips to near-black. The cap stays violet on every background.
Logo.js already does this, don't rebuild it by hand.Logo.js sets it in Archivo 900, expanded to 125%; prose uses normal-title-case Gaffer.cap-480.png (UI), icon-*.png (PWA), og-default.png (social). The April silhouette-tile SVGs (mark*.svg, wordmark.svg) are retired, do not use them.Gaffer has two equal presentation modes: floodlit dark and paper-light. Both carry the same violet identity and the same semantic split: gold is money, electric green is live. Violet replaced green as identity because green was borrowed FPL clothing and locked us to football; mode changes the surface, never the meaning.
#0c0618#110a1e#1c1232#8b5cf6#7c3aed in both modes for readable white labels. Light mode deepens it to #7c3aed for contrast.#f59e0b#00ff87#f87171#f5f5f7Text uses the --ink-1 through --ink-5 scale: pale ink on dark, near-black through slate on light. Use the tokens, not hardcoded text or surface colors. Light mode is a designed paper system with flatter elevation and deeper violet—not a CSS inversion.
Fixture difficulty (never grey, every fixture is color-coded) and position colors, from lib/designTokens.js. These are data colors: they never leak into chrome or CTAs.
Per-league theming overrides five variables (--league-primary, -secondary, -bg, -bg-card, -text-accent) and nothing else. Money, live, and danger never re-theme. This is the entire mechanism that makes Gaffer sport-agnostic.
Two voices: Archivo for identity and hierarchy, Inter for using the product. The character comes from the relationship between them, not from adding another font to every kind of information.
| Role | Face / weight | Size / line-height | Tracking |
|---|---|---|---|
| Campaign | Archivo 750–900 | 40–72 / 1.08 | −0.035em |
| Page title | Archivo 700 | 30–44 / 1.15 | −0.02em |
| Section heading | Archivo 700 | 24–32 / 1.2 | −0.02em |
| Card heading | Inter 600 | 16–20 / 1.3 | 0 |
| Body / input | Inter 400–500 | 16 / 24 | 0 |
| Button | Inter 600 | 14 / 18 | 0 |
| Label / helper | Inter 500 / 400 | 13 / 20 | 0 |
Archivo Black and Oswald remain supported for existing campaign assets and kit artwork. They are not additional product UI roles. New controls use the two-face system above; no new font downloads are needed.
Start with the page. Add a surface when information belongs together or the entire region is interactive. A heading, a statistic, or a group of buttons does not need its own card.
League overview
Rules, managers, and standings in one place.
Solid fill, a single quiet border, 10px corners. A static container stays still on hover. Interactive cards must contain a real link or button and expose a visible keyboard focus state.
| Element | Geometry | Depth |
|---|---|---|
| Buttons and inputs | 48px minimum height · 8px radius | Lit fill, short soft shadow, no frame |
| Cards and panels | 10px radius · 24px internal space | One border; no resting shadow |
| Status tags | 4px radius · compact padding | Quiet tint; text carries meaning |
| Dialogs and menus | 10px radius | Shadow only to separate an overlay |
| Lists and statistics | Aligned rows and consistent gaps | Rules or whitespace before cards |
The pitch and original kit illustrations retain their depth: it explains the sporting object. Generic product chrome gets no floodlights, glass blur, ambient orbs, or decorative gradient.
A press has contact. Saving has progress. A panel arrives from the edge it belongs to. Play each example to see the timing.
The button settles 1px and its shadow tucks in. Release restores it in 120ms. Try holding the button yourself.
Hold the button to feel the press.
A fixed-width button keeps its label while a small indicator turns. The result stays visible when the work finishes.
Ready to save. This is a demonstration.
Team options travel 32px and settle in 300ms. The page stays still; only the new panel moves.
Replay to open team options.
CSS animates transform and opacity. Keyboard focus appears immediately and stays visible. Reduced motion keeps every state change while removing spatial movement and spinning. Routine saves finish quietly.
In the product the same rules give five small moves: the tab underline travels to the new tab, the step line fills as a step completes, a choice ticks when it is taken, a run arrow steps forward under the pointer, and a screen's headline arrives once. Nothing loops, glows or bounces. Try the devices in Core kit.
The book and product load the same foundation CSS. One clear primary action per decision. Labels name the action; prices and consequences stay visible beside it.
48px high, 8px corners, Inter 600 at 15px. The primary is lit from above and rests on a short soft shadow, with no light frame around it. A press settles it 1px in 120ms. Secondary actions sit on a quiet hairline; tertiary and destructive actions stay quiet until needed.
Visible labels. Constant 1px borders. 16px input text. Helpers and errors share a reserved slot below the field. Validation uses text and aria-describedby; a red outline alone is incomplete.
Existing book values shown as type specimens. Align the value and its label; no individual cards. Gold identifies money, green identifies live or positive results.
Status is readable without color. No badge glow, flashing deadline, or automatic pulsing.
The product is built from the manager's own documents: the scoreline, the team sheet and the tactics board. A number sits on the page. A list is ruled rows. A link that goes somewhere makes a run. styles/brand-devices.css holds every device below; the book embeds the same bytes.
Scoreline and leader. Value over label with a hairline between, never a box per number. The dotted run of a team sheet joins a label to its money. Gold is money and green is live, nothing else.
Team sheet. Ruled rows for any list of things: leagues, tools, payouts. Rankings always use the standings device in App components, so every leaderboard looks the same.
Tabline, segmented, status and the run. Tabs are words with one underline that travels; filters sit on a soft track that is never violet. Status tags are quiet and the words carry the meaning. The run arrow, two dashes of trail and a head, marks a move to another place; disclosure keeps its chevron.
Kit wall, choice and step line. A competition is told with three of our own shirts, never a federation mark. A taken choice gets one violet border and a tick. Progress is a line that fills, not numbered circles.
These existing specimens map the product beyond the shared foundations. They are retained for the next migration pass; the 3.1 typography, surface, and motion rules above take precedence over legacy treatment shown here.
Legacy navigation specimen: sticky .nav-surface navbar, active link underlined in violet, wallet chip with tabular numerals (never coerces a null balance to $0), notification bell. Bottom: mobile nav, five tabs, active tab gets a violet pip and icon. Remove decorative scroll-progress treatments in the navigation migration.
Captain is gold, vice is silver, and triple captain shows ×3. Fixture chips combine the FDR dot, venue, and opponent code; double gameweeks stack two fixtures, while blanks and TBDs are stated directly. In the mixed matchday view, upcoming dates stay violet rounded pills while completed players switch to solid, squared points tags: green for positive, slate for zero, red for negative. Higher live totals strengthen the green ring without adding novelty labels. Chip banners use violet for wildcard, green for bench boost, and gold for triple captain. Matchday status panels sit in the document flow above the field and never cover a player.
A quiet list, not cards: metal rank colors for the podium (gold, silver, bronze), your row tinted violet with a left rule, live GW points in green, and a gold dashed payout line marking the prize cutoff. This one standings device runs every game format. Chip usage shows as small WC / BB / TC tags; live rows carry a match progress bar with the breathing green dot.
SettlementBanner is amber and provisional. WinnerBanner moves from projected to sending to arrived, then links the receipt in plain English. League cards, wallet balance, and payout progress use gold only for the money itself.
Skeleton shimmer for every loading surface (never spinners on content), the EmptyState pattern (icon tile in violet tint, honest copy, one action), and the version toast that nudges stale tabs after a deploy. In the migration, dialogs use a quiet opacity entry, drawers use positional feedback, and validation uses inline messages without shaking fields.
| Area | Components (files in components/) |
|---|---|
| Chrome | Navbar + BottomNav (layout/Navbar.js), Layout (navigation and footer; legacy decorative effects to retire), VersionUpdateBanner, NetworkBadge, UserDropdown |
| Pitch | PitchView (layered turf, mowing stripes, floodlight blooms, SVG markings), PickCard, ClubCrest / NationCrest, InjuryBadge, BudgetTracker (flashes on change, ∞ in limitless), ChipPanel + on-pitch chip banners, PlayerListDrawer, PlayerActionSheet, PlayerStatsModal, PointsBreakdownTable |
| League | LeaguePreviewCard (premium card, status badges, prize banner, 3-stat grid), Leaderboard, RankBadge medals, GwHistoryCard, LeagueFixtures (GW navigator, live rows), MatchDetailContent, OwnershipTable, InviteShareCard / Modal, StorylineBanner, PresenceBar, RulesSheet |
| Money | SmartWalletChip, AccountSetup activation card, WalletWidget, DepositQrCode, SettlementBanner, WinnerBanner + VaultPayoutProgress + PrizeBurst, ReauthPill, SwapperOnrampButton |
| Forms | Wizard + WizardNav (sticky mobile bar), StepCompetition / Template / Duration / CustomRules / Rewards / Social, Toggle, NumberInput, FormField, PostCreateCelebration |
| Feedback | Skeleton family (Box/Text/Circle/Card/Row/Grid/Pitch), Spinner, EmptyState, ErrorState / ErrorMessage, Portal modals, drawers, NotificationBell + notification rows |
| Misc | DeadlineCountdown, AnimatedNumber, avatars (gradient discs + initials), NationalFlag / CompetitionFlag, RatingBadge, SocialProofChip, onboarding (WelcomeModal, Checklist, PracticeTour) |
Every format is a league with its own win rule. The page keeps its shape: the rule sits in one line under the name, and the standings show exactly what decides the rank. These are the five families in the format builder.
Most points from the first gameweek to the last.
One gameweek. Most points that week wins.
Score at least 45 every gameweek or you are out. Most rounds survived wins.
Every player belongs to one manager. Draft the squad, then play one gameweek.
Managers play in fixed groups. Each gameweek a group's best two scores count. Prizes go by group place.
Every format uses the same standings as App components: podium ranks in metal, your row tinted with a left rule, one dashed line where the prize ends in gold or where the game ends in red. Formats change the numbers and the line, never the row. Inverted scoring uses the same pages, and its rule line says lowest wins.
For 26/27, on-pitch picks use an original dimensional shirt silhouette instead of a crest tile. Every garment uses the same controlled three-quarter angle; the pitch adds depth while Gaffer color and chrome own the surface.
All 15 selections are visible in one system: the starting XI on the field and four ordered substitutes below it. Price stays gold because it is money; selection state stays violet.
The cards are compact, rectangular, and optically aligned. Shirt, name, and fixture form one bounded object; no floating white labels, mismatched radii, or translucent green boxes.
The formation, card footprint, and information hierarchy are identical. Only the surface system changes: paper cards, mineral turf, dark violet markings, and flatter elevation.
Light mode starts with a neutral field and white team-sheet cards. Dark ink carries the names; violet identifies fixtures, selection, and actions. Softer kit shadows keep the shirts clear without muddying the surface.
The same 11-player formation holds its position after deadline. Points replace price. Players on the pitch right now get a solid green points bar, a green ring and the minute; finished players go neutral with FT. Benched points stay visible but quieter.
Layout does not jump between Pick Team and Live Points. Only the information hierarchy changes: points first, live state second, fixture context third.
Short-format contests use the same card and pitch grammar at a larger scale. This 1–2–1–1 example has five starters and no substitutes; seven- and nine-player modes use the same line-based reflow.
Density is a layout variable, not a redesign. Fewer players create more breathing room and larger shirts while the Gaffer header, field, status color, and card geometry remain unchanged.
Every club variant uses the same original three-quarter silhouette, asymmetric light model, and controlled 8-degree turn. Color combines with eight controlled pattern types: solid, contrast sleeves, stripes, pinstripes, hoops, sash, hem fade, and tonal diagonals.
The 20-team sheet uses the current 26/27 club list. Each row reduces the home identity to color and generic geometry on the same Gaffer garment. Keep these values synchronized with lib/teamColors.js.
Season 26/27 uses violet as the primary accent under cool stadium light. Gold returns to its single job: money. The Global 26 interaction patterns remain, but its champagne-and-navy treatment does not.
38 gameweeks. Weekly prizes. Rules chosen by the league manager.
/* Season 26/27 theme, paste-ready for globals.css.
Same 5-variable contract as every league theme. */
:root[data-theme='season2627'] {
--league-primary: #8b5cf6;
--league-primary-rgb: 139,92,246;
--league-primary-glow: rgba(139,92,246,0.28);
--league-secondary: #37003c;
--league-bg: #0c0618;
--league-bg-card: #110a1e;
--league-text-accent: #ffffff;
/* Hero + ambience, successor of the g26-* set */
--s27-hero-start: #a78bfa;
--s27-hero-mid: #d946ef;
--s27-hero-end: #38bdf8;
--s27-floodlight: rgba(139,92,246,0.07);
}
:root[data-mode='light'][data-theme='season2627'] {
--league-primary: #7c3aed;
--league-primary-rgb: 124,58,237;
--league-primary-glow: rgba(124,58,237,0.18);
--league-secondary: #ede9fe;
--league-bg: #f5f5f7;
--league-bg-card: #ffffff;
--league-text-accent: #171125;
--s27-floodlight: rgba(124,58,237,0.05);
}
Move the existing .g26-hero, floodlight, and win-probability styles to season-neutral classes, then point them at these tokens.
Social and marketing graphics are match-day artifacts, not SaaS marketing. Tokens alone (palette + type + glow) produce generic startup cards; what makes a graphic unmistakably Gaffer is a football-native device carrying the layout. Every card is assembled from one of the three named devices below, never improvised from scratch. Coded templates live in social-agents/templates/cards/ (rendered via scripts/render-card.mjs); the shared assets partial (_assets.html) carries these fonts, the cap mark, and the jersey vector, so template output is brandbook-faithful by construction.
announcement.html) — an official squad-list document: ruled rows, violet number tiles, dotted leaders, a letterspaced stamp header, one gold money line in the footer. For announcements and any copy-led card; the sheet gives the copy a football object to sit beside.stat.html) — the owned vector jerseys in club colorways as the hero of player and stat cards. Names and numbers are facts; the shirt does the identity work. Violet bars for magnitude, gold for the value itself.fixture.html) — oversized Archivo tabular type (3-letter codes, scores, times) with kits flanking a lowercase v. Scoreboard typography at poster scale; the numbers are the design.playgaffer.xyz right. Compliance-sensitive cards carry "free everywhere · paid where the rules allow it" verbatim.| Don't | Do |
|---|---|
| A headline over an ambient gradient with the domain in a corner. The colors may be correct, but the card has no Gaffer device. | Set the same copy against the team sheet, kit wall, or fixture block. |
| Decorative glow gradients as the primary visual interest. | Devices as the visual interest; glow only as ambient depth behind a device. |
| Inventing a new layout per post. | New message → existing device + new data. New device → it gets named, coded, and added here first. |
Reference renders: social-agents/data/cards/2627-one-league.json → the announcement card that replaced the "don't" example above.
Gaffer talks like the sharpest manager in your league's group chat: quick, specific, a bit cocky, never corporate. If a sentence works without a word, the word goes.
| Say | Never | Why |
|---|---|---|
| Entry fee, prize pool | Buy-in, stake, pot, jackpot | Skill-based contest framing is a legal requirement, not a style choice |
| Skill-based contest | Bet, gamble, wager, odds, casino, house | Hard rule, no exceptions anywhere |
| "Held by a tamper-proof contract" | "We hold your money" | The escrow is the custodian, we never are |
| Instant payout, secure escrow | On-chain, gas, signer, USDC on Starknet | Plain English in the UI; the rails stay invisible |
| Manager, gaffer | User, player (for people) | "Player" means footballers; humans are managers |
| Settled, paid out | Cashed out (for prizes) | Matches the product's settlement lifecycle |
| "Global 26", "the international tournament" | Event names that are reserved marks | Same discipline the G26 hero copy already ships |
A heading is two to five words. One supporting line at most, and only for a fact the screen does not already show. No label above a heading that repeats it. Numbers beat adjectives. If a control explains itself, its explanation goes.
Social runs on the intern voice at @Play_Gaffer: over-eager, footy-brained, never corporate. No emojis, no hashtags, no threads, receipts over opinions.
A component is ready when its real content, states, and mobile layout are resolved. A new screen must extend this system, not invent another one.
styles/brand-tokens.css, styles/brand-foundation.css and styles/brand-devices.css define the product controls and devices. This book embeds those exact bytes. The build checks parity.This book owns Gaffer’s visual decisions. The 3.1 foundation rules supersede conflicting legacy recipes. Product delivery status lives in docs/MASTER-PLAN.md. Identity, pitch geometry, and kit artwork retain their existing contracts. Future intentional changes update the book, shared implementation, and handover together.