Loading Buffalo Projects
Loading Buffalo Projects
Design
How Buffalo Projects looks and moves, documented from the source. Every color, scale, and curve on this page is imported from the token files that ship the product, so this page cannot say one thing while the interface does another.
Point of view
Buffalo Projects is an inspectable work record, so the interface reads like telemetry from a healthy open-source ecosystem: dark by default, flat, editorial, and dense, with the builder's work carrying the energy. The dark canvas is cool paper — hue 220 at 2% saturation, never pure black. Brand blue #2f73f0 is the single chromatic accent and it is reserved: live, connected, active, selected, and done. Translucent "glass" material is allowed on floating chrome only — the auth nav pill and the owner toolbar — never on record or content surfaces. Motion communicates state change; it never implies background intelligence that is not happening. And missing builder content renders as nothing — never as system filler copy.
Color
Workspace neutrals
Canvas
App background — near-black, never pure black
#070809Surface
Workspace surface, one step above canvas
#0f1212Surface / secondary
Elevated surface for inspectable objects
#151818Text / primary
Near-white ink, never pure white
#f4f5f6Text / secondary
Metadata and supporting copy
#a2a5a6Text / tertiary
Labels and de-emphasized detail
#7e8182Hairline borders
Border / default
Default hairline on surfaces and cards
rgba(255, 255, 255, 0.063)Border / hover
Interactive hover state
rgba(255, 255, 255, 0.075)Border / strong
Emphasized edges
rgba(255, 255, 255, 0.094)Status — color is information
Success / live
Brand blue — live, connected, active, done
#2f73f0Warning
Muted repair amber, real status only
#d99126Error
Desaturated brick red, real status only
#c76060The semantic success channel is brand blue, not green. The retired green scale still exists in the primitives for compatibility; it is never chosen for new work.
Brand blue scale
50
100
200
300
400
500
600
700
800
900
950
blue.500 = #2f73f0 is the brand mark. blue.400 = #4c86f4 is lifted for legibility on near-black surfaces.
Typography
Geist Sans carries all interface and content. Geist Mono is seasoning, not the product personality — it appears only on code-shaped data: command signatures, API paths, file names, and literal machine-readable values. Never on headings, eyebrows, badges, or large numerals.
Scale
xs · 0.75remShipped work, inspectablesm · 0.875remShipped work, inspectablebase · 1remShipped work, inspectablelg · 1.125remShipped work, inspectablexl · 1.25remShipped work, inspectable2xl · 1.5remShipped work, inspectable3xl · 1.875remShipped work, inspectable4xl · 2.25remShipped work, inspectableDisplay scale — the headline voice
The Display primitive: Geist Sans at true hero/section scale, balanced breaks, tight leading, no negative tracking. Reserved for hero and band headlines (the join DROP question, the BECOME through-line) — never ordinary UI.
Display size="xl"What have you shipped in Buffalo?
Display size="lg"What have you shipped in Buffalo?
Display size="md"What have you shipped in Buffalo?
Eyebrow system
Work timeline
.eyebrow — section label, tertiary inkConnected sources
.eyebrow-strong — in-card label, secondary ink/b/handle/json
.eyebrow-mono — code/path keys onlyUppercase labels stay small and use the existing global utilities. Wide label tracking is tokenized at letterSpacing.label = 0.24em.
Radius
Corner radius stays consistent across shells, panels, rows, and controls. The named tokens below are CSS custom properties defined in src/styles/globals.css and consumed through Tailwind aliases (rounded-button, rounded-card, …). The corners rendered here come straight from the live variables.
--radius-badge
Badges and compact chips
--radius-button
Buttons and inline controls
--radius-input
Inputs, selects, text areas
--radius-card
Cards — inspectable objects
--radius-overlay
Menus, popovers, dialogs
--radius-shell
Page-level shells and panels
--radius-full
Pills and circular controls
Spacing
Spacing runs on a 4px base unit (8px grid) from src/tokens/primitives/spacing.ts. Density is the default — telemetry breathes through consistent rhythm, not through oversized padding. Cards sit at 16–24px internal padding; page sections step in 40–48px; hairline borders do the separating that whitespace would otherwise have to.
1 · 0.25rem2 · 0.5rem3 · 0.75rem4 · 1rem6 · 1.5rem8 · 2rem10 · 2.5rem12 · 3rem16 · 4remMotion
Motion follows Apple's fluid-interface timing: duration scales with spatial complexity, entrances decelerate hard, and there is no bounce by default — springs settle cleanly, with overshoot reserved for real success states. Nothing pulses, nothing loops; the demos below run once per replay.
Intent tokens
The five authored tokens, each as one live, replayable demo. Every demo is driven through MOTION.[name].resolve(reduce) (or emphasize), so the name you read maps to the motion you feel — and to exactly what ships.
Preview reduced motion (scoped to this block — not your OS)
enter
Content arrives — blur-in, decelerate, rest.
exit
Content leaves — faster, accelerate away.
move
Reposition / reflow on a value change.
settle
A value lands straight to its true place.
emphasize
TRUE SUCCESS ONLY — the single bouncy spring, rare.
emphasize · true success
The one bouncy spring, isolated. Fires on a vouch confirmed, a CLI/login connect, an invite accepted — nowhere else.
move · reorder
Reflow on a list reorder. Rows resettle into the new order with the move curve — no flicker, no jump.
Easing curves
out
cubic-bezier(0, 0, 0.58, 1)Entering elements — aggressive deceleration
in
cubic-bezier(0.42, 0, 1, 1)Elements leaving
inOut
cubic-bezier(0.42, 0, 0.58, 1)Repositioning
gentle
cubic-bezier(0.22, 1, 0.36, 1)Smooth arrival, no overshoot
spring
cubic-bezier(0.34, 1.56, 0.64, 1)Single-bounce approximation — use sparingly
Springs
default
stiffness 300 · damping 30 · mass 1Standard spring — settles cleanly, no bounce
gentle
stiffness 200 · damping 26 · mass 1Slower, for longer content
snappy
stiffness 400 · damping 35 · mass 0.8Gesture-driven interactions
bouncy
stiffness 400 · damping 22 · mass 1Subtle overshoot — success states only
Durations
microMicro interactions150mshoverHover states200msmodalExitModal exit — faster, ease-in200mscardCard and element entrances320msbutterPrimary page and section transitions320msmodalModal entrances320msEverything interactive lives between 150ms and 350ms. Loading states are deterministic and tied to real blocking work — never an ambient animation implying activity that is not happening.
Navigation is part of the motion language
The product navigates as one continuous surface. Page-level crossfades and shared elements (a project card grows into its work page hero) run on the browser's view-transition API, tuned to the same curves as component motion — and theme switches crossfade the whole record instead of hard-repainting. Public record sections settle in as the reader reaches them via scroll-driven animation: compositor-thread, zero JavaScript, and fully visible where the browser lacks support. All of it declared in src/styles/globals.css and src/lib/viewTransitions.ts.
Gestures
Four gestures, and only four. Each ties to a real state change, runs once per trigger, and settles — the product's whole feeling is caught, at rest, seen, never confetti. They are composed from the intent tokens above, so timing here is the timing that ships.
Preview reduced motion (scoped to these demos — not your OS)
Work enters the record, lands, and settles with weight. The trust marker confirms blue, then rests neutral. The signature gesture — relief, not celebration.
Add work to watch it land and settle.
Scattered pieces resolve into one record. Stats settle straight to their TRUE value — never counting up. The through-line lands last; one blue underline draws once. Pride, being seen.
A builder shipping steadily across hardware and the web.
Moving between surfaces, the project element persists and morphs — never reloads. Nothing is lost. Driven by one shared viewTransitionName on both states.
A low, living, honest sign the ecosystem is awake — driven by REAL activity, never faked. A single blue settle on a real write, never a pulse. (The field's intensity is the ambient half.)
The reveal exports in isolation: plain RevealItem pieces resolving in, then a standalone ThroughLine whose single blue underline draws once and rests.
One builder, shipping across the stack.
One of the three loops the doctrine allows: a spinner for GENUINE, deterministic blocking work only. Reduced motion holds it still. (The other two — the skeleton single-sweep and TheField/landing ambient — are shown elsewhere on this page.)
The synthesis session — WOW-register preview
These four gestures compose the onboarding reveal. Watch the full choreography at both widths and densities on the dedicated preview harness (no LLM calls — a critique surface).
Interaction
Buttons
Primary actions are neutral ink — near-white on dark, never blue. Hover and press states shift within the neutral ramp; disabled recedes without changing hue.
Focus
Keyboard focus is one of the few places brand blue appears as system affordance: a single 2px ring, no glow, no offset shadow. Tab through the controls above to see it.
Inspect on demand
AnchoredPopover is a top-layer panel the browser positions and dismisses — native popover semantics plus CSS anchor positioning, no JavaScript measurement. Overflow counts, field annotations, and cell details use it; menus with selection state stay on DropdownMenu.
Command
Kbd
A static mono micro-chip for keyboard hints — hairline, 11px, tabular-nums, tertiary ink. A single string is one chip (a combo like ⌘K); an array becomes a sequence joined by a quiet connector (“N then W”). It never receives focus and never animates; it only labels the shortcut that fires the same action elsewhere.
Command menu
A ⌘K palette built on cmdk: dark, hairline, fully keyboard-navigable, calm fade-and-settle motion (no scale bounce). It carries two row kinds — jump (go to X, via an onJump navigator the host supplies) and act (run an action) — and renders a Kbd hint per row. The rows above are a preset for this page; the primitive hardcodes no routes. Press ⌘K / Ctrl+K to open it, type to filter (try “send” or a non-match to see the empty state), and ↑↓ + Enter to run a row.
Lists
Row engine · calm register
Shipped the public record JSON twin
Machine-readable record now served at /b/[handle]/json.
Wired GitHub OAuth into the join flow
Repos convert to projects on first connect.
Calm (Read.cv): a dated entry, whitespace as the separator, no card or border. The title leads, metadata sits right.
Row engine · dense register
a1f9c2eAdd streamable-HTTP transport to the MCP server
7b3d0a4Reconcile the Row primitive onto one engine
Dense (Linear): leading glyph + mono id + title + inline chips + trailing meta, flush, with a hover band. Both registers are the same engine — only the recipe variant changes.
RowGroup · collapsible dense list
GitHub
Contributes commits, README, and deployment links.
Live URL
Last fetch failed — repair permissions to keep it fresh.
A label + count + chevron header that folds a stack of Rows open and shut. Calm open/close, keyboard-accessible, instant under reduced-motion. Distinct from Section, which is a page band.
Presets · proof workspace
Civic signal map for neighborhood grants
Maps grant eligibility, documentation gaps, and reviewer-ready claims.
3 sources
2h ago
github.com/maya/civic-signal-map
README, commits, and live deployment detected.
GitHub
Repository source contributes commits and deployment links.
Reviewer opened the project twice but didn't click the repo
Move the strongest source above the fold and draft a shorter send note.
Presets · activity, actions, milestones, opportunities
Hackathon · University at Buffalo · deadline Sep 30
Layout
tones · panel · raised · dark · media · bare
Depth comes from a soft layered shadow plus an inset top highlight (the object register), never a hairline border. The dark tile is the bold inverted object — the page's visual signature — built from the system's own inversion tokens so it stays a bold ink slab in both themes. Color comes from contrast, never a gradient.
panel
The standard inspectable tile.
raised
The strongest object sits higher.
dark
Bold inverted ink — the agent-readable twin.
media
Artifact fills it; no inner padding.
spans + tall · rhythm from columns, not masonry
Rhythm comes from column spans, not row-span masonry (which tears the moment one tile's real content runs taller than its neighbour). A tall tile earns real vertical room for the monumental focal.
span 4 · tall — the monumental focal
One thing looms while the rest stays quiet beneath it.
span 2
span 1
span 1
interactive · hover-lift, one rationed-blue ring, active press
When the whole tile is a target it gains the shared response: it rises and its shadow deepens on hover, lands the one rationed-blue focus-visible ring with an offset on keyboard focus, and depresses on press — then settles on a clean ease (no bounce, no loop, reduced-motion-guarded). Tab through these to see the ring.
Interactive tile
Hover lifts · tab rings · press depresses.
Interactive · raised
The same response, a touch higher at rest.
The keystone object
featured · the one monumental focal
Featured work
A self-filling work record a builder can send — and that an AI agent can read and write.
Next.js · React 19 · MCP · Design systems
12
Sources
Work record
Shipped v0.4 — public record pages2d agoServer-rendered /b/[handle] with the JSON twin.Release · you · GitHubWire expand-in-place disclosure4d agoCommit · your agent · MCPstandard · compact-row · embedded
Commits and releases aggregate as milestones, idempotent, no duplicates.
A machine-readable endpoint your co-pilot can read and write.
GitHub OAuth connect
Connect once; the record fills itself.
CLI: buffalo log
Log a milestone from the terminal.
state matrix · rest / interactive / disabled / loading / empty / error
Hover and tab the interactive tile to see the lift, the rationed-blue focus ring, and the momentary active press — all settling, never looping, all reduced-motion-guarded. Disabled recedes without changing hue; loading reserves the shape; empty and error are honest, never broken boxes.
The calm default. No motion until the pointer or keyboard arrives.
Lifts on hover, rings on focus, depresses on press — then settles.
Recedes to 55% and stops responding — no hue shift, no lift.
No work here yet
The caller passes its own monumental invitation — never system filler.
Source unreachable
We couldn't reach this source. It stays listed so the record never silently drops work.
The hub header
The hub header treats the record as one object — identity over an at-a-glance counter strip — so even a one-project record fills the frame with substance instead of a lone band over dead space. Two states below: a populated record and the graduate-from-empty single-project case.
populated · identity + counter strip + actions
Buffalo Projects
Jacob Rhinehart · builder · Buffalo
Building the default builder layer for Western New York.
graduating from empty · one project, still substantial
Buffalo Projects
Alan Soto · builder · Buffalo
Product surfaces
MatchCard · one routed opportunity
University at Buffalo · Buffalo, NY
Why you
A matched opportunity built around one hero action — apply with your record. Beta-framed, freshness-stamped, and the gap is shown honestly (neutral, never red).
ProvenanceReadiness · how much is backed
9 of 12 entries are sourced · 2 witnessed
Not a profile-completion percentage and not a quality score — warm recognition of provenance (sourced, dated, witnessed). No meter, no fill bar. A single rationed blue check appears only once every entry is sourced, an earned state.
VelocityGraph · work cadence over time
Work logged over the last eight weeks
A flat contribution heatmap — time is the spine. Gated on a real cadence (≥5 active days) so a sparse record never leads with empty squares. No glow, no motion; hover/focus is a quiet ring, never a scale bounce.
SendKit · prepared to share
Strongest link
buffaloprojects.com/b/maya/civic-signal-map
Snippet
Built a live civic-signal map for Buffalo — deployed, sourced, and witnessed by a MakeOpenSource mentor.
Vouch ask
Ask Alan to confirm the pantry-intake rebuild.
Signal to watch
Whether they open the record link (not just reply).
The share surface — strongest link, a ready snippet, and the one signal worth watching. Assembled from the record, never invented.
TrustGapCard · one honest gap to repair
Trust gap
Gap
Your civic-signal map is described but has no repo, live URL, or doc attached.
Why it matters
A reviewer can't inspect the work — the claim stands on its own without evidence behind it.
Reviewer impact
Most reviewers skip claims they can't verify in one click.
Names a real gap and why it matters — never a judgment of the work itself, never a score. One thing to fix, stated plainly.
PublicProofTimeline · the inspectable path
Work record
Recent work, milestones, sources, and reviewer questions in one inspectable path.
civic-signal-map
Public repo · 41 commits · README.
Live deployment
civic-signal-map.vercel.app
What data sources feed the map?
AnsweredBuffalo OpenData plus two civic RSS feeds.
The reviewer-facing path — strongest artifact, milestones, sources, and answered questions in one inspectable order.
OwnerVouchPanel · the builder's private view
Vouches
People who watched you build, on the record.
Closes the vouch loop for the builder: pending requests and completed vouches (who, how they know you, what they witnessed). Owner-only, so one honest next step on empty is allowed.
Inputs
One control line (h-9), one hairline, one blue focus ring. Tab through the fields to see the ring; the error state re-tints the ring to brick red without removing it. Disabled recedes without changing hue.
Input
Rest / hover
Focus
With label + helper
Shown on your public record.
Disabled
Error
That handle is already taken.
With icon
Textarea
Rest
Focus
With label + helper
Optional context for this entry.
Disabled
Error
Summary is required.
Select
Rest / hover — open me
Selected value + check
Placeholder (empty)
Disabled
Error
Pick a project to log work against.
Switch
Off (neutral track)
On (blue track)
Focus — tab in for the ring
Disabled off
Disabled on
On the control line
DropField
One field that takes a pasted link/description, a dragged-in file, and a file picker — the join DROP front door. It reuses Input's field chrome, so the focus ring and tokens are identical. The source marker beneath is an honest client-side text read (never fake activity); Enter submits, Shift+Enter keeps a newline. Type a URL to watch the marker resolve and the Add button go primary.
Rest — empty, paste + drop + pick enabled
With a detected source (live marker, primary submit)
GitHub detected — Repo signal detected. Buffalo Projects can turn this into inspectable work.
Loading — deterministic, real blocking work
GitHub detected — Repo signal detected. Buffalo Projects can turn this into inspectable work.
Error — ring re-tints to brick red, never removed
Description detected — Description detected. This is enough to start without a link.
Couldn't read that. Try a link or a short description.
Disabled — recedes without changing hue
Description detected — Description detected. This is enough to start without a link.
The send
The signature send. One control, two shapes from the same morph + ring + disabled register: the circular milled disc (no label) and a worded pill (with a label, e.g. DropField's “Add”). The confirm beat is driven by caughtKey — click an enabled tile to bump it and watch the arrow flip to a check as one blue ring blooms and settles. Blue stays rationed to real catches.
Circular signature send — click to catch
Worded pill — same morph + ring
Disabled — honest mute, not a grey box
Disabled pill
Loading — pauses the confirm beat semantics
Feedback & utility
Toaster · success / error / info
Bottom-right, hairline card, auto-dismiss (~4s). The surface stays neutral; only the leading icon tints — blue for done, red for error, neutral for info. No pulse, no loop: it marks one event, then leaves.
Skeleton · single sweep, static under reduced motion
One sheen sweep that runs once and rests — not an ambient loop. Under `prefers-reduced-motion` the sweep is omitted entirely and the placeholder is a flat, tinted block. Tints come from `--skeleton-base` / `--skeleton-sheen`.
EmptyState · one honest next step / error
No projects yet
Paste a repo, a live URL, or a description — your record starts with one.
Couldn't load opportunities
The matcher hit an error. Retry in a moment.
Owner surfaces get exactly one honest next step (a link or an action), never filler prose. Public surfaces render nothing instead — the no-filler rule lives at the call site. `error` re-tints the frame to the destructive channel without changing the layout.
Section · page band (distinct from RowGroup)
A layout band: reading-width wrapper + page rhythm, separated by whitespace, no border or fill. Intentionally not a `RowGroup` (which groups list rows) and not a `Card` (a single inspectable object).
Filter · selection chips (calm, no scale)
Selection routes through an interactive chip: a real button with `aria-pressed`, color-only motion (no hover/press scale — §1). Selected = neutral-ink fill; the quiet tone keeps a hairline instead.
Rail · persistent side context
A flat hairline aside that stacks `RailSection` groups of `RailItem` rows. The active item carries a single blue (success-channel) border — blue means selected/active, rationed. Calm color transitions only.
AnchoredPopover · inspect on demand
A top-layer panel the browser positions and dismisses — native popover semantics (light dismiss + Esc) plus CSS anchor positioning, zero JS measurement. For overflow counts and field details; menus with selection state stay on DropdownMenu.
Drawer · mobile sheet
The mobile sheet: hairline top edge, named `rounded-shell` corner, safe-area padding, swipe-to-dismiss. vaul owns the focus trap and scroll lock; the global reduced-motion rule clamps the slide to instant.
Chip · interactive token (selectable / removable)
The interactive half of the Badge/Chip boundary. Selection is the primary state — a single rationed blue fill (`selected`), rendered as a real button with `aria-pressed`. Removable tags keep a nested dismiss target. Motion is color-only; the old scale entrance is gone.
StatusTag · calm (default) vs pill emphasis
Default is `calm` — the dot carries the tone color, the label stays neutral (the Vercel/Linear deploy-list idiom). `emphasis="pill"` is the louder bordered/tinted form, reserved for places status must shout. Static dot only; no pulse.
Surfaces & shell
Surface · flat base, border-stepped elevation
panel
The default hairline panel.
raised
One step up — a stronger border, no shadow.
accent
A quiet fill tint for grouping.
Surfaces separate by hairline, never by box-shadow, and never by glass. Elevation is a border step. Glass is reserved for floating chrome (below).
Card · the inspectable object + its parts
Project
The self-filling record — agents read and write a builder's shipped work over the Model Context Protocol.
Proof
Strongest hairline — the verified, vouched-for object reads as the most authoritative in a list by border weight, not shadow.
interactive — hover/focus darkens the background, no lift, no press-scale.
note — borderless, muted, an aside.
Card is a Surface preset for a single object (project, work entry, vouch). No glass, no card-in-card. Motion stays calm — color, border, opacity only.
MetricTile · true-value stat, tabular
PageHeader · eyebrow + title + actions
Buffalo Projects
The page you send — it fills itself as you ship.
PageShell · Rail + PageHeader + content, responsive switch built in
Workspace
Rail on md+, header above content, mobile dock below.
Routes drop content here; the shell owns the frame.
A raised Surface.
One canonical frame. Pass nav and the rail shows on md+ with the content beside it; omit it and PageShell keeps its legacy centered gutter for a layout-owned sidebar.
Material · floating chrome (the only glass)
Glass — backdrop-blur on a translucent fill — lives only here, on chrome that floats over content (the owner toolbar, the auth nav pill, the docks below). Never on a Card or a record surface.
SourceStatusDock · honest source state
Real inputs only — an unconnected source never reads as live.
MCP
ConnectedYour agent can read and write work.
GitHub
AvailableConnect to feed commits as work.
CLI
SoonLocal pushes queue from the terminal.
MobileActionDock · thumb zone, ≥44px, safe-area inset (mobile only)
The real dock is fixed + md:hidden; here it renders inline (non-fixed) at full width so its composition is visible on desktop. On a phone it sits in the thumb zone, lifted clear of the home indicator.
Profile themes
Builders pick the tone of their public record from a fixed set of pre-designed themes. Every option stays inside the system: dark family only, brand blue identical across all of them, no gradients. Themes apply as scoped CSS-variable overrides on the profile wrapper, so a theme never leaks into the rest of the app — and the page cannot be made ugly.
Midnightdefault
#151818
Graphite
#171717
Indigo
#121720
Components
Interface work composes the primitives exported from src/components/ui-next/index.ts. New primitives are exported from the same barrel. The names below are type-checked against the real exports, so the inventory cannot list a component that no longer exists.
Buttons + inputs
ActionButton · Button · CatchButton · DropField · Input · Select · Textarea · Switch
Surfaces + layout
Surface · PageShell · PageHeader · MetricTile · Section · Display · Bento · BentoTile · Card · CardButton · CardLink · CardHeader · CardTitle · CardDescription · CardContent · CardFooter · CardMeta · ChoiceCard · MaterialLayer · MobileActionDock · SourceStatusDock · Rail · RailItem · RailSection
The record object
RecordCard · RecordHero
Status + chips + rows
Badge · Chip · SkillChip · TagChip · AvatarChip · Filter · FilterGroup · StatusDot · StatBadge · StatusTag · Row · RowGroup · OpportunityRow · ActivityRow · ActionItemRow · MilestoneRow · ProjectRow · EvidenceRow · SourceHealthRow · SignalNextAction · VelocityGraph
Overlays + menus
AnchoredPopover · Drawer · ConfirmDialog · DropdownMenu · DropdownMenuTrigger · DropdownMenuContent · DropdownMenuItem · DropdownMenuSeparator
Command
CommandMenu · CommandRoot
Trust + public record
ReadinessGate · SendKit · DefaultSendKitActions · TrustGapCard · MatchCard · ProvenanceReadiness · OwnerVouchPanel · FeaturedProjectProof · PublicProjectHero · PublicProofTimeline · VouchBlock
Loading + system
EmptyState · Skeleton · Toaster
Retired — do not resurrect
GlassCard · Composer · ProjectComposer · Gravity · IconGrid · SpotlightCard · HexagonPattern · OperatorSurfaces · WorkspaceShell
Blocklist
The fastest way to look like every AI-generated dark dashboard is to accept the defaults. These are standing vetoes, from the doctrine in DESIGN.md.
Source
DESIGN.mdDoctrine — judgment, rules, and vetoesapps/web/src/tokens/primitives + semanticColor, typography, spacing, and effect tokensapps/web/src/lib/animations.tsEasing curves, springs, durations, variantsapps/web/src/constants/profileThemes.tsCurated public-record themesapps/web/src/components/ui-next/index.tsComponent inventoryapps/web/src/styles/globals.cssCSS variables, radii, eyebrow utilities