Phase 0 — Art directionStyleguide plate A · 1 of 22026 · 09 · 04
CodenameDirection A
Brass &Basalt
Hues
4 + bone
Corner radius
0 · 30° chamfer
Scale
1.333 from 15
Visual thesis
A tabletop wargame carved from basalt and brass, lit by one warm lamp on a dark table.
01
References
What is stolen · what is refused
Reference 01 · Game
Kingdom Rush
Steal
Its instant readability of threat at a glance.
Refuse
Its cartoon outlines and bouncy proportions.
Reference 02 · Film production design
Dune (2021)
Steal
Monolithic, matte, sand-and-metal, nothing shiny.
Refuse
Its monochrome; we keep brass warmth.
Reference 03 · Central-European print
Letterpress poster
Steal
Heavy condensed grotesk, limited ink, visible paper grain, hard offset shadows.
Refuse
Its flatness; the board has depth.
02
Live feel demo
Seed 20260904 · fixed 60 Hz · same seed, same run
The shared deterministic sim, skinned in Direction A. Ground is basalt with a dotted
register grid; the lane is a channel cut into the slab with a hard offset shadow, never a blur.
Towers recoil, release and follow through on every shot. Sparks are struck chips, not soft dots.
The readout below is diegetic — it is a machined plate bolted to the board, and its numbers are the sim's own.
Wave01
Hull20 / 20
Gold
0000Kills 0
Entities 00Tick 16.67 msRunning
Wave 02
Recoil → release → follow-through, 166 msHit-stop 30–70 ms on a killRange rings are hexagonsDamage pips are hard-edged, never a bar with a glow
01
Repeater
Brass · player agency
Silhouette
Hexagon, twin chamfered barrels, brass over basalt.
Four hues + bone + a basalt ramp · OKLCH is normative
Every hue carries one job and is never used for another. No state is encoded by hue alone:
threat also carries an eroded silhouette, sustain also carries a hex pip, control also carries an aperture.
Click a chip to copy its value.
Bone on basalt-900
Body copy, HUD, everything
14.8:1
Brass on basalt-900
Gold, build, selection
9.9:1
Vermilion on basalt-900
Threat — large text only
5.4:1
Never body copy. Damage numerals are ≥ 17px or set in bone.
04
Type
Big Shoulders Display 700/800 · Archivo 400/500/700 · scale 1.333 from 15
Condensed industrial signage over a workhorse grotesk. Display tracking is -0.01em;
labels are uppercase at 0.08em. Every numeral that can change is tabular — a gold counter that
jitters is a bug, not a style.
Digits sit in fixed cells. The gold counter can tick every frame and the column rules never move.
Display face · proportionalRejected for live numbers
000000
The same count in the display face. Watch the digits drift off the cell rules — that is why no live number on this page is set in it.
05
Shape language
Authored SVG · final art quality
Everything is cut from a hexagon with a 30° chamfer. The player's things are
machined — hard facets, exact angles. The enemy's things are eroded — pitted,
asymmetric, softened by wear.
01 · Repeater
Brass. Player agency — the first tower every run opens with.
Hex base · twin chamfered barrels · hex range
02 · Arbiter
Steel. Control — slows what crosses its aperture.
Upright hex prism · hex iris · hatched vents
03 · Censer
Verdigris. Sustain — brass left out in the weather, still working.
Tapered column · six prongs · hex emitter
04 · Slag crawler
Vermilion. Threat — no two edges parallel, nothing machined.
Eroded · pitted · asymmetric · hard damage pip
06
Motion ladder
Hover or click a row to play it · nothing is linear
Four names, four jobs. A duration is never chosen by feel at the call site — it is picked
off this ladder. The dotted diagonal in each plot is linear, for comparison; the brass curve is what ships.
Every tower fires with anticipation: recoil back two frames, release,
follow-through. Nothing snaps to its end state. Watch it live in section 02 — the barrel kicks back
along its own axis and returns over 166 ms while the slug is already gone.
07
Texture study
Matte stone · feTurbulence 0.9 at 0.05 · shadows are hard
The same basalt surface, four treatments. The first one is what the direction refuses:
a flat fill reads as a vector illustration. Everything else on this page — including the page you are
reading — carries the grain layer at opacity 0.05.
Unlit — rejected
Flat --basalt-700. No surface, no lamp, no material. Reads as a swatch, not stone.
6×
Grain overlay
feTurbulence, baseFrequency 0.9, 3 octaves, opacity 0.05, overlay. Inset is the same noise at 6×.
7 px pitch5 px pitch
45° hatching
Shadow fill, vents and disabled states. Two pitches only. A shadow is a texture here, never a blur.
Hard offset + chamfer light
Shadow 4px 4px 0, no blur. One 1px --basalt-600 highlight on the top-left chamfer. This is the whole depth model.