Skip to content
LE PHARE

Design system · Phase 0

A lighthouse sweeping
the dark of the oceans.

Le Phare reads like a publication and behaves like an instrument. The abyss is the paper, light is the ink, and the amber beam marks only what matters.

Five principles

  1. 01

    The chart carries the conclusion

    Figure titles are statements, not descriptions. One hero series in amber, context in muted blues, events annotated on the axis, source in mono below.

  2. 02

    Darkness is the paper

    No borders where a 2 to 4 percent lightness step will do. Hairlines at 8 percent. Amber appears three times per screen at most; red only for incidents.

  3. 03

    Serif argues, sans measures, mono locates

    Spectral for titles and editorial voice. Archivo for interface and labels. IBM Plex Mono for coordinates, timestamps and identifiers. Tabular figures wherever numbers meet.

  4. 04

    Density in layers, finish at the pixel

    The number first, the trend second, the detail on hover. Transitions of 150 to 250 ms with a pronounced ease-out. Every animation states something.

  5. 05

    Honesty is a design element

    Sources under every figure, aggregation only, a methodology page built with the same care as the home page.

Color

One accent. The palette works in luminance steps, not in hues. Light mode swaps the same roles onto cool paper.

--bg-0 · #0A1622

Page. The abyss is the paper.

--bg-1 · #0E2233

Raised panel, hover rows.

--bg-2 · #14293D

Active surface.

--ink · #E8EDF2

Primary text.

--ink-2 · #A9B8C6

Secondary text.

--ink-3 · #71869B

Meta, captions, axes.

--accent · #F2B950

The beam. CTA, hero series, critical data. Three appearances per screen, maximum.

--risk · #C0392B

Incidents only. Never decorative.

Measured contrast

PairRatioWCAG
ink on bg-015.49:1AAA
ink-2 on bg-09.00:1AAA
ink-3 on bg-04.85:1AA
accent on bg-010.28:1AAA
accent-ink on accent10.28:1AAA
risk-text on bg-05.56:1AA
ink on bg-0 (light)14.88:1AAA
ink-3 on bg-0 (light)4.64:1AA
accent-text on bg-0 (light)5.16:1AA

Typography

Spectral carries the argument, Archivo runs the instruments, IBM Plex Mono keeps the ship's log.

Hero display
clamp(3rem, 7vw, 5.5rem)

The observatory

Display
3.25rem

Red Sea transits halve

Heading 2
2rem

Weekly risk brief

Heading 3
1.4rem

Chokepoint monitor

Editorial body
18px / 1.65

Transits through Bab el-Mandeb fell below thirty per week for the first time since tracking began, while insurers widened the listed area to the entire southern Red Sea. Rates followed within days.

UI body
16px Archivo

Interface text is set in Archivo. Labels stay short, sentence case, and never compete with the data they describe.

Taxonomy
small caps

Southern Red Sea · war risk zone

Ship's log
mono 12px

12°39'N 43°25'E · 2026-07-08 14:32 UTC · UKMTO advisory 044

Tabular figures

1,084 → 42 → 30,660

Every number that meets another number aligns on a fixed grid.

Recommended · Spectral

Suez transits have halved since November

Cool, transitional, close to the register of a broadsheet. The optical axis sharpens at display sizes. This is the voice of measured authority.

Alternative · Fraunces

Suez transits have halved since November

Warmer, softer terminals, more personality but less gravitas. Kept here for comparison; one of the two ships, not both.

Iconography

A custom maritime set: 20 px grid, 1.5 stroke, square terminals, drawn to sit next to IBM Plex Mono.

Drone strike
Boarding
Seizure
Mine
Hijack
GPS jamming
Vessel
Anchorage
Chokepoint
Trend
Source link
Navigation

Components

Actions

Hover raises, active presses. Focus draws a 2 px amber ring.

Taxonomy tags

Drone strikeBoardingSeizureGPS jammingCriticalBab el-Mandeb

The square matches the series color of the same category in every chart.

Live statistics

0

Incidents · last 30 days

all monitored zones

0

Bab el-Mandeb transits

weekly, cargo above 10k dwt

0

AIS anomalies flagged

aggregated by zone

Data table

ZoneTypeIncidents 30dTrendLast event · UTC
Southern Red SeaDrone strike23+92026-07-08 14:32
Gulf of AdenBoarding7+12026-07-05 03:11
Strait of HormuzGPS jamming41+172026-07-09 21:47
Gulf of GuineaHijack202026-06-28 06:54

Sample rows. Numerals tabular, negative space instead of card chrome.

Dataviz theme

One theme shared by every chart. Categorical order is fixed and CVD-validated (worst adjacent ΔE 31.2); the hero series wears the beam.

Deep amberFirst series. Cargo.
TealTanker.
PeriwinkleContainer.
RosePassenger.
SteelBulk.
CopperOther.

Bab el-Mandeb transits fell by two thirds

Weekly transits, cargo vessels above 10k dwt. Sample data.

20242023 baseline

Source: sample data for the styleguide · Graphic: Le Phare

Jamming now drives the incident count

Monthly incidents by type, Jan to Jun. Sample data.

Drone strikeBoardingSeizureMineHijackGPS jamming

Source: sample data for the styleguide · Graphic: Le Phare

Six chokepoints, one glance

Weekly transits per chokepoint, indexed scales. Sample data.

Source: sample data for the styleguide · Graphic: Le Phare

Map style · Abyss

A custom MapLibre style built for the observatory: water is the page itself, land recedes, no roads, no cities without purpose. Amber marks observations, red marks incidents.

Vector tiles by OpenFreeMap, style "Abyss" by Le Phare · markers are sample data

Motion

Three durations, one curve. Every animation has an editorial meaning; under prefers-reduced-motion everything degrades to its final state.

GestureMeaningTool
Beam sweep, on load then every 9 sthe observatory is on watchCSS keyframes
Masthead lines rise from a maskthe argument opens the pageGSAP SplitText
Sections reveal on scroll, staggereddensity arrives in layersGSAP ScrollTrigger
Charts draw themselves in viewportthe data is being tracedWeb Animations API
Shipping-lane particles in the herotraffic keeps moving through the darkCanvas 2D
Map: camera drift, lane flow, pulsing incidentsthe watch room leans inMapLibre native
Counters count up, light streak on primary CTAthe data is alive; the beam passesrAF · CSS

150ms

Hover, focus

the promise of an action

200ms

State changes

filters, tabs, toggles

250ms

Entrances

layers, counters, reveals

easing: cubic-bezier(0.16, 1, 0.3, 1) · the beam sweep on load runs once, 1.6 s

Independent student research. Not insurance, navigation or security advice. Aggregated open-source data; may contain errors.