# World Cup 2026
> The most ambitious art direction here, and a good stress test of how far HTML layout can be pushed.
**Sports & gaming · Bold colour · Tabbed**
The most ambitious art direction here, and a good stress test of how far HTML layout can be pushed. Seven tabs, and the styling never drops.
## What makes it work
- A pitch-green field with mowing stripes sets the scene, and the same ground carries across every tab.
- Gold player cards borrow the visual language of collectible football cards, built from HTML blocks rather than pasted images.
- The Hall of Champions plaques use layered shadows to suggest engraving.
- Study it for the layout ambition. The heavy texture is a deliberate choice for the subject, and would be wrong on a business report.
## The views
Each tab is shown below at full width.
### Tournament
### Match Center
### Groups
### Team HQ
### Players
### History
### Contender Index
## See it live
[Open the live dashboard](https://demo4.holistics.io/dashboards/v4/114898-world-cup-2026-on-the-pitch?_pl=ab39e2f131d8d0bbe7d939b4) to click through it yourself. No Holistics account needed.
## Theme code
The theme this dashboard actually uses, written out as a reusable `PageTheme`. Paste it into a
`.theme.aml` file under **Development > Library > Themes** to reuse it across your own dashboards,
or inline it as a single dashboard's `theme:` property. This theme names a chart colour palette, so the `ColorPalette` it
references is included above it. See [colour palettes](/docs/admin/dashboard-themes/color-palettes).
world_cup_2026_theme.theme.aml
```aml
ColorPalette wc_pitch_day_palette {
title: "WC Pitch — Day"
categorical {
colors: [
"#1f9d52", "#C8920A", "#1D3F8E", "#E61D25",
"#00853F", "#d99412", "#0c2418", "#2f5a42"
]
}
}
PageTheme world_cup_2026_theme {
title: "World Cup — On the Pitch (Day)"
background {
bg_size: "cover"
bg_color: "#2d7d47"
bg_image: "radial-gradient(120% 65% at 50% -10%, #cfeeff 0%, rgba(207,238,255,.18) 34%, transparent 60%)"
bg_repeat: false
}
canvas {
border {
border_style: "none"
border_width {
top: 0
left: 0
right: 0
bottom: 0
}
border_radius {
top_left: 0
top_right: 0
bottom_left: 0
bottom_right: 0
}
}
shadow: "none"
opacity: 1
background {
bg_color: "transparent"
}
}
block {
text {
font_size: 13
font_color: "#1c3a2a"
font_family: "Sora, system-ui, sans-serif"
font_weight: "normal"
}
label {
font_size: 12
font_color: "#0c2418"
font_family: "Saira Condensed, Sora, system-ui, sans-serif"
font_weight: "bold"
letter_spacing: "0.04em"
text_transform: "uppercase"
}
border {
border_style: "none"
border_width {
top: 0
left: 0
right: 0
bottom: 0
}
border_radius {
top_left: 12
top_right: 12
bottom_left: 12
bottom_right: 12
}
}
shadow: "none"
opacity: 1
padding {
top: 0
left: 0
right: 0
bottom: 0
}
background {
bg_color: "transparent"
}
}
viz {
table {
header {
bg_color: "#e7f1ea"
font_size: 12
font_color: "#0c2418"
font_weight: "bold"
}
general {
bg_color: "#f4faf6"
font_size: 12
font_color: "#11241a"
font_family: "Sora, system-ui, sans-serif"
hover_color: "rgba(12,36,24,.06)"
cell_padding {
top: 8
left: 12
right: 12
bottom: 8
}
banding_color: "rgba(12,36,24,.035)"
borders {
outer: true
header: true
vertical: false
horizontal: true
row_header: false
}
grid_color: "rgba(12,36,24,.14)"
border_color: "rgba(12,36,24,.14)"
border_width: 1
}
sub_title {
font_size: 11
font_color: "#2f5a42"
font_weight: "semibold"
}
sub_header {
bg_color: "rgba(12,36,24,.035)"
font_size: 11
font_color: "#2f5a42"
font_weight: "semibold"
}
}
}
color {
data: wc_pitch_day_palette
}
}
```
The theme is paired with custom CSS, which lives beside it rather than inside it. See
[Custom CSS](/docs/admin/dashboard-themes/custom-css) for where it goes.
Custom CSS
```css
@import url('https://fonts.googleapis.com/css2?family=Saira+Condensed:wght@500;600;700;800&family=Sora:wght@400;500;600;700&display=swap');
:root {
--grass-a:#3DA35D; --grass-b:#4FB069; --sky-ambient:#cfeeff; --turf-edge:#2d7d47;
--line:rgba(255,255,255,.88); --line-soft:rgba(255,255,255,.55);
--ink:#0c2418; --ink-2:#1c3a2a; --muted:#2f5a42;
--panel:rgba(255,255,255,.94); --panel-2:rgba(255,255,255,.86);
--panel-line:rgba(12,36,24,.14); --panel-ink:#11241a; --panel-muted:#5b7567;
--gold:#C8920A; --gold-2:#f2c84b; --live:#E61D25;
--board-bg:#07140d; --board-ink:#eafff2; --board-glow:rgba(120,255,180,.55);
--board-bezel-a:#cdd6da; --board-bezel-b:#8b979d;
--zone-q:rgba(38,166,91,.22); --zone-q-bar:#1f9d52;
--zone-p:rgba(232,168,30,.26); --zone-p-bar:#d99412;
--win:#1FA36B; --draw:#E0A23B; --loss:#E5362B;
--qual-adv:#1FA36B; --qual-po:#E0A23B; --qual-out:#E5362B;
--shadow-dir:rgba(7,30,18,.30); --flag-shadow:0 8px 18px rgba(8,28,18,.28);
--vignette:rgba(6,28,16,.30);
--font-disp:"Saira Condensed", Sora, sans-serif; --font-body:"Sora", system-ui, sans-serif;
}
.wc-num { font-variant-numeric: tabular-nums; font-feature-settings:"tnum" 1; }
.wc-disp { font-family: var(--font-disp); }
.wc-pulse { display:inline-block; width:8px; height:8px; border-radius:50%;
background: var(--live); animation: wc-pulse 1.8s infinite; vertical-align:middle; }
@keyframes wc-pulse { 0%{box-shadow:0 0 0 0 rgba(230,29,37,.5);} 70%{box-shadow:0 0 0 8px rgba(230,29,37,0);} 100%{box-shadow:0 0 0 0 rgba(230,29,37,0);} }
/* motion @keyframes live in the header_rail page