Seven colors. Layered silhouettes. Infinite depth through honest weight.
The ox is the oldest working animal. It does not sprint. It does not perform. It lowers its head, leans into the yoke, and pulls — across any terrain, in any weather, for as long as the work demands. It is patient, grounded, and immovably strong.
This brand identity is built in that image. A visual language of landscapes and earth — the terrain the ox walks. Mid-century modern poster art rendered through flat vector minimalism. Broad, solid, warm. Every surface is opaque. Every form is deliberate. Nothing is ornamental. Nothing is wasted.
The ox does not decorate. It works.
The ox stands on solid earth. UI elements should feel the same way — geological layers, overlapping, opaque, organic. Depth comes from stacking flat shapes, the way terrain stacks against the horizon. A whisper of shadow lifts panels from the ground — barely there, like the ox's shadow at noon. Never gradients or chrome. The interface is ground you stand on, not glass you look through.
An ox is not a peacock. The palette is seven values and absolutely nothing else. Deep indigo, slate, vermillion, clay, warm amber, beige, white. No grays. No tints. No opacity tricks that produce off-palette colors. The mid-tones — slate and clay — are the shadow and path, bridging the extremes so no element needs to fake its weight. The ox carries what it needs and nothing extra. Constraint is strength.
The ox is legible from any distance — broad shoulders, unmistakable silhouette. Every screen should have that same immediate readability: bold forms, clear hierarchy, a sense of place. Like a mid-century travel poster, the composition does the work. No filigree. No footnotes.
Five primary colors plus two mid-tones. The earth the ox walks, the sky it works under, the sun that warms its back — and the shadow and path beneath its hooves.
--indigo--slate--vermillion--clay--amber--beige--white--bg-primary: var(--beige); --bg-deep: var(--indigo); --bg-surface: var(--white); --text-primary: var(--indigo); --text-inverse: var(--beige); --text-muted: var(--slate); /* or var(--clay) on dark surfaces */ --text-faint: var(--clay); /* or var(--slate) on dark surfaces */ --accent-warm: var(--amber); --accent-hot: var(--vermillion);
Each cell shows the actual color assigned to that theme×token pair. I=indigo S=slate V=vermillion C=clay A=amber B=beige W=white.
| # | Name | bg | srf | ins | fld | onBg | onSrf | onIns | onAcc | head | acc | dng | bdr | bdrS | strp | btn | btnT | mut | fnt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | noon | W | W | B | B | I | I | I | W | V | V | V | S | I | V | I | W | S | C |
| 1 | early-afternoon | W | W | B | B | I | I | I | I | I | A | V | C | I | A | V | W | S | C |
| 2 | late-afternoon | B | W | B | W | I | I | I | I | I | A | V | S | I | A | A | I | S | C |
| 3 | golden-hour | B | W | B | W | I | I | I | I | I | A | V | S | I | A | V | W | S | C |
| 4 | sunset | B | I | W | W | I | B | I | I | V | A | V | S | V | A | V | W | C | S |
| 5 | dusk | I | W | B | W | B | I | I | I | A | A | V | S | A | V | V | W | S | C |
| 6 | twilight | I | I | W | W | B | B | I | I | A | A | V | S | A | A | V | W | C | S |
| 7 | evening | I | I | B | B | B | B | I | I | A | A | V | S | B | A | A | I | C | S |
| 8 | night | I | I | B | B | W | W | I | I | A | A | V | S | A | V | V | W | C | S |
| 9 | midnight | I | I | W | W | W | W | I | I | W | A | V | S | A | V | A | I | C | S |
| 10 | dawn | I | B | W | W | B | I | I | W | A | V | V | S | A | A | A | I | S | C |
| 11 | late-morning | W | B | W | W | I | I | I | W | I | V | V | S | I | I | A | I | S | C |
Three faces. Sturdy, legible, purposeful. Like the ox, each typeface has a clear job and does it without complaint.
<h1>ox<span style="font-size:.2em;vertical-align:2.5em;margin-left:.15em">tm</span> <span>playground</span></h1>
--step-0: clamp(1rem, 0.95rem + 0.25vw, 1.125rem); /* Body text */ --step-1: clamp(1.25rem, 1.15rem + 0.5vw, 1.5rem); /* Lead text, subheads */ --step-2: clamp(1.5rem, 1.3rem + 1vw, 2rem); /* Section subheads */ --step-3: clamp(2rem, 1.6rem + 2vw, 3rem); /* Section titles */ --step-4: clamp(2.5rem, 1.8rem + 3.5vw, 4.5rem); /* Page titles */ --step-5: clamp(3rem, 2rem + 5vw, 7rem); /* Hero / brand display */
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Outfit:wght@300;400;500;600&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
The ox's world. Broad valleys, layered ridgelines, the long walk from horizon to horizon. Every illustration is the terrain the ox inhabits — rendered in mid-century modern poster art through contemporary flat vector.
Flat vector minimalist landscape illustration. Strictly limited palette of exactly 5 colors: deep indigo (#2B2D7C), warm amber-orange (#F5A623), vermillion red-orange (#E8471B), white (#FFFFFF), and warm beige (#E8D5C0). No gradients, no outlines, no textures. All forms are smooth opaque silhouettes with organic curves. Simple geometric sun/moon circle. Pill-shaped white clouds. Layered overlapping shapes to create depth. Style of mid-century modern poster art meets contemporary flat vector illustration.
border-radius: 999px in CSS. Drifting, patient, like the ox itself.Depth is created only through overlapping opaque flat shapes. Darker values (indigo) recede; warmer values (amber, vermillion) advance. No gradients. No atmospheric perspective. No shadows. Honest depth — the kind you get from walking the land, not from tricks of light.
| Variable | Options |
|---|---|
| Time of day | Amber-dominant (day) vs. indigo-dominant (night/dusk) |
| Terrain type | Coastal, mountain, desert, valley, river, volcanic, plains, canyon, archipelago |
| Composition | Panoramic horizontal layers vs. vertical dramatic feature vs. close-up detail |
| Sun/moon | High center, low horizon, clipped by terrain, hidden behind clouds |
| Cloud behavior | Contained within frame vs. breaking/bleeding past the edge |
A sweeping coastal scene. Dark indigo ocean with a large curving wave in the foreground. Orange-amber sand dunes along the shore. A red-orange setting sun sits low on the horizon, partially clipped by a rolling hill. Two white pill-shaped clouds float above. Beige sky background.
A deep canyon viewed from above. Layered indigo shadow walls recede into depth. Amber and red-orange sunlit cliff faces in the foreground. A winding white river cuts through the canyon floor. Small circular orange sun high in an indigo sky. One cloud breaks the frame edge.
Jagged mountain peaks in indigo and red-orange, overlapping in layers. White snow caps on the tallest peaks. A large amber-orange sun behind the mountains casting the sky in warm tones. Smooth rolling indigo foothills in the foreground. Clouds drifting across the mid-ground.
Soft undulating hills layered front to back. Foreground hills in deep indigo, mid-ground in red-orange, background hills in amber. A white moon circle in the indigo sky. Three white clouds scattered across the composition. A sinuous dark river cutting between two hills.
A single tall volcanic peak in red-orange with an indigo base. Amber lava glow at the summit. Dark indigo sky. Layered indigo foothills at the base. Clouds wrapping around the peak, spilling beyond the frame. Small white moon in the upper corner.
Rounded tree canopy shapes in indigo and red-orange filling a valley. Amber sky above. A gap in the trees reveals a winding white path. Circular orange sun peeking through the canopy. Soft cloud shapes along the top edge.
| Attribute | Specification |
|---|---|
| Color strictness | "Use ONLY these 5 hex colors: #2B2D7C, #F5A623, #E8471B, #FFFFFF, #E8D5C0. No other colors." |
| No gradients | "Completely flat fills, no gradients, no shading, no soft shadows" |
| No outlines | "No strokes, no outlines, no borders on shapes" |
| Shape language | "Organic smooth curves, rounded silhouettes, no sharp corners except occasional geometric peaks" |
| Depth method | "Depth created only through overlapping opaque flat shapes, darker values recede" |
| Aspect ratio | Square (1:1) for tiles; widescreen for banners |
| Negative prompts | "No photorealism, no 3D rendering, no texture, no noise, no halftone, no line art, no watercolor, no pencil" |
The ox's gear is simple, functional, and built to last. No decorative stitching, no polished buckles. Every component earns its place through use. Flat, opaque, layered. Corners are gently rounded (--radius: 6px) — softened like river stones, not sharp-hewn like quarry blocks. Borders are thin (1px) and structural, not heavy. Panels float with a whisper of shadow (--shadow) to suggest depth without drama.
.btn {
font-family: 'Manrope', sans-serif;
font-weight: 600;
font-size: 0.9rem;
letter-spacing: 0.02em;
border: none;
border-radius: var(--radius);
cursor: pointer;
padding: 0.7em 1.8em;
transition: transform 0.2s;
}
.btn:hover { transform: translateY(-2px); }
.btn:active { transform: translateY(0); }
.ox-input {
font-family: 'Outfit', sans-serif;
font-size: 0.95rem;
padding: 0.7em 1em;
background: var(--white);
color: var(--indigo);
border: 1px solid var(--t-border);
border-radius: var(--radius);
outline: none;
transition: border-color 0.3s;
}
.ox-input:focus {
border-color: var(--amber);
}
.ox-input::placeholder {
color: var(--indigo);
opacity: 0.3;
}
.ox-card {
background: var(--white);
border: 1px solid var(--t-border);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: var(--space-md);
position: relative;
transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}
.ox-card:hover {
transform: translateY(-4px);
}
The ox sees the world as open terrain with features on the horizon. The interface follows: a broad field for conversation, a ridgeline of debug panels along the right edge. Borders are beige — dry earth between the layers.
+-------------------------------------------------------------+ | HEADER: ox™ | +------------------------------------------+------------------+ | | CONTEXT | | Chat | DEBUGGER | | (scrollable, max-width 720px) | | | +------------------+ | | TOOLS | | | PANEL | | [Status Indicator] +------------------+ | [Input Field] [Send] | REQUEST | | | LOG | +------------------------------------------+------------------+
| Token | Value | px | Usage |
|---|---|---|---|
--space-xs | 0.5rem | 8 | Tight gaps, inline spacing |
--space-sm | 1rem | 16 | Component padding, list gaps |
--space-md | 2rem | 32 | Card padding, grid gaps |
--space-lg | 4rem | 64 | Section padding |
--space-xl | 6rem | 96 | Major section spacing |
--space-2xl | 10rem | 160 | Hero/footer vertical padding |
1px): Subtle structural borders on panels and inputs. Worn paths between fields.1px): Active/focused borders, selected panel indicators. Where the sun falls.1px): Strong structural dividers, section breaks. The ridgeline.1px): Error state borders only. The brand mark — only when it matters.2px): Bottom accent band on panels. The thin stratum that tells you what the card carries.All bordered containers use border-radius: var(--radius) and box-shadow: var(--shadow) for gentle elevation.
The ox does not rush. Movement is tectonic — slow, weighted, inevitable. Things rise into place the way hills emerge at dawn. Things settle the way dust settles after the plow passes.
| Name | Value | Usage |
|---|---|---|
| Enter | cubic-bezier(0.22, 1, 0.36, 1) | Elements entering the viewport. The long approach. |
| Spring | cubic-bezier(0.34, 1.56, 0.64, 1) | Interactive feedback. The head toss. |
| Pulse | ease-in-out | Status indicators. The heartbeat. |
cubic-bezier(0.22, 1, 0.36, 1)cubic-bezier(0.34, 1.56, 0.64, 1)ease-in-outIcons are the brands and trail markers of the ox's world. Flat filled silhouettes — no strokes, no outlines. Shapes you can read from across the field.
| Icon Form | Meaning | Color(s) |
|---|---|---|
| Mountain peak | Navigation, peaks | Indigo, white snow cap |
| Sun (circle) | Active, running | Amber. The working day. |
| Moon (circle) | Idle, rest | White. The resting night. |
| Cloud (pill) | Pending, loading | White. Patience. |
| River (sinuous path) | Data flow, stream | White or beige. The current that carries. |
| Volcano | Error, alert | Vermillion + amber glow. Danger on the path. |
| Forest (ellipses) | Tools, collection | Indigo + vermillion. Resources gathered. |
| Hills (waves) | History, timeline | Amber. Ground already covered. |
48px, 32px, and 16px. Simplify at smaller sizes.The full harness. Every token the system needs, nothing it doesn't.
:root {
--indigo: #2B2D7C;
--slate: #6B6D8F;
--vermillion: #E8471B;
--clay: #B8926E;
--amber: #F5A623;
--beige: #E8D5C0;
--white: #FFFFFF;
--bg-primary: var(--beige);
--bg-deep: var(--indigo);
--bg-surface: var(--white);
--text-primary: var(--indigo);
--text-inverse: var(--beige);
--text-muted: var(--slate);
--text-faint: var(--clay);
--accent-warm: var(--amber);
--accent-hot: var(--vermillion);
}
:root {
--font-display: 'Manrope', sans-serif;
--font-body: 'Outfit', sans-serif;
--font-mono: 'IBM Plex Mono', monospace;
--step-0: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
--step-1: clamp(1.25rem, 1.15rem + 0.5vw, 1.5rem);
--step-2: clamp(1.5rem, 1.3rem + 1vw, 2rem);
--step-3: clamp(2rem, 1.6rem + 2vw, 3rem);
--step-4: clamp(2.5rem, 1.8rem + 3.5vw, 4.5rem);
--step-5: clamp(3rem, 2rem + 5vw, 7rem);
}
:root {
--space-xs: 0.5rem;
--space-sm: 1rem;
--space-md: 2rem;
--space-lg: 4rem;
--space-xl: 6rem;
--space-2xl: 10rem;
}
:root {
--radius: 6px;
--shadow: 0 1px 3px rgba(0,0,0,0.06);
}
:root {
--ease-enter: cubic-bezier(0.22, 1, 0.36, 1);
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
--ease-pulse: ease-in-out;
--duration-enter: 0.8s;
--duration-hover: 0.2s;
--duration-pulse: 1.2s;
--stagger-delay: 0.15s;
}