Shell style — DASHBOARD.md

Energy, Forecourt, Confident · 에너지, 포코트, 당당함

A dashboard design spec read from the public design of shell.com and shell.us, Shell's quarterly results presentations and annual report, and the place most people meet the company: the forecourt, with its price sign, canopy band and gray base band. Shell publishes its numbers on slides — a kicker, a yellow rule, red chart titles, compare boxes, earnings bridges with gray totals — and on the forecourt it shows them on a white sign with a yellow head and a dark price zone. This spec turns those into dashboard parts — the price sign as a pillar of key figures, the results deck's compare boxes and key price markers, its earnings bridge, ruled exception lists, and a schematic corridor map with the sites as small price-sign pins — and adds what a website spec leaves out and a dashboard needs: validated data colors, card anatomy, chart rules, number and date formats in English and Korean, density, filters, accessibility, and settings for Tableau, Power BI and the web. Add it to a project with one command (or the zip on the sample page), or hand it to whoever builds your dashboards. The live sample was built from it.

npx @vizney/styles@latest add shell
# or, without Node:
curl -fsSL https://styles.vizney.com/install.sh | sh -s -- shell

That puts DASHBOARD.md in the project root and the dashboard-style agent skill (build, restyle, review) in .claude/skills/dashboard-style/, together with tokens.css, tokens.json, shell.tps, powerbi-theme.json and prompt.md. Coding agents that read skills pick it up whenever a task touches a dashboard or a chart; any other agent can be told to follow DASHBOARD.md.

Not an official Shell design, and not affiliated with or endorsed by Shell. A reference style read from the publicly visible design of shell.com and shell.us and its public touchpoints such as forecourts and reports; it carries no logo, typeface, photo or data of theirs. The sample's company, Vizney Energy, and all its numbers are fictional. Trademarks belong to their owners.

Visual Theme & Atmosphere

A forecourt that reports like a results slide. The page is white and flat. The header is a white canopy band — Vizney Energy | in red with the period in ink, the way Shell's slides end in Shell plc | — over a 6px red bar across the page, the canopy's red band; under it the corridor menu, set like shell.com's navigation with a 4px yellow underline on the selected item. Every section opens like a slide: a small kicker with the section number in red, the heading in ink, a 2px Shell-yellow rule across the width.

Three devices carry the report, and each is built to be read before it is admired. The price sign is the key figure: a white cabinet with a yellow head that holds the one big number (the main grade against the street), a 5px red bar, a dark price zone with one row per grade and the posted price to a tenth of a cent, and a gray base band with the site count and the posting time. The key price markers of the results deck become Figure 1: three small multiples with red chart titles, the subject line in red, the comparison in gray, the current week shaded, and compare boxes under each plot. The earnings bridge is Figure 2: plan to actual in lever steps, gray totals cut at a break, green increases, red decreases, negatives in parentheses. Around them sit ruled exception lists (sites, tanks, charge points), busy hours as bars, a schematic corridor operations map whose sites are small price-sign pins, and a results table from the annual report, collapsed to corridor totals.

Confident and plain: no shadows, no rounded cards, no gradients, no photos. Yellow and red belong to the frame — the rules, the sign's head, the canopy bar, the chart titles — and the data speaks in one red for the subject and gray for the rest, as Shell's own charts do. Every number answers a question someone acts on: price against the street, margin and volume against plan, which sites missed it and why, when to staff, which tank to fill, which charger to fix.

Measured in a browser on November 4, 2026 (shell.com and shell.us signed out, shell.co.kr for the Korean face; the third quarter 2026 results presentation of October 29, 2026; Annual Report 2025; the retail visual identity drawings): shell.com's body is white, headings #404040, secondary text #595959; primary buttons are 48px high with an 8px radius and 14px bold text, yellow #ffc800 with dark text or dark #4a4a4a with yellow text; navigation items are 14px with a 4px yellow underline under the current item; tooltips and inputs have a 4px radius; there are no card shadows. The results slides put a kicker above each title and a 2pt yellow rule under it, set chart titles in bold red with the unit, put key figures in compare boxes #f7f7f7 with a yellow bottom rule (Q3 2026 vs Q2 2026), shade the current period #f2f2f2, draw earnings bridges with gray totals, green increases, red decreases and negatives in parentheses, and end in a red footer line. The annual report marks non-GAAP measures with [A], writes (2024: x) after a figure and puts units in parentheses after the measure. The forecourt's prime sign is white with a yellow head and a dark price zone of grades, under a canopy with a red band, over a 12-inch Shell Gray base band; Fuel Rewards copy says ¢/gal and main grade. shell.co.kr declares the Shell face and falls back to Arial and system fonts — no Hangul web font. Photos and drawings were looked at only.

Color Palette & Roles

Surfaces and text are shell.com's grays; yellow and red frame the page; the price zone is the sign's.

Token Hex Role
canvas · panel · plot #ffffff page background, figure panels, the sign's cabinet; a chart sits on its panel
soft #f7f7f7 compare boxes (the KPIs, Figure 1's boxes, the build steps), the corridor map's bands, the footer
band #f2f2f2 the current week (Figure 1's column, Table 1's week 44 columns), the note band under every figure, hovered rows
line · hair #e4e4e4 panel edges and chart gridlines
rule #d9d9d9 row rules in lists and tables, the sign's edge, the tooltip border, toggles
edge #bfbfbf dashed thresholds (−3% of plan, 2 days of supply, 97% uptime)
ink #404040 titles, key figures, table values (10.4:1)
body #4a4a4a running text; the dark button (shell.com)
text-2 #595959 kickers, subtitles, notes (7.0:1)
muted #707070 figure labels, axis ticks, units, (Wk 43: x) (4.95:1)
yellow #fbce07 Shell yellow: the 2px rule under every heading, the compare boxes' bottom rule, the sign's head, the footer rule. Never data
yellow-ui · hover #ffc800 · #e6b400 buttons, the menu underline, the map pins' heads, the selected site · button hover
red #dd1d21 Shell red: the canopy bar, chart titles, section numbers, the company name, [A] markers. Never data
zone · zone-2 · zone-muted #262626 · #3a3a3a · #bdbdbd the sign's price zone · rules between grades and the hovered grade · grade names and small figures (8.1:1)
gray-band #595959 the sign's base band with white text (7.0:1)

Rules: - Panels are white with a 1px #e4e4e4 edge; no radius on panels, boxes or the sign; 8px on buttons and toggles, 4px on the tooltip; no shadows except the tooltip and the toast. - Yellow is a rule or a head, never a fill behind running text and never data. Red is the frame (the canopy bar, chart titles, numbers of sections), never a series; the data's red is its own step #e03a35. - The price zone #262626 belongs to the sign and to the map's pins; never fill a panel with it.

Data Colors

Shell's results charts put the subject in red and everything else in gray, so this style does the same: red is the subject, gray the rest, with Shell's blue and yellow as data steps for a rare second and third series. Every value passed an OKLab validator (color-vision-deficiency separation, normal-vision separation, contrast) on the panel #ffffff and the compare boxes #f7f7f7. Use them exactly; do not generate tints.

Role Mark Label text Use
Subject #e03a35 #c4161c what the title names: the posted price, actual margin and volume, the sites more than 3% below plan, the busiest hours, the tanks and charge points past their threshold
Second series #2f6aae #2f6aae a second measure beside the subject, rare
Third series #b08500 #8a6800 only on lines and bars with direct labels, never next to red
Other #a3a3a3 text-2 everything else: rows inside the threshold, other hours
Comparison #7b7b7b, solid 2px for a second measure (laid-in cost), dashed 2px (5 on, 4 off) for plan ink always labeled at its end
Bridge totals #818181, increase #008443, decrease #e03a35 ink Figure 2
Thresholds and lines zero #404040, threshold #bfbfbf dashed, baseline #9a9a9a, grid #e4e4e4, current week #f2f2f2 —
Sequential #96b6e4 #709ad6 #4c7ec3 #3063a9 #1e4a85 ink on the two lightest, white on the rest color by value; blue, so magnitude never reads as bad
Diverging #b32322 #dd574e #ea988f · #e4e4e4 · #93b3e1 #5a87c8 #2d5da0 each arm's darkest above and below a midpoint
Status good #007a3d, bad #c4161c, neutral #7b7b7b — change text and status words only

Validation (from tokens.json, light mode, on #ffffff and #f7f7f7): - Red #e03a35 sits one step lighter than the brand red #dd1d21, which stays on titles and the canopy bar. Adjacent order red → blue → ochre → gray: lightness inside 0.43–0.77, chroma ≥ 0.10, CVD ΔE 18.5 (protan, red↔blue), normal vision 28.1, contrast ≥ 3:1 on both surfaces; with Other last, the worst adjacent pair is ochre↔gray at 14.7 (CVD) and 15.1 (normal). Across all pairs red↔ochre is 4.0 (deutan), so three series only on lines and bars with direct labels, and scatter plots and maps use red and blue only. - Other #a3a3a3 is neutral by design (the lightness band and chroma floor do not apply). At 2.52:1 it always has a second cue: value labels, the grid and tooltips, a table view. - Comparison #7b7b7b against red: CVD 11.1 (protan), normal 20.4, 4.23:1 on white. - Bridge: increase↔decrease is CVD 7.6 (protan), inside the 6–8 floor band, so the bridge always carries its second encoding: direction from the running total, parentheses on negatives and a value on every bar. - The sequential ramp is one blue hue, monotone, every gap ≥ 0.06, the light end 2.08:1. The diverging arms pass the ordinal checks (light ends 2.24 and 2.15:1); the poles are 19.6 (CVD) and 27.4 (normal) apart; the midpoint is the grid gray. - Text: red labels #c4161c 6.04:1 (5.39:1 on the #f2f2f2 column), ochre labels #8a6800 5.17:1, good #007a3d 5.45:1 (5.09:1 on #f7f7f7), bad 6.04:1 (5.63:1). Good↔bad is 5.1 under deuteranopia, so status is never color alone.

Rules: - Red only for what the title names; the rest gray. A card that is mostly red has highlighted nothing. - A red mark means the subject or a shortfall, never both in one view: where red marks the rows past a threshold (Figures 3, 5, 6), the subject is those rows. - Status is never color alone: ▲ / ▼, the sign or parentheses and words (below plan) always come with it. - Never the brand red #dd1d21 or Shell yellow on data.

Typography Rules

Role English Korean Weights
Sans (everything) Jost Pretendard 300–800
Mono (code in How it's built only) Roboto Mono Roboto Mono, then Pretendard for Hangul 400, 500

Jost, a geometric sans after Futura, stands in for the Shell typeface, which is not open; its round O and single-storey figures read close to the forecourt's numerals, and its tabular figures keep columns aligned. shell.co.kr loads no Hangul web font, so Korean uses Pretendard. Numbers on the screen stay in the sans with tabular figures; there is no serif.

Element Size / weight Notes
Company line · report name 13.5px: Vizney Energy red 500, | red 300, the period in body · 28px / 700, line-height 1.15 (Korean 26px) Vizney Energy | Wk 44 · 26 Oct – 1 Nov 2026
Kicker 14px / 400 text-2 Mobility results · Week 44; in sections the number in red 500
Headline clamp(24px, 2.05vw, 29px) / 600, line-height 1.26 the finding in one sentence; figures in it at 700 in ink (red stays for titles and data)
Lede 15.5px / 400, line-height 1.5
Section heading 24px / 700 ink, then a 2px #fbce07 rule 12px below
Sign label · big number 12px / 700 caps, 0.08em · 26px / 500 tabular POSTED PRICE · WK 44, Main grade vs the street +0.2¢
Sign grade · price · margin 12px / 600 caps #bdbdbd · 42px / 500 white, the tenth of a cent at 0.42em superscript, the unit 12px · 17px / 500 white over margin 12.5px 38px under 1360px, 32px on the horizontal board
KPI (compare box) measure 13px with the unit in parentheses · figure 38px / 500, −0.015em · change 13px / 600 status · (Wk 43: x) 12.5px muted four rows on a subgrid
Figure label 12px / 600 caps, 0.07em, muted FIGURE 1 · PRICE MARKERS (Korean 13px, no caps: 그림 1 · 시세)
Card title 18.5px / 600, line-height 1.32, text-wrap: balance the finding
Chart title 14px / 700 red #dd1d21, the unit after it 13px muted the results deck's red chart titles
Key · labels 12.5px / 500
Note band 12px on 17px text-2 on #f2f2f2 starts with Note: / 주: where it is a note; [A] notes start with the marker
Axis ticks · value labels 12px muted · 12.5px / 600 ink
Body 14px / 400, line-height 1.5

Korean breaks between words (word-break: keep-all), and a number stays on the line with the particle after it.

Numbers, Dates & Units

English Korean
Pump price $3.55⁶/gal (the tenth of a cent as a superscript, as on the sign) 3.55⁶달러/갤런
Price in text · tables $3.556, $0.606/kWh 3.556달러, 0.606달러/kWh
Price differences · margin +5.7¢, 46.0¢ a gallon, ¢/gal +5.7센트, 갤런당 46.0센트
Volume 1.48 (million gal) in KPIs, 1,482 thousand gal in charts, 60.9 K gal in lists 148.2(만 갤런), 148만 2천 갤런; lists 천 갤런
Money $1.12 million in KPIs, $2.5K in sentences, 1,099.5 ($ thousand) in the bridge 112.3(만 달러), 2,500달러, 1,099.5(천 달러)
Energy 175 MWh 175 MWh
Rates · points 14.2%, −0.8 pts, 71.4% uptime 14.2%, −0.8%p
Change against plan ▼ 1.2% below plan, ▲ 1.0¢ above plan, ▼ 0.8 pts below the 15% target ▼ 계획보다 1.2% 적음, ▲ 계획보다 1.0센트 높음, ▼ 목표 15%보다 0.8%p 낮음
Last period (Wk 43: 1.49), after the change (43주: 148.9)
Negatives in tables and bridges (9.0), (3.0) the same
Dates and weeks Wk 44 · 26 Oct – 1 Nov 2026, Wk 32 on axes, 6 am Mon 2 Nov, Tue 3 Nov 44주 · 2026년 10월 26일~11월 1일, 32주, 11/2(월) 오전 6시, 11/3(화)
Hours 4–7 pm, 12 am, 6 pm on axes 16~19시, 0시, 18시
Sites · equipment I-5 Exit 188, CP-3, Station A I-5 188번 출구, CP-3, 경쟁 주유소 A
Distance 0.8 mi, 100 mi 0.8마일, 100마일
Missing — (no charge points) —

Layout Principles

One column on a white page, at most 1400px wide, 32px side padding (24px up to 1359px, 16px below 640px), a 16px gap, 44px above each section. No sidebar, no logo, no photo.

  1. Canopy band (white, 80px): Vizney Energy | and the period; the report name; on the right EN/KO, Export PDF (dark) and Copy as Markdown (yellow).
  2. Red bar (#dd1d21, 6px) across the page.
  3. Corridor menu (52px, 1px #e4e4e4 below): All corridors (24) · I-5 (8) · I-10 (8) · I-95 (8), the selected one 700 with a 4px #ffc800 underline; Against plan and week 43 on the right. It is the filter: it scopes every card, and the URL keeps it (?corridor=i5).
  4. This week (from 1200px): the price sign as a pillar on the left (304px, 272px under 1360px); on the right the kicker, the finding headline, the lede, a yellow rule, five compare-box KPIs on a subgrid and Figure 1 (three price markers). The two columns end on one line: the sign's grade rows and Figure 1's plots take the extra height.
  5. 02 Against plan: Figure 2 the gross margin bridge (5 of 12 columns) · Figure 3 sites against plan (7 of 12).
  6. 03 Forecourt operations: Figure 4 busy hours · Figure 5 tanks · Figure 6 charge points, a row of three.
  7. 04 Sites: Figure 7 the corridor operations map across the page (the map and, beside it, the selected site zoomed to its 2-mile street with what to do), then Table 1 results by site, collapsed to corridor totals.
  8. 05 How it's built: an intro with two buttons, three compare-box steps, the workbench window.
  9. 06 Method and sources: footnotes in two columns, [A] in red.
  10. Footer (#f7f7f7 over a 2px yellow rule): the catalog line, the sample note, the notice and the way back.

At most seven views in a section, and every view a standard form an agent or a BI tool can rebuild. Density: at 1440 × 810 the frame, the price sign, the headline, the five KPIs and the top of Figure 1 are on the first screen. Reading order follows the list; never lead with a chart.

Component Stylings

Charts

Depth & Elevation

Flat and white. Panels are set apart by a 1px #e4e4e4 edge, compare boxes by #f7f7f7 and a yellow rule, never by shadows, and never lift on hover. Only the tooltip and the toast have a shadow. The price sign's depth is its three zones — yellow head, dark price zone, gray base band — not a bevel or a glow.

Interaction & Motion

Accessibility

Responsive Behavior

Each step keeps what the wider steps changed.

Tool Mapping

Web and coding agents. Load tokens.css (installed in .claude/skills/dashboard-style/; or copy the colors block from the front matter) and these fonts (the second for Korean).

<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Jost:wght@300;400;500;600;700;800&family=Roboto+Mono:wght@400;500&display=swap">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css">

The sign is a flex column (head, red bar, a grid of grade rows that grows to fill, base band); prices are spans with the tenth of a cent in a <sup> at 0.42em. Compare boxes use grid-template-rows: subgrid so the figures line up. The map is one SVG: each road a Catmull-Rom curve through seven points with sites placed by arc length; the zoom places our pin, then the competitor tags, then place names in the first free spot from a list of candidates. Give a device's parts a prefix (ps-, mp-, mz-) so shared classes never leak into them.

Tableau. Paste the <color-palette> elements of shell.tps into My Tableau Repository/Preferences.tps and restart Tableau Desktop. The categorical palette runs red, blue, ochre and Other; assign the subject first. - Dashboard background #ffffff. The header as a text object (Vizney Energy | in red); a 6px blank object filled #dd1d21 across; the corridor filter as a single-value list; section heads as text objects with a 2px #fbce07 blank object under them. - Each sheet in a container with a 1px #e4e4e4 border and 16/20px inner padding; the finding as the sheet title, the red chart title (#dd1d21, bold) as a subtitle line; the note in a text object on #f2f2f2. - Price sign: a container with a #fbce07 text object on top (the big number), a 5px red blank, a text table on a #262626 sheet (white text, the price at 28pt; Tableau cannot raise the tenth of a cent, so write $3.556) and a #595959 text object at the foot. - Compare boxes: text sheets on #f7f7f7 with a 2px yellow blank object under each; the change in #007a3d or #c4161c with ▲ or ▼; (Wk 43: x) in a small line. - Price markers: three line sheets with a reference band on the last week (#f2f2f2); plan dashed. - Bridge: Gantt bars on RUNNING_SUM(SUM([usd])) with size −SUM([usd]), Color by kind (#818181, #008443, #e03a35); fix the axis start at the break and say so in the caption. Number format #,##0.0;(#,##0.0). - Exception lists: bars sorted by value with a reference line at the threshold (dashed #bfbfbf) and Color by past threshold (#e03a35 / #a3a3a3); extra columns as Measure Names text. - Corridor map: a dual-mark sheet on a scaffold of road points (X, Y from the curve) with the sites as shapes at their exit's position, labels for the exit and the change, and a second sheet for the selected site's zoom driven by a parameter action; or, simpler, the route list (sites in exit order, a bar from the plan line, badges as shapes). - Results table: a text table with the current week columns shaded by a calculated #f2f2f2 band, corridors as a hierarchy that drills down to sites, negatives as (0.0). - Formats: "$"#,##0.000 (pump prices) · 0.0"¢" · #,##0.0 · 0.0% · +0.0" pts";−0.0" pts"; Korean workbooks #,##0.000"달러", 0.0"센트" and +0.0"%p";−0.0"%p". Fonts: Tableau Book unless Jost is installed on every viewing machine and on the server.

Power BI. View → Themes → Browse for themes → powerbi-theme.json. It sets the data colors (red, blue, ochre, then Other), the white page, white visuals with a 1px #e4e4e4 border and no radius, axis and gridline colors and text classes. Install Jost on authoring and viewing machines or accept Segoe UI. - Title each visual with the finding; put the red chart title in the subtitle and the method in a text box on #f2f2f2 that starts with Note:. - Price sign: a yellow card for the big number over a table visual with a #262626 background and white text; a shape #dd1d21 between them. - Compare boxes: card visuals on #f7f7f7 with a yellow bottom border, the change as a measure with conditional formatting in #007a3d / #c4161c, always with a sign. - Bridge: the waterfall visual with sentiment colors increase #008443, decrease #e03a35, total #818181; data labels in thousands with one decimal, negatives in parentheses. - Exception lists: bar charts with a constant line at the threshold and conditional colors; the map as the route list or a shape map of the schematic roads, with a drillthrough page as the zoom.

Chart libraries (D3, Observable Plot, Vega-Lite, matplotlib, Datawrapper). Subject #e03a35 (labels #c4161c), second #2f6aae, third #b08500 (#8a6800), Other #a3a3a3, comparison #7b7b7b (dashed 5 4 for plan), bridge totals #818181, increase #008443, gridlines #e4e4e4 on rows only, the current week #f2f2f2, ticks #707070 at 12px, plot background #ffffff, square bar ends. The sample's Figure 2 in five forms is in the workbench of the live sample; bridge.csv is its data.

Do's and Don'ts

Agent Prompt Guide

Install the style (npx @vizney/styles@latest add shell, curl -fsSL https://styles.vizney.com/install.sh | sh -s -- shell, or unzip the package in the project root). Agents that read skills load dashboard-style on their own and work in one of three modes: Build (plan the views, then draw them to this file), Restyle (move an existing screen onto this file without changing its data) and Review (a table of rule, finding, severity and fix). For an agent without skills, start the prompt with Read DASHBOARD.md and follow it exactly. For example:

Read DASHBOARD.md and follow it exactly. Build our weekly mobility report as one self-contained HTML file with
fictional data, in English and Korean (?lang=en|ko, English by default), on the white page the spec describes.
Top: a white canopy band with "Vizney Energy |" in red, the period and the report name, the EN/KO toggle, a dark
Export PDF and a yellow Copy as Markdown; a 6px red bar; the corridor menu as the filter for every view, kept in the URL.
This week: the price sign as a pillar (yellow head with the main grade against the street, a red bar, a dark price zone
with one row per grade and the posted price to a tenth of a cent, a gray base band), then the finding headline, a lede,
a yellow rule, five compare boxes against plan with "(Wk 43: x)", and three key price markers. Both columns end on one line.
Against plan: the gross margin bridge (gray totals cut at a break, green and red steps, negatives in parentheses) and
the sites against plan as a ranked exception list with the price against the street beside it.
Forecourt operations: busy hours, tanks under 2 days of supply, charge points under 97% uptime.
Sites: a schematic corridor map with the sites as small price-sign pins and alert badges, a zoom on the selected site's
2-mile street with competitors' prices and what to do; then the results table collapsed to corridor totals.
Every view on the same panel: figure label, finding title, yellow rule, red chart title with the unit, keys, view,
note band. At most seven views per section. Use only the values in Data Colors, the formats in Numbers, Dates & Units
and the components in Component Stylings. Every chart, list and the map need a tooltip, keyboard control and a
screen-reader table.

Before it is done, the agent checks: - [ ] The headline is the finding; the price sign shows every grade to a tenth of a cent with its change and margin; the five compare boxes carry a signed change against plan or target in good (#007a3d) or bad (#c4161c) and last week in parentheses. - [ ] Every view sits on a white panel (1px #e4e4e4) with a yellow rule under the title, a red chart title with the unit and a note band; every card title states a finding. - [ ] Red #e03a35 only for what each title names and the rest gray; the bridge in gray, green and red with parentheses; no #dd1d21 or yellow on data. - [ ] Plan appears where it matters (the KPIs, Figure 1, the bridge, the sites, the table), and the shortfalls are ranked and named with their likely cause and the action. - [ ] The map is schematic and says so; pins, tags and labels never overlap; the zoom's numbers match the table. - [ ] Gridlines on rows only; line ends labeled; no dual axis, pie, donut, gauge, gradient or photo. - [ ] Numbers, dates, hours and money follow the formats in both languages; tables and bridges add up. - [ ] Panels side by side end on one line at 1440, 1280 and 1024px without a stretched chart; nothing breaks at 390px. - [ ] Text ≥ 4.5:1; marks below 3:1 have a second cue; every view has a tooltip, keyboard control and a data table; the filter changes every card.