Card with corner markers
The default card — translucent white on backdrop blur, pixel-corner markers, and subtle SVG noise. Used for hero info, project detail, and standard page bodies.
The Labyrica visual language is grayscale, light-dominant, and built from precise primitives. This page is the live reference — every token and component below uses the styles shipped with the site.
Claude, ChatGPT, or Cursor to generate Labyrica-matched UI.
Five rules. If a decision conflicts with one, the rule wins. Memorize these and most design questions answer themselves.
Black, white, and neutral grays. Status colors are reserved for system state — never for decoration.
A soft #F2F2F2 page with white cards. Inverted from the typical dark tech aesthetic.
Border radius caps at 4px. No pills, no balloon buttons, no gentle blobs.
A single black-on-white CTA per major view. Anything else is secondary.
Pixel artifacts — noise, dot grids, dithered lines — provide quiet tech personality without ornament.
Body text sits at black/65 minimum. Every text/background pair clears WCAG AA contrast.
Every surface, ink, and hairline is a single CSS variable defined once
on :root. No per-component overrides — change a token, the
whole site moves with it.
Status colors are the only color in the system. They mark project state — not anything decorative.
One sans for everything, one mono for technical signal. Headings are semibold with tight letter-spacing; body sits at default tracking with relaxed leading.
Spacing follows a 4-unit ladder. Radius caps at 4px and is reserved for buttons and small chips — surfaces stay sharp.
| Token | Value | Use |
|---|---|---|
| --max | 1440px | Default page container |
| --max-narrow | 1000px | Reading-focused pages (about, articles) |
One primary, one secondary. The arrow nudges right on hover — a quiet affordance, not an animation.
.btn .btn-primary · .btn .btn-secondary · black on hover-invert
Small typographic signals that anchor a section without competing with the heading.
.eyebrow · .eyebrow--plain · .feature-tag
Three card densities. All share the same hairline border and translucent surface — the only difference is opacity and padding.
The default card — translucent white on backdrop blur, pixel-corner markers, and subtle SVG noise. Used for hero info, project detail, and standard page bodies.
Use when content needs full opacity over the network background — forms, dense data, anything where translucency would hurt readability.
.card · .card.card--white · .card.card--soft · combine with .noise and .pixel-corners
The one place color enters the system — and only to communicate the current state of a project or service.
.status-badge .status-live · .status-beta · .status-development
Mono numerals on a dot-grid surface. Used for headline metrics on project detail pages.
.highlights[data-count="4"] with .highlight children
Three-column grid for capability lists. Each card has a small tag, bold title, and one-line description.
Everything runs on infrastructure you control. No data leaves your perimeter.
Last-modified aware, sub-50ms TTFB on static pages, zero JavaScript required.
Your content lives in a single file you can copy, version, and back up.
.features-grid with .feature > .feature-tag, .feature-title, .feature-desc
White surface, hairline border, and a focus ring that swaps the border to ink. No outlines on the field itself.
.form-grid wraps label + input | textarea pairs
Four utility classes that add quiet tech personality. Layer them on cards and panels — never on body text.
SVG fractal noise · 12px dot grid · L-shaped corner markers · 2/2 dashed separator
Motion is a confirmation, not entertainment. Everything is short, specific, and disabled when the user prefers reduced motion.
prefers-reduced-motion: reduce is set, all animations collapse to 0.01ms and the Three.js network background is hidden entirely.
Body copy never sits below black/65 on the page background.
All token pairings clear WCAG AA (4.5:1) for body text and AA Large
(3:1) for headings & labels.