An LED readout bolted to a steel box. One number rules the screen and a binary state says whether it's moving. Shipped in Time Warrior — web and the SwiftUI menu-bar app share this token set.
Paste this into the session that's building the UI. Do not retype token values from memory — link or vendor the stylesheet.
Build this UI in the Lucian Labs "Punch Clock" look. Read, in order: https://lucianlabs.ca/branding/AGENT.md (how to pick + what never to do) https://lucianlabs.ca/branding/punch-clock.md (this look) https://lucianlabs.ca/branding/UX.md (how it must behave) Take tokens from https://lucianlabs.ca/branding/brands.json — never retype them. On web you may link punch-clock.css directly; on any other platform derive from the tokens and the UX contract. Implement all seven interaction states, focus included, and use only the five named durations. Check your output against the AGENT.md ban list and the UX.md ship checklist before you report the work done.
act, read, then detail. Never lead with nav or explanation.
Both are dark, square-cornered, and set numerals in Micro 5. The line matters.
| console | punch clock | |
|---|---|---|
| borders | 1px hairline | 2px, always |
| panels | translucent + blur | flat and opaque |
| ground | radial wash | flat #0e0e10 |
| body face | system sans | Finlandica |
| signals | blue, amber when armed | green/red stoplight, cyan focus |
| buttons | outlined, tinted | solid fill, near-black label |
| a view is | many panels, none dominant | one huge figure |
You are operating something in Console. You are watching a number here.
tap through them. the fill flips to the new state, the label arrives with it, selection travels, a confirmation returns home.
| client | in | out | hours | usd |
|---|---|---|---|---|
| nduro | 09:00 | 12:15 | 3.25 | $260 |
| lucianlabs | 13:00 | 14:30 | 1.50 | $120 |
| total | 4.75 | $380 | ||
Body sans numerals read as a database. Micro 5 reads as a readout. Prose and labels stay Finlandica and never take the display face.
A look change moves the way the look you are going into moves. This is how a swap into Punch Clock arrives.
| kind | duration | curve |
|---|---|---|
glitch | 300ms · settle | steps(1, end) per cut |
Punch Clock punches in: stepped cuts through random slices, out of order, then it lands — the orb's glitch turned into an arrival. The shortest transition in the kit, because a punch is instant. The cuts re-roll every time.
Frames: seven inset() frames — empty, two random bands, the top half, a band, nearly all, all — each holding then jumping. Reduced motion: no sweep — the 600ms colour tween, so the choice still lands.
Spec: skin-swap.md · source of truth LL_LOOKS['punch-clock'].transition in /v2/ll-brand.js.
punch in
export csv
total earned
yours to keep
$1,240.00 · 3.25 h · 30%
Start Tracking Now
Export Your Data
Total Earnings 💰
You're doing great!
Let's get started!
The SwiftUI port at time-warrior/apps/mac/…/Theme.swift mirrors these tokens — panel(), field(), BrandButtonStyle, PulseSquare, Tile. Change a token here, change it there. Known drift: --dim is #666 on web and #cfcfd6 in Theme.swift; the web value is canonical until that's reconciled.