03 · Brand
The name is the logo.
ShiftOps carries no symbol. The identity is the wordmark — one word, two weights, set in the same Geist the product uses. Everything louder than that belongs to the gradients and the photography.
The wordmark
One word, two weights.
The identity is text: "Shift" at weight 600 in
--fg, "Ops" at weight 400 in
--fg-muted, set in Geist with −0.02em
tracking, no space between. The weight step and the muted "Ops" are
the entire logo. There is no symbol — the three-bar tile was never
approved as one and lives only as the favicon below.
<span style="font-size:20px; letter-spacing:-0.02em;"> <span style="font-weight:600; color:var(--fg);">Shift</span> <span style="font-weight:400; color:var(--fg-muted);">Ops</span> </span> /* Spec — this is the whole logo: type Geist (or the tokens.css sans fallback stack) weights Shift 600 · Ops 400 color Shift var(--fg) · Ops var(--fg-muted) — it inverts with the theme tracking -0.02em, no space between the words clearspace the height of the "S", all sides minimum 14px — below that the weight contrast stops reading on photos/gradients: over a scrim only — Shift #fff, Ops rgba(255,255,255,0.7) */
Usage
Hard to misuse, on purpose.
The wordmark carries no symbol, no gradient, no hue. Two weights of one word survive a badge printer, a broadcast lower third, and a 20px nav without ever needing a redraw.
- Set it in Geist — weights 600 + 400, tracking −0.02em, no space
- Keep "Ops" one step quieter:
--fg-muted, never a hue - Keep clearspace equal to the height of the "S" on all sides
- Let it invert with the theme through the ink tokens
- On photos or gradients, set it white on a scrim — Shift #fff, Ops at 70% white
- Add a symbol, icon, or container — the favicon tile is not a logo
- Recolor "Ops" to a hue — not violet, not ok-green, not a gradient
- Set it in another typeface, one weight, all-caps, or with a space ("Shift Ops")
- Track it out, stretch it, outline it, or add a drop shadow
- Render it below 14px — at that size use plain body text
Favicon & app icon
A tile for the tab. Not a logo.
Browser tabs and home screens demand a square, and the wordmark isn't one. This three-bar tile — a schedule filling — exists for that slot only. It never appears in product or marketing chrome, decks, documents, or print; wherever a layout seems to want a mark, use the wordmark instead.
<!-- favicon / app-icon export ONLY — never in page chrome --> <svg viewBox="0 0 24 24" fill="none"> <rect width="24" height="24" rx="6" fill="#0a0a0a"/> <rect x="6" y="6.5" width="12" height="3" rx="1.5" fill="#fff"/> <rect x="6" y="10.5" width="12" height="3" rx="1.5" fill="#fff" opacity="0.7"/> <rect x="6" y="14.5" width="8" height="3" rx="1.5" fill="#fff" opacity="0.45"/> </svg>
Editorial gradients
Where the color actually lives.
Stories, releases, and update cards carry their color
as grainy linear gradients — dusk-toned, three stops, always worn with
.grain. These six recipes are lifted
directly from the marketing site's blog and release tiles. Click a
recipe to copy its CSS.
The recipe: three stops,
130–170° angle, mid-saturation start, near-black or dusty finish. New
gradients should feel like event light — dusk over a course, sodium
lamps at load-in — never like candy. Always add
.grain; captions on gradients are white mono
at 85% opacity.
Photography
Real labor, shot dark.
Photography is the brand's only permitted spectacle, and it earns it by being true: real crews, real venues, working light. Dark, cinematic frames — floodlit gates, dawn load-ins, concourse sodium glow. No stock smiles, no laptops in coffee shops, nobody pointing at a screen.
- Real workers mid-task: rigging, pouring, scanning, waving a cart through
- Low ambient light, one strong practical source, deep shadow detail
- Always inside a 28px-radius cutout with a bottom scrim and white caption
- Captions name the place and hour: "Gate A, 5:40 a.m."
- Full-bleed photography — the frame is part of the system
- Bright, evenly-lit stock imagery or posed team shots
- Text or logos placed on the image without a scrim
- Color-graded filters that fight the token palette
Standing in for a photograph
Same frame, same scrim, same caption discipline
Concourse, T-10 minutes to doors
Every caption is a fact from the floor