Claudecore

Lucian Labs look E — the machine and the widgets. Shipped as ll-shop, elijahlucian.ca.

For agents

Paste this into the session that's building the UI. This look is under iteration — the widget is the reference where the spec is silent.

Build this UI in the Lucian Labs "Claudecore" look.
Read, in order:
  https://lucianlabs.ca/branding/AGENT.md      (how to pick + what never to do)
  https://lucianlabs.ca/branding/claudecore.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 claudecore.css directly; on any other
platform derive from the tokens and the UX contract.
Motion is transform + opacity only, on the named spring and ease-in.
The reference implementation is https://cdn.lucianlabs.ca/scripts/ll-shop.js.

The machine, at scale and as shipped

Left: the shop panel at its real 176px. Right: the same parts at page scale. The orb is what the panel becomes when closed — click either orb to see it pulse.

Lucian Labs shop
Choppa
Chop any sound. Play it like an instrument.
$4.99 — iOS
Waveloop
yesterday
shipped the genie. curved this time. #devlog
buy something.
support this app <3
the orb, and the badges it grew out of

The widget — the radio's sketch

elijahlucian.ca's radio. A black canvas in a grey frame where the song builds a landscape as it plays. Here a timer stands in for the track; the hue is seeded from the title.

late night loops [3/12] · tidewater_07.wav

Palette

--bg
#060a10
--bg-deep
#000000
--panel
#0a0a0a
--line
#2a4a70 · 1.5px
--line-2
#1a2c44
--line-sketch
#303030 · 2px
--ink
#dfe8f2
--muted
#9fb2c8
--label
#5d8fc9
--accent
#4fc3f7
--accent-2
#ffa40a
--gold-a → --gold-b
#d4a843 → #e8842a
--orb
#6db3f2 · #397fd9 · #1e5aa8
--good
#1bbb41
--bad
#ff6b6b
--radius
8px panels · 4px inside

The three rules

Type ramp

Heading 01

Heading 02

Heading 03

Lucian Labs shop
label / tab / overline

Body is Finlandica at 300, 1rem, 1.5 line-height. One family does display and body — weight and tracking separate chrome from copy, not face.

Small copy, muted, 0.85rem.

[3/12] · 03:41 · $4.99 — iOS · 128 bpm

Space Mono is the mono — inherited from elijahlucian.ca, the look's one exception to the house Inconsolata rule.

Buttons — blue speaks, gold sells

Hover nudges 2px up on the spring and blooms the shadow. Press scales to 0.96. Focus is a 2px sky ring. The gradient on the primary is the look's named exception — two stops, 135°, only on the goods and the one CTA.

States in motion

Tap through them. Arrivals ride the spring and retreats take ease-in, the label and the state land together, and the sky bar glides to the chosen tab.

Form & status

idle playing dropped
tracklenbpm
tidewater_0703:4196
seal_dive01:18128
radio_edit00:09

Voice

write

buy something.
support this app <3
hire the guy who built these ↗
no posts yet.
couldn't load posts.
[3/12] · random · shuffle

never

Shop Now!
Support Us ❤️
Hire Me Today
You haven't posted anything yet!
Oops! Something went wrong.
Track 3 of 12

Transition

A look change moves the way the look you are going into moves. This is how a swap into Claudecore arrives.

kinddurationcurve
curve600ms · moveemphasised

Mood's wipe, and the default: any look without a transition of its own arrives this way. A sinusoidal front sweeps across at a freshly randomised angle, so no two swaps look alike.

Frames: three polygon frames at sweep positions −260, 0, +260, the phase advancing so the curve travels. Reduced motion: no sweep — the 600ms colour tween, so the choice still lands.

Spec: skin-swap.md · source of truth LL_LOOKS['claudecore'].transition in /v2/ll-brand.js.