LEO / EARTH OBS · v2

Orbital Watch Design System

Tokens and components for the satellite tracker. Every value on this page comes from tokens/tokens.json, and every component specimen uses the product's own orbital-watch.css, so the reference can't drift from the app.

Principles

The planet is the interface

The viewport is full-bleed and the globe stays centered. Chrome floats on frosted glass at the edges so imagery and weather stay visible behind it.

Color means state

Orange is a tracked object, green is what you've locked onto, cyan is ground infrastructure. Status and weather colors are separate tiers and never stand in for the accents.

Say where the data came from

Every live value names its source and age. When the app falls back to the simulated model, it says so in amber, never silently.

Color

Two tiers. Palette primitives hold raw values; semantic tokens alias into them (shown as {palette.signal} → #3dfc9b). Components only ever use semantic tokens, so swapping a palette value re-skins everything.

Palette

Semantic · surface, line, accent, text

Status

Weather & sensing

0% clear30%70%100% overcast

Cloud cover is a sequential ramp from --wx-clear through --wx-partly to --wx-overcast: deep water to cloud white, so more cloud reads as more white. Used by the cloud meter, the along-track strip and the catalog bars.

Typography

One family, three cuts. Plex Mono for anything a reader compares digit by digit, Plex Sans for sentences, Plex Sans Condensed in caps for labels and section heads. All numbers use tabular-nums.

Scale

Weight & tracking

Spacing & radius

Layout · floating glass HUD

Left column is the fleet: catalog, conjunctions, layers. Right column is the target: mission clock, the selected satellite's readout, and the ground-track map, all --layout-rail-width wide so they share edges. Every panel is inset by --layout-inset. Below 760px the globe pins to the top and the panels scroll up over it as one column.

Glass recipe: background: var(--glass-bg); backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate)); box-shadow: var(--shadow-panel), var(--glass-edge);

Components

Buttons .hud-btn · --accent · --sm
Filter chips .chip · sensor tags .sensor-tag
OpticalSARLidar
Mission clock .clock-bar · .segmented · LIVE and SIM states
14:32:072026-10-07 UTC
19:48:552026-10-07 UTC · 300×
Catalog rows .catalog-row with cloud-cover mini bar · conjunction row
LANDSAT 9NORAD 49260 · Optical12%
SENTINEL-1ANORAD 39634 · SAR64%
AQUANORAD 27424 · Optical97%
CONJUNCTIONS< 900 km
SENTINEL-2A ↔ SENTINEL-2B402 km
Target readout · key stats .key-stats · tabs .tabs · weather below
LANDSAT 9
NORAD 49260 · 2021-088A
Optical
OLI-2 + TIRS-2 · 185 km swath
Altitude705.2 km
Velocity7.51 km/s
Sub-point32.1N 104.9W
29%
Cloud cover belowClearOpen-Meteo · 12 s ago
Air temp24.3 °C
Wind4.1 m/s
Precip.0.0 mm/h
Cloud cover along tracknext 24 min
now+12 min+24 min
Imaging outlook .outlook[data-state] · ok · warn · alert · sar
Clear windowAOS in 42 min. Forecast 12% cloud over Seattle, sun 38° up. Good conditions for a usable scene.
MarginalAOS in 3 h 05 min. Forecast 54% cloud over Seattle. Expect partial coverage.
Night passSun is 21° below the horizon at AOS, too dark for reflective bands. Thermal channels only.
All-weatherC-band radar sees through cloud and works at night.
Ground track .map2d · night shading · swath band · track
GROUND TRACK
Toast .toast · source fallback message
Live weather couldn't be reached from this page, so the simulated cloud model is filling in.

Surface, layout, depth & motion