Brand Guidelines

Colours, typography, assets, and usage rules for Pixel Rugby.

Colour Palette

Primary

Brand Green
#1e6e2e
Primary Green
#288135
Pitch Green
#2d8c3c
Gold
#FFD700
Extrusion Green
#1e5f2a

Gameplay

Pitch Stripe
#268534
HUD Black
#000000
Dark Gold
#DAA520
Rugby Ball
#c0392b

UI Feedback

Success
#27ae60
Error / Delete
#cc0000
White
#ffffff
Light Panel
#f5d0b0

Typography

In-Game — Press Start 2P Download Font
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%&*
Website — System Font Stack
-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif

The quick brown fox jumps over the lazy dog.
Bold weight for headings and labels.
ContextFontNotes
Game canvas & HUDPress Start 2PAll text uppercase. Loaded from /assets/PressStart2P.ttf
Buttons & labelsPress Start 2P8 – 18 px depending on button size
Website pagesSystem font stackBody 16 px, line-height 1.5
Code/monoSFMono-Regular, Consolas, monospaceFor code snippets and hex values

Button Styles

In-game buttons follow a pixel-art aesthetic with chunky borders and a stamped block extrusion (solid dark-green #1e5f2a filled at every offset from 1 to depth) instead of a translucent drop shadow — matching the title, carousel, and card extrusions. Selected (primary) buttons also breathe with a subtle ~1.2% scale pulse to draw the eye. Extrusion depth scales up in portrait so the stamped look reads at touch sizes.

TypeSize (P / D)BorderRadiusExtrusionUse
Action button (selected)400×80 / 178×383 px gold #FFD7005 px4 px (5 px portrait) solid #1e5f2aSelected / primary action (Kick Off, Continue, Play Round X)
Action button400×80 / 178×383 px white #fff5 px4 px (5 px portrait) solid #1e5f2aUnselected action
Footer text button142×48 / 90×282 px white #fff3 px3 px (4 px portrait) solid #1e5f2aSmall secondary actions (< Back, Shuffle)
Footer icon button64×48 / 38×282 px white #fff3 px3 px (4 px portrait) solid #1e5f2aIcon-only footer / homescreen actions (info, controller, trophy, gear, hamburger, users, fast-forward, sun/rain, pools)
Destructive buttonvaries (icon + label paired)2 px white #fff3 px3 px solid #7a0000Red #cc0000 face. Warning glyph prefixed to the label via drawDeleteButton(). Delete All Data, Clear, Delete Career.

Side padding: SAFE_X + (p ? 20 : 10). Bottom margin: p ? 16 : 15. Adjacent footer icons share a p ? 14 : 10 px gap so they read as a uniform strip.

UI Icons

All glyphs are authored on a 24×24 pixel grid and rendered as Path2D fills (solid white over the button face, or solid #fff over a red face for destructive variants). Adding a new icon means adding a new _X_ICON_SVG + _drawXIcon(cx, cy, size) pair next to the others in game.js.

IconConstantUsed by
Settings (gear)_SETTINGS_ICON_SVGTitle-screen footer (gear button); WC / 6N / 4N tournament screens (in-tournament settings menu), their team-select carousels, and their mode-intro screens — opens the main Settings modal (trimmed to Difficulty / Sounds / Language)
About (i)_ABOUT_ICON_SVGTitle-screen footer (info button)
Tutorial (TV)_TUTORIAL_ICON_SVGTitle-screen footer (controller / TV button)
Trophy_HIGH_SCORES_ICON_SVGTitle-screen footer; arcade carousel "best score" pill ([trophy] <score>); team-select / mode-intro Records shortcut (replaces the old "Results" text button)
Hamburger_MENU_ICON_SVGCareer table footer — opens the Career menu modal; league select carousel and league mode-intro screens (foreshadowing the wider in-career menu)
Pools (grid)_POOLS_ICON_SVGWorld Cup bracket footer — opens the all-pools view
Warning (! frame)_WARNING_ICON_SVGPrefixed to red destructive-button labels via drawDeleteButton() — Delete All Data, Clear, Delete Career
Users (My Team)_USERS_ICON_SVGCareer table footer — opens the My Team customization modal. Also painted on every in-tournament screen (WC / 6N / 4N) left of the gear, opening the run-scoped tournament squad editor (same modal, in-memory edits that revert on exit)
Backspace (Clear)_CLEAR_ICON_SVGHigh Scores destructive Clear button (red face)
Fast-forward_FORWARD_ICON_SVGMatch-intro footer — opens the Simulate-match confirm modal
Sun_SUN_ICON_SVGMatch-intro weather toggle — clear conditions
Rain_RAIN_ICON_SVGMatch-intro weather toggle — rainy conditions
Full Guide (book)_FULL_GUIDE_ICON_SVGAbout modal — link to /guide
Derby (crossed swords)drawDerbyIcon()Match-intro Derby banner

Inside an icon button, the glyph is rendered at round(buttonH * 0.55) centered both axes.

Confirmation Modals

Destructive or irreversible actions open a centered confirm overlay before committing. All confirm modals share the same chrome so the pattern is recognizable across modes.

PropertyValue
Backdroprgba(0,0,0,0.6) full-viewport fill
PanelWhite card via drawPixelCard, radius:0, 2 px white border. Portrait VIEW_W − 60 × 180; desktop 300 × 140.
TitlePress Start 2P bold, 14 px portrait / 11 px desktop, #222
Subline10 / 8 px #666 — short clarifier (e.g. "You will lose your progress.")
ButtonsTwo side-by-side: destructive (default-state, red face for permanent wipes) on the left, primary Cancel on the right. 120×44 portrait / 90×30 desktop with a 12 / 8 px gap.
Keyboardy / Enter / Space commits; any other key cancels. Modal absorbs all clicks/keys until dismissed.

Examples: Exit Tournament (wcConfirmExit), Simulate Match? (simConfirmVisible), Clear High Scores (two-step: "Clear your <mode> history?""Are you sure? This cannot be undone." in red bold — applies to all tabs, not just World Cup).

Match-Intro Banners

The "Match of the Day," "Derby," and venue banners on the match-intro screen sit on a white face with a 3 px (2 px desktop) solid #1e5f2a diagonal extrusion — no soft outline, no drop shadow. Banner text and the gold star / sword icon are also rendered in dark green #1e5f2a so the banner reads as a clean stamped block on the pitch.

World Cup Title Bar

Every World Cup screen (pool view, all-pools, knockout bracket) renders the title bar via the drawWCHostBar(year, hostIdx) helper instead of drawBar. Composition: [host-flag] {YEAR} WORLD CUP centered, with the same stamped extrusion as a regular bar title. Flag height = round(fontSize × 1.15) portrait / −1 px on desktop so it visually matches the cap-height of the Press Start 2P glyphs; flag width preserves the standard 1.4:1 aspect. Falls back to a plain {YEAR} WORLD CUP bar when no host is set.

Career Modal Overlays

All career-mode modals (Career menu, History, Records, Rules, Sportsbook, My Team, Help, Club Info) use a uniform chrome:

Logo & Assets

App Icons

App icon
Primary Icon
apple-touch-icon.png
Download
Alt icon
Alt Icon
apple-touch-icon-alt.png
Download

Mascot — Flyhalfie

Flyhalfie mascot (SVG)
Flyhalfie (Vector)
flyhalfie.svg
Download SVG
Flyhalfie mascot (PNG)
Flyhalfie (Raster)
flyhalfie.png
Download PNG

Favicon

Favicon
Favicon
favicon.png — 32x32
Download

Visual Identity

AttributeValue
AestheticSNES / Tecmo Bowl / Retro Bowl era pixel-art sports game
Theme colour#1e6e2e (PWA title bar)
Background colour#2d8c3c (PWA splash)
Text styleAll uppercase in-game
Pitch patternAlternating stripes — #2d8c3c / #268534
Crowd & weatherAnimated pixel crowd, dynamic weather effects

Character Palette

Skin Tones

Light
#f5d0b0
Medium
#e8c89e
Tan
#c8a07a
Brown
#a0724e
Dark
#6b4226

Hair Colours

Light Blonde
#d4a830
Dark Blonde
#8b6914
Red
#a23c1e
Brown
#5c3a1e
Dark
#333333
Black
#222222
Very Dark
#111111

Hair Styles

Seven lengths are available. Normal is the default and renders a 3-row volume on top of the head. Short is a flat-top crop. Buzzcut shaves the same shape down to 20%-opacity stubble over the scalp. Long shares the same top silhouette as Normal, then layers a back cascade — sideburn extension + four taper rows down past the shoulder, ending in a single-pixel tail. Fade paints no solid base; instead it lays 80% → 80% → 70% → 40% → 20% opacity bands over skin pads on rows -1 through 3, so the hair tapers cleanly into the scalp (burst-fade / taper-fade silhouette). Scrum Cap renders a helmet-shaped silhouette — crown + forehead band + ear flap on the visible side + a thin 3-pixel chin strap pinching across the jaw onto the neck. Cap face auto-tinted in the team's home-jersey primary colour (team.colors[0]) by default; the chin strap paints in a darker version of the same colour via _darkenHex so it reads as a strap, not part of the cap. Resolution chain: per-player capColor wins, else team-level capColor, else home primary. Most teams in teams.json set team.capColor explicitly to a kit accent (e.g. France red, NZ red, Australia blue, Ireland red, Scotland purple, Wales green, Italy red). Bald swaps the hair pixels for scalp. Set per-player via team.players[i].hairStyle, or globally on My Team characters. Unnamed darker-skinned slots (tan / brown / dark) auto-default to Short (even slot indices) or Buzzcut with Very Dark #111 hair (odd slot indices) instead of Normal — except the fly-half slot (index 2), which auto-defaults to Fade so the playmaker reads as distinct in the squad row.

Sprites

All game characters and objects are hand-drawn pixel art rendered on a canvas. Sprites use integer coordinates scaled by a factor to keep crisp edges at any size.

Player Sprite

The base player is 10 pixels wide by 18 pixels tall, scaled by a factor of 1.8 in-game. Each player is composed of hair, head, jersey, shorts, an ankle-high sock band (defaults to the player's skin so legs read bare; override with socksColor for a colored sock), and boots.

PartSize (px)Colour Source
Hair6 × 3Team hair config (dark, brown, blonde, red)
Head / Face5 × 3Skin tone palette
Eye1 × 1#000
Jersey8 × 6team.colors[0] primary, team.colors[1] accent
Shorts6 × 2team.shortsColor or team.colors[1]
Legs6 × 2Skin tone palette
Boots6 × 1#222

Running Animation

Players cycle through 4 frames at 150 ms per frame (~6.6 fps). Arms and legs alternate stride positions.

Jersey Styles

Teams can have solid, striped, quartered, sash, pinstripes, halves, checkered, or collar jerseys using their primary and secondary colours.

Rugby Ball

The ball is 8 pixels wide by 5 pixels tall, scaled by 2.2. It has a white body, red side panels, dark outline, and a grey center seam.

Crowd Characters

Crowd members are 8 × 9 pixels with animated arms that wave based on match excitement. About 85% wear home team colours.

Usage Guidelines

Do
  • Use bright, cheerful greens and golds
  • Keep the retro pixel-art aesthetic consistent
  • Use Press Start 2P for all in-game text
  • Uppercase all in-game text
  • Use the SVG mascot for scalable contexts
  • Use stamped block extrusions (solid dark-green #1e5f2a, diagonal offset) on buttons, cards, and bar titles — never translucent drop shadows
Don't
  • Use dark navy or muted UI tones
  • Mix modern/flat UI with the pixel aesthetic
  • Use thin borders or translucent rgba drop shadows in-game — solid extrusions only
  • Display game text in lowercase
  • Stretch or distort the mascot or app icons
  • Use gradients on in-game buttons

Skyline Backdrops

Match establishing-shot backdrops (the SKYLINES registry in game.js). Each ships a day and a night variant; the home team picks the style (TEAM_SKYLINE), with day/night chosen per match.

Pitch-Side Ad Boards

A strip of LED-style sponsor boards runs along the top touchline, in front of the crowd. Every board is a consistent 4:1 rectangle (height = board width / 4); boards tile the view at ~120 px wide in portrait and ~88 px on desktop, so they read identically on any screen. All boards show the same sponsor at once and rotate together in a synchronized vertical hard-roll (LED-ring style). Slots alternate brand → slogan → brand → second slogan; a sponsor with no slogan just shows its wordmark/logo on every slot. A sponsor can also carry a logos array of full-bleed board images that cycle by slot, so a campaign can alternate art across the strip (one entry repeats everywhere). Career-only sponsors (Bank of Newland and Newland Air) appear solely in career/league matches; every other board shows in all modes. Text is Press Start 2P, uppercased; image logos are pixelated in-game to match the art.