Foundations
Palette
Light
Text
Aa
Primary
#111
Aa
Secondary
rgba(0,0,0,0.4)
Aa
Journal
rgba(0,0,0,0.7)
Aa
Muted
rgba(0,0,0,0.35)
Background
Primary
#fdfdfc
Surface
#f7f7f6
Elevated
#fff
Skeleton
#ececec
Accent
Red
#c03030
Star
#a58828
Heart
#dc2a4e
Success
#248c3c
Destructive
#e5342c
Border
Default
rgba(0,0,0,0.08)
Separator
rgba(0,0,0,0.06)
Subtle
rgba(0,0,0,0.04)
Dark
Text
Aa
Primary
#f5f5f5
Aa
Secondary
rgba(255,255,255,0.4)
Aa
Journal
rgba(255,255,255,0.65)
Aa
Muted
rgba(255,255,255,0.35)
Background
Primary
#121110
Surface
#1b1a19
Elevated
#201f1e
Skeleton
#1d1c1b
Accent
Red
#d94545
Star
#c4993a
Heart
#ff375f
Success
#30d158
Destructive
#ff453a
Border
Default
rgba(255,255,255,0.08)
Separator
rgba(255,255,255,0.06)
Subtle
rgba(255,255,255,0.04)

Note: Profile mockup uses --c- prefixed tokens (e.g. --c-follow-border, --c-gear-stroke). Foundations uses longer names (e.g. --follow-border, --icon-gear). Both conventions are documented — do not rename.

Type Scale
Display — Raptor V2 700 / 28px / -0.3px
Welcome to not'd
Large Title — Raptor V2 700 / 26px / -0.4px
elan
Title — Raptor V2 600 / 20px / -0.2px
To Pimp a Butterfly
Headline — Raptor V2 600 / 17px / 0
This account is private
Name — Raptor V2 700 / 15px / 0
Albums for Night Driving
Body — Inter 460 / 15px
This album changed everything for me. The way Kendrick weaves jazz, funk, and spoken word into something that feels both monumental and deeply personal.
Callout — Inter 500 / 14px
Follow · Edit Profile · Log
Subhead — Inter 400 / 13px
Kate Bush · 2d · late-night, neon, alone
Desc — Inter 460 / 13px
enjoys listening to albums start-to-finish
Data — Inter 400 / 11px / tabular-nums
8 albums · 47 albums · 284 followers
Caption — Raptor V2 600 / 11px / uppercase
Current Rotation · Recent Logs · Lists
Scale
xxs
2
xs
4
sm
8
md
12
lg
16
xl
24
xxl
32
xxxl
48
Border Radii
none
0
xxs
3
xs
4
md
10
lg
14
xl
20
full
ALBUM ART RADIUS — TIERED BY SIZE
Small · 3px
≤64px
Medium · 4px
65–120px
Large · 6px
120px+
Grid · 0px
zero-gap
Radius tapers proportionally: ~5% at small, ~4% at medium, ~2% at large. Shelf items (62–94px) use small tier (3px) — tighter radius reinforces physical sleeve feel under perspective transforms.
Primitives
Star Rating — Display
★★★★★ 5 stars — filled only, no empty slots
★★★★ 4 stars — no trailing ☆
★★★★ 4.5 stars — CSS clip half star, not ½ literal
Section Header — with rule, label left, action right
Current Rotation
Manage
Follow Button — Primary CTA (filled) vs Secondary States (outlined)
Section Header Actions — subordinate links on rule-through line
Recent Logs
All logs
Current Rotation
Manage
Log Entry Row — album art + title/stars, artist/time, journal excerpt
Hounds of Love
★★★★★
Kate Bush · 2d
A perfect album, front to back. The way side two builds from dream into urgency is something I think about constantly…
List Text Hierarchy — 3-tier text stack (title, description, count)
Albums for Night Driving
late-night, neon, alone
8 albums
List Coverflow Art — 3-cover perspective stack (72x48 container)
Light
Dark
Ghost Shelf — rotation empty state (shelf-a-5 pyramid, opaque fills)
Light
Dark
Privacy Wall — centered private profile gate
This account is private
Follow to see their logs, lists, and rotation.
Light
This account is private
Follow to see their logs, lists, and rotation.
Dark
Error State — profile load failure with retry
Couldn't load profile
Retry
Light
Couldn't load profile
Retry
Dark
Other-User Empty — no content yet, no decoration
No albums yet
Light
No albums yet
Dark
Tab Bar Icons — 24px, outline (inactive) / filled (active)
Inactive
Active
Inactive
Active
Inactive
Active
Light
Inactive
Active
Inactive
Active
Inactive
Active
Dark
Morphing Icons — 3-Line System

Every icon is exactly 3 <line> elements in a 14×14 viewBox. Icons morph by interpolating 12 numbers (3 lines × 4 coordinates). Unused lines collapse to the center point (7,7).

Inspired by Benji Taylor. In React Native, each coordinate is a Reanimated shared value animated with withSpring.

All Icons — tap any to morph the preview
Morph Preview
Light
Dark
plus
Coordinate Map — all icons are 3 lines in a 14×14 viewBox
Icon L1 x1,y1 L1 x2,y2 L2 x1,y1 L2 x2,y2 L3 x1,y1 L3 x2,y2 Rot
Search Icon Morph — circle+path system

Magnifying glass ↔ person silhouette. 220ms damped spring (subtle overshoot) on circle attributes; the small handle/legs piece can't path-interpolate (different topologies: line vs arc), so it crossfades inside the spring window. Triggered by @ prefix in search input. Tap tiles or type in pills below.

search
person
Light
Dark
search
Type here — try @
Type here — try @
Input Icon Placeholder
EmptyMagnifying glassSearch albums...
“radio...”Magnifying glass(hidden)
“@sar...”Person silhouette(hidden)
ClearedMagnifying glassSearch albums...
Tab Transitions — Directional Slide + Header Morph

Feed lives left, Search in the middle, Profile lives right. Tapping between them slides directionally while the header transforms: avatar scales (or collapses into the search pill), text cross-fades, action icon morphs via the 3-line system.

Tap any tab icon to trigger the transition. Feed→Search: avatar collapses, pill expands from left. Search→Profile: pill collapses, avatar grows.

Interactive Demo — tap tabs to transition
9:41
E
not'd
elan
47 albums · 284 followers · 163 following
enjoys listening to albums start-to-finish
Light
9:41
E
not'd
elan
47 albums · 284 followers · 163 following
enjoys listening to albums start-to-finish
Dark
Timing Specification — values for React Native translation
PropertyDurationCurveRN Equivalent
Content slide (translateX)220mssnapwithTiming(x, { duration: 220 })
Header text exit ("not'd")120mspower1.outwithTiming, asymmetric (fast exit)
Header text enter (name/stats/bio)140mssnapwithSpring, staggered 50ms
Avatar scale220mssnapwithTiming on layout props
Action icon morph (coords)400msdamped springwithSpring(SPRING_SMOOTH)
Tab icon fill/outline swap150mspower1.inOutwithTiming, immediate

Content slide uses timing (not spring) to avoid overshoot revealing empty space at content edges. Icon morph uses spring for physicality. Tab icon state change is near-instant — acknowledge the tap before the transition begins.

Tab Transitions — Empty Profile State

Same transition, but landing on a first-time user’s empty profile. Ghost scaffolding is static — no entrance animation.

Tap any tab icon to trigger the transition. The empty profile shows placeholder slots for rotation, logs, and albums.

Interactive Demo — tap tabs to transition
9:41
not'd
newuser
0 albums · 0 followers · 0 following
Current Rotation
Recent Logs
Lists
Albums
Light — Empty
9:41
not'd
newuser
0 albums · 0 followers · 0 following
Current Rotation
Recent Logs
Lists
Albums
Dark — Empty