Stellaris
Remix this template to create a similar design — same sections, layout, animations, colors, and typography.
An app for amateur stargazing. Deep midnight-navy sky, gold and oxblood accents, Inter with mono labels.
Palette
Typography
44px
28px
13px
10px
10px
Spacing & Shape
| Token | Value | Preview |
|---|---|---|
| xs | 4px | |
| sm | 8px | |
| md | 16px | |
| lg | 24px | |
| xl | 32px | |
| xxl | 48px |
Border Radius
| Token | Value | Preview |
|---|---|---|
| none | 0px | |
| sm | 2px | |
| full | 9999px |
design.md
tokens (raw)
name: stellaris-design
version: alpha
description: >
Stellaris is a deep-night astronomy companion — a planisphere, sky forecast,
and observation log rendered as an instrument panel. The surface is a near-black
midnight blue (`#0A0C1A`) carrying a single muted-gold "voltage" (`#C4A030`)
against silver text (`#B0B8C0`); a red-safe night-vision mode swaps everything to
oxblood (`#8A2020`). Signature moves: a hand-drawn SVG star chart with rotating
azimuth ticks, twinkling stars, an ecliptic dashed ellipse and a center glow; a
fractal-noise overlay over the whole page; hairline borders instead of shadows;
and a vertical-spine observation log. Typography is light-weight Inter for display,
italic Inter for object names, and JetBrains Mono for every coordinate and readout.
Geometry is overwhelmingly circular (the chart) and sharp-cornered (the data cards).
colors:
# Brand / Voltage
gold: '#C4A030' # the single accent — bright stars, active borders, key stats, planet markers
# Surface
sky: '#0A0C1A' # page background (body / .root / .bg-sky), chart label backings
field: '#1A1E30' # raised panels — equipment tiles, sketch cards, moon discs, toggle track
# Text
silver: '#B0B8C0' # primary text + body, also used at /85 /60 /55 /50 /40 opacities for hierarchy
# Hairlines
hairline: 'rgba(176,184,192,0.18)' # default 1px borders, dividers, ring outlines
hairline-strong: 'rgba(176,184,192,0.32)' # emphasized section tops, outer chart ring
# Semantic
red-safe: '#8A2020' # night-vision mode — recolors all text, svg strokes, fills and borders
# Gradient
center-glow: 'radial-gradient(circle, rgba(196,160,48,0.08) 0%, transparent 100%)' # gold bloom at chart center
starmap: 'radial-gradient(circle at 50% 50%, rgba(26,30,48,0.6), rgba(10,12,26,0.95) 70%)' # vignette over star photo
typography:
display:
fontFamily: "'Inter', sans-serif"
fontSize: clamp(28px, 44px) # h1 44px; section h2 34px; card headings 30px (text-3xl)
fontWeight: 300
letterSpacing: -0.02em
object-name:
fontFamily: "'Inter', sans-serif"
fontSize: 28px # log entry object names; target rows 15px
fontWeight: 300
fontStyle: italic
body:
fontFamily: "'Inter', sans-serif"
fontSize: 13px
fontWeight: 300
lineHeight: 1.625 # leading-relaxed observation paragraphs
mono:
fontFamily: "'JetBrains Mono', monospace"
fontSize: 10px # coordinates, clocks, stats — feature-settings 'tnum'
fontWeight: 400
eyebrow:
fontFamily: "'Inter', sans-serif"
fontSize: 10px
fontWeight: 400
letterSpacing: 0.3em # section eyebrows; chip/label tracking ranges 0.18em–0.4em
textTransform: uppercase
rounded:
none: 0px # data cards, sketch frames, equipment tiles use rounded-sm (~2px) or sharp
sm: 2px # equipment tiles, sketch cards (rounded-sm)
full: 9999px # chart rings, pill nav, moon discs, star dots, toggle, log nodes
spacing: # base unit 4px; Tailwind scale
xs: 4px
sm: 8px
md: 16px
lg: 24px
xl: 32px
xxl: 48px # log entry vertical gap (gap-12 / space-y-12)
components:
pill-nav:
backgroundColor: '{colors.field}' # bg-field/80
textColor: '{colors.silver}'
typography: '{typography.mono}'
rounded: '{rounded.full}'
padding: '10px 20px' # py-2.5 px-5
border: '1px solid {colors.hairline}'
backdropFilter: 'blur(24px)' # backdrop-blur-xl
equipment-tile:
backgroundColor: '{colors.field}'
textColor: '{colors.silver}'
rounded: '{rounded.sm}'
border: '1px solid {colors.hairline-strong}' # active tile: border {colors.gold}
aspectRatio: '1 / 1'
target-card:
backgroundColor: 'transparent' # hover: bg-field/60
textColor: '{colors.silver}'
typography: '{typography.mono}'
rounded: '{rounded.none}'
padding: '12px 4px' # py-3 px-1
border: '1px solid {colors.hairline}' # bottom hairline divider
forecast-card:
backgroundColor: 'transparent'
textColor: '{colors.silver}'
typography: '{typography.display}' # 30px day name
rounded: '{rounded.none}'
padding: '24px'
border: '1px solid {colors.hairline}' # right hairline between columns
chip:
backgroundColor: 'transparent'
textColor: '{colors.silver}' # active chip: text {colors.gold}
typography: '{typography.mono}'
rounded: '{rounded.none}'
padding: '2px 8px' # py-0.5 px-2
border: '1px solid {colors.hairline}' # active: border {colors.gold}
button-outline:
backgroundColor: 'transparent' # hover: bg-gold/10
textColor: '{colors.gold}'
typography: '{typography.eyebrow}'
rounded: '{rounded.none}'
padding: '8px 16px'
border: '1px solid {colors.gold}'
sketch-card:
backgroundColor: '{colors.field}' # bg-field/60 + backdrop-blur-sm
rounded: '{rounded.sm}'
border: '1px solid {colors.hairline}'
size: '176px × 128px' # w-44 h-32, gold/10 blur glow behind
toggle:
backgroundColor: '{colors.field}' # checked: bg {colors.red-safe}
rounded: '{rounded.full}'
size: '32px × 18px'
border: '1px solid rgba(176,184,192,0.3)'
motion:
spin-slow: 'rotate 360deg, linear infinite — 240s (.spin-24) and 600s (.spin-60) on chart tick rings'
twinkle: 'opacity 0.4↔1, 3s ease-in-out infinite, staggered delays on bright stars'
pill-nav-hide: 'opacity + translateY .35s — hides on scroll-down, shows on scroll-up'
planisphere-tilt: 'pointermove 3D perspective rotateX/Y up to ±6deg, transition .4s ease-out'
target-reveal: 'GSAP autoAlpha 0→1, x 24→0, stagger 0.06, power3.out'
log-reveal: 'GSAP ScrollTrigger.batch — autoAlpha 0→1, y 32→0, stagger 0.12, power3.out'
spine-draw: 'GSAP scrub — strokeDashoffset draws the gold center spine as you scroll the log'
smooth-scroll: 'Lenis smooth scrolling'
icons:
library: Tabler (tabler-icons-webfont) + inline SVG astronomy glyphs
style: outline
sizes: { sm: 14px, md: 16px, lg: 20px } # text-sm / text-base / text-xl
color: '{colors.silver}' # active / accent icons use {colors.gold}Stellaris
stellaris-design · alpha
Design spec — version alpha. Source: static HTML (
index.html); tokens read from inline styles + class rules. Fictional/sample product; described factually.
Overview
Stellaris is a deep-night astronomy dashboard styled as a precision instrument. The
entire page sits on a near-black midnight blue (#0A0C1A) dusted with a faint
fractal-noise overlay (the .noise::after SVG turbulence at 6% opacity, overlay
blend). Against it runs a strict two-tone hierarchy: silver (#B0B8C0) for all
text — stepped down through /85, /60, /55, /50, /40 opacities — and a
single muted-gold voltage (#C4A030) reserved for the things that matter (bright
stars, active equipment, key stats, planet markers, the log spine). The hero is a
hand-built SVG planisphere: a circular star chart with an Unsplash deep-sky photo
behind a radial vignette (.starmap-bg), concentric dashed altitude rings, a
slowly rotating azimuth tick ring (.spin-60, 600s), a dashed gold ecliptic
ellipse, twinkling gold stars, hand-plotted constellation lines, planet glyphs and
deep-sky markers — all responding to pointer with a subtle 3D tilt. Surrounding it,
data lives in sharp-cornered cards bounded only by hairline borders
(rgba(176,184,192,0.18)) — no drop shadows anywhere. Type is light-weight Inter
(300) for display, italic Inter for object names, and JetBrains Mono (with tnum)
for every coordinate, clock and readout, giving the page its observatory-logbook
voice. A red-safe toggle flips the whole UI into night-vision oxblood (#8A2020).
Colors
Brand / Voltage. A single accent: gold #C4A030. It marks bright stars and
planet outlines on the chart, the center glow, active equipment-tile borders, the
selected chip border, the "New Entry" outline button, the log spine and nodes, and
any standout statistic (limit magnitude, "94%" transparency, "14 visible").
Surface. sky #0A0C1A is the page background (body, .root, .bg-sky) and
backs small chart labels. field #1A1E30 is the only raised tone — equipment
tiles, sketch frames, moon discs, the toggle track, and hover fills (bg-field/60,
bg-field/80).
Text. silver #B0B8C0 is the universal ink for headings and body alike, used
at full strength for primary text and at reduced opacities for metadata and muted
captions. Body paragraphs run at /85.
Hairlines. hairline rgba(176,184,192,0.18) draws default borders, row
dividers and chart rings; hairline-strong rgba(176,184,192,0.32) emphasizes
section tops and the outer azimuth ring.
Semantic. red-safe #8A2020 is night-vision mode: the .red-safe class
recolors all silver/gold text, SVG strokes and fills, hairlines and panel
backgrounds to oxblood for dark-adapted observing.
Gradient. center-glow is a gold radial bloom (#C4A030 at 0.08 → transparent)
at the chart's center; starmap is a radial vignette over the deep-sky photo,
darkening from rgba(26,30,48,0.6) to rgba(10,12,26,0.95).
Typography
Two families, both loaded from Google Fonts: Inter (weights 300–600) and
JetBrains Mono (300–500). Display, object names and body are all Inter; the
display style is deliberately light (weight 300) with tight -0.02em tracking.
Object names (galaxies, planets) are set in italic Inter — a recurring signature.
JetBrains Mono, with tabular numerals (font-feature-settings: 'tnum'), carries
every coordinate, RA/Dec readout, clock, magnitude and percentage — it is the data
voice. Both are open-source, so no substitution needed.
| Token | Size | Weight | Line-height | Tracking | Usage |
|---|---|---|---|---|---|
| display | 44 / 34 / 30px | 300 | 1.0 (leading-none) | -0.02em | h1 "Planisphere", section h2s, forecast day names |
| object-name | 28 / 15px | 300 italic | tight | — | log entry titles (M31, Jupiter), target-row names |
| body | 13px | 300 | 1.625 | — | observation log paragraphs |
| mono | 10 / 9px | 400 | tight | varies | coordinates, clocks, stats, chips, captions |
| eyebrow | 10 / 9 / 8px | 400 | — | 0.18–0.4em | uppercase section eyebrows, equipment/chip labels |
Layout
Base unit is 4px on Tailwind's scale. The page is a single vertical scroll of
full-bleed sections at px-8. The hero is a 12-column grid: an 8-column
planisphere (a max-w-[780px] aspect-square chart) beside a 4-column sidebar
holding a 4-up equipment icon rail and a hairline-divided "Targets · Tonight"
list. Below, a 3-night forecast is a 4-column grid of cards separated by vertical
hairlines under a strong top rule. The observation log is a centered vertical-spine
timeline: a thin gold SVG spine down the middle with alternating two-column
entries (right-aligned metadata on the left, notes + sketch on the right), each
pinned by a round node on the spine. A fixed pill-shaped nav floats top-center with
live coordinates and clocks; a hairline footer closes the page. Whitespace is
generous and the composition reads as an instrument readout — labels, ticks,
coordinates everywhere.
Elevation & Depth
There are essentially no drop shadows — depth comes entirely from hairline
borders and a few translucent glass surfaces. The pill nav and sketch cards use
backdrop-blur (xl and sm respectively) over translucent field fills. The only
"glow" effects are soft gold radial blooms: the chart's center-glow, and a
bg-gold/10 blur-2xl halo behind each observation sketch. Raised vs. flat is
signaled by the field tone and a hairline; emphasis is a hairline-strong or a
gold border, never a shadow.
Shapes
Two opposed geometries. Circular dominates the chart: every ring (azimuth,
altitude, zenith), the moon discs, star dots, the pill nav, the toggle, and the log
nodes are rounded-full. Sharp / near-sharp governs the data: equipment tiles
and sketch frames use rounded-sm (~2px), while target rows, forecast cards,
chips and the outline button are fully square-cornered. The contrast — soft round
sky instruments against hard-edged tabular data — is the shape signature.
Components
- Pill nav —
field/80fill,hairlineborder,rounded-full,backdrop-blur-xl,py-2.5 px-5; mono coordinates + clocks with a gold compass icon and the red-safe toggle. - Equipment tile —
aspect-square,fieldfill,rounded-sm,hairline-strongborder (active:goldborder + gold dot + gold label); Tabler icon over an 8px uppercase label ("NAKED", "BINOC.", "80 mm"). - Target card — transparent row, bottom
hairlinedivider,py-3 px-1, hoverfield/60; italic object name, mono designation, gold ALT, a small gold altitude-curve sparkline. - Forecast card — square, vertical
hairlineseparators,px-6 py-6; 30px display day name, a 5-segment seeing bar (gold filled /rgba(176,184,192,0.15)empty), and a clip-path moon-phase disc. - Chip — square,
hairlineborder,py-0.5 px-2, mono uppercase; active state usesgoldborder + gold text ("8×42 Binoculars", "Seeing 4/5"). - Outline button — square,
goldborder, gold uppercase0.25emlabel, hovergold/10; "+ New Entry". - Sketch card —
176×128,field/60+backdrop-blur-sm,rounded-sm,hairlineborder, gold blur halo behind; inline SVG eyepiece sketch with a mono caption. - Toggle —
32×18pill; uncheckedfieldtrack with silver knob, checkedred-safetrack with knob sliding right.
Motion
Authored with GSAP + ScrollTrigger, anime.js and Lenis smooth scroll. The chart's
tick rings rotate continuously (.spin-60 600s, .spin-24 240s, linear); bright
stars twinkle (opacity 0.4↔1, 3s, staggered). The planisphere tilts in 3D on
pointer move (perspective rotateX/Y up to ±6°, .4s ease-out). On load, target
cards stagger in from the right (autoAlpha + x, stagger 0.06, power3.out). On
scroll, log entries batch-reveal upward (y 32→0, stagger 0.12) and the gold center
spine draws itself via strokeDashoffset scrubbed to scroll. The pill nav hides on
scroll-down and reappears on scroll-up (opacity + translateY, .35s). A live clock
ticks the LST readout every second.
Iconography
Tabler icons via the webfont (ti ti-*) for UI glyphs — compass, moon, eye,
binoculars, telescope, cloud, plus — at text-sm/text-base/text-xl (14–20px),
outline style, in silver with gold for active/accent. Astronomy content (stars,
constellation lines, planet glyphs, deep-sky markers, eyepiece sketches, the chart
itself) is hand-drawn inline SVG with stroke-width 0.4–1, using silver and
gold strokes/fills. In red-safe mode every SVG stroke and .keep-fill is forced to
oxblood.
Do's and Don'ts
- Do keep gold scarce — one voltage, reserved for the genuinely important.
- Do route every number through JetBrains Mono with tabular figures.
- Do use hairlines and the
fieldtone for structure; let circular and sharp geometries coexist. - Do keep object names in light italic Inter.
- Don't add drop shadows — depth is borders, blur and faint gold glow only.
- Don't brighten the surface or introduce a second accent color.
- Don't let red-safe mode leak any silver/gold — everything must collapse to oxblood.
- Don't use heavy Inter weights; display stays at 300.
Known Gaps
- Display
fontSizeis expressed as aclamp(...)summary of three fixed sizes (44/34/30px) that the HTML hard-codes per element; there is no real fluid clamp in the source. rounded-smis mapped to ~2px (Tailwind's default) — the exact pixel value is not declared in the HTML.- The
starmap-bglayers a remote Unsplash photo behind the radial vignette; only the gradient values are tokenized, not the image. - Body line-height 1.625 is Tailwind's
leading-relaxed, inferred from the utility class rather than an explicit declaration.