Session probe lands on /vw_pages (Research). Use main designlang extract with --cookie-file — pack ignores auth. 39 artifacts under docs/design-extract; tolerate designlang late summary crash when cores exist.
578 lines
14 KiB
Markdown
578 lines
14 KiB
Markdown
# Design Language: Research | Coulomb
|
||
|
||
> Extracted from `https://coulomb.social` on August 9, 2026
|
||
> 3445 elements analyzed across 7 pages
|
||
|
||
This document describes the complete design language of the website. It is structured for AI/LLM consumption — use it to faithfully recreate the visual design in any framework.
|
||
|
||
## Color Palette
|
||
|
||
### Primary Colors
|
||
|
||
| Role | Hex | RGB | HSL | Usage Count |
|
||
|------|-----|-----|-----|-------------|
|
||
| Primary | `#d08728` | rgb(208, 135, 40) | hsl(34, 68%, 49%) | 8 |
|
||
|
||
### Neutral Colors
|
||
|
||
| Hex | HSL | Usage Count |
|
||
|-----|-----|-------------|
|
||
| `#000000` | hsl(0, 0%, 0%) | 5304 |
|
||
| `#efefef` | hsl(0, 0%, 94%) | 610 |
|
||
| `#616161` | hsl(0, 0%, 38%) | 556 |
|
||
| `#373737` | hsl(0, 0%, 22%) | 462 |
|
||
| `#171717` | hsl(0, 0%, 9%) | 401 |
|
||
| `#ffffff` | hsl(0, 0%, 100%) | 242 |
|
||
| `#e5e5e5` | hsl(0, 0%, 90%) | 217 |
|
||
|
||
### Background Colors
|
||
|
||
Used on large-area elements: `#ffffff`, `#e5e5e5`, `#171717`, `#f5f5f5`
|
||
|
||
### Text Colors
|
||
|
||
Text color palette: `#000000`, `#171717`, `#373737`, `#616161`, `#ffffff`
|
||
|
||
### Full Color Inventory
|
||
|
||
| Hex | Contexts | Count |
|
||
|-----|----------|-------|
|
||
| `#000000` | text, border, background | 5304 |
|
||
| `#efefef` | background | 610 |
|
||
| `#616161` | text, border | 556 |
|
||
| `#373737` | text, border | 462 |
|
||
| `#171717` | text, border, background | 401 |
|
||
| `#ffffff` | background, border, text | 242 |
|
||
| `#e5e5e5` | border, background | 217 |
|
||
| `#d08728` | background | 8 |
|
||
|
||
## Typography
|
||
|
||
### Font Families
|
||
|
||
- **Helvetica** — used for body (1739 elements)
|
||
- **Arial** — used for body (761 elements)
|
||
- **Times New Roman** — used for body (450 elements)
|
||
- **Inter** — used for body (397 elements)
|
||
|
||
### Type Scale
|
||
|
||
| Size (px) | Size (rem) | Weight | Line Height | Letter Spacing | Used On |
|
||
|-----------|------------|--------|-------------|----------------|---------|
|
||
| 50px | 3.125rem | 400 | 50px | normal | text |
|
||
| 42px | 2.625rem | 700 | normal | normal | input |
|
||
| 24px | 1.5rem | 600 | 36px | normal | a |
|
||
| 18px | 1.125rem | 600 | 18px | normal | div |
|
||
| 16px | 1rem | 400 | normal | normal | html, head, meta, title |
|
||
| 14px | 0.875rem | 500 | 19.6px | normal | div, a |
|
||
| 13.3333px | 0.8333rem | 400 | normal | normal | button, svg, use |
|
||
|
||
### Font Weights in Use
|
||
|
||
`400` (3048x), `500` (287x), `600` (102x), `700` (8x)
|
||
|
||
## Spacing
|
||
|
||
**Base unit:** 4px
|
||
|
||
| Token | Value | Rem |
|
||
|-------|-------|-----|
|
||
| spacing-1 | 1px | 0.0625rem |
|
||
| spacing-24 | 24px | 1.5rem |
|
||
| spacing-32 | 32px | 2rem |
|
||
| spacing-40 | 40px | 2.5rem |
|
||
| spacing-60 | 60px | 3.75rem |
|
||
| spacing-80 | 80px | 5rem |
|
||
| spacing-96 | 96px | 6rem |
|
||
| spacing-320 | 320px | 20rem |
|
||
|
||
## Border Radii
|
||
|
||
| Label | Value | Count |
|
||
|-------|-------|-------|
|
||
| sm | 4px | 119 |
|
||
| md | 8px | 122 |
|
||
| lg | 12px | 110 |
|
||
| lg | 15px | 6 |
|
||
| xl | 20px | 12 |
|
||
|
||
## Box Shadows
|
||
|
||
**sm** — blur: 4px
|
||
```css
|
||
box-shadow: rgb(170, 170, 170) 2px 2px 4px 0px;
|
||
```
|
||
|
||
**md** — blur: 8px
|
||
```css
|
||
box-shadow: rgba(23, 23, 23, 0.1) 2px 2px 8px 2px;
|
||
```
|
||
|
||
## CSS Custom Properties
|
||
|
||
### Colors
|
||
|
||
```css
|
||
--color_primary_default: rgba(2, 5, 211, 1);
|
||
--color_primary_default_rgb: 2, 5, 211;
|
||
--color_primary_contrast_default: rgba(255, 255, 255, 1);
|
||
--color_primary_contrast_default_rgb: 255, 255, 255;
|
||
--color_text_default: rgba(9, 23, 71, 1);
|
||
--color_text_default_rgb: 9, 23, 71;
|
||
--color_surface_default: rgba(255, 255, 255, 1);
|
||
--color_surface_default_rgb: 255, 255, 255;
|
||
--color_background_default: rgba(255, 255, 255, 0);
|
||
--color_background_default_rgb: 255, 255, 255;
|
||
--color_destructive_default: rgba(255, 0, 0, 1);
|
||
--color_destructive_default_rgb: 255, 0, 0;
|
||
--color_success_default: rgba(23, 219, 78, 1);
|
||
--color_success_default_rgb: 23, 219, 78;
|
||
--color_alert_default: rgba(250, 181, 21, 1);
|
||
--color_alert_default_rgb: 250, 181, 21;
|
||
--color_danger_default_rgb: rgba(176, 32, 12, 1);
|
||
--color_bTRUr_default_rgb: 208,135,40;
|
||
--color_bTOCs_default: rgba(55,55,55,1);
|
||
--color_bTHZK_default_rgb: 229,229,229;
|
||
--color_bTOCs_default_rgb: 55,55,55;
|
||
--color_bTINZ_default_rgb: 23,23,23;
|
||
--color_bTRUs_default_rgb: 227,230,235;
|
||
--color_bTINZ_default: rgba(23,23,23,0.36);
|
||
--color_bTRUr_default: rgba(208,135,40,0.1);
|
||
--color_bTHZK_default: rgba(229,229,229,1);
|
||
--color_bTHfJ_default_rgb: 97,97,97;
|
||
--color_bTMap_default: rgba(113,2,139,1);
|
||
--color_bTHfJ_default: rgba(97,97,97,1);
|
||
--color_bTMap_default_rgb: 113,2,139;
|
||
--color_bTRUs_default: rgba(227,230,235,1);
|
||
```
|
||
|
||
### Typography
|
||
|
||
```css
|
||
--font_default: 'Lato';
|
||
--font_bTRUx_default: "Inter";
|
||
--font_bTRUt_default: "Inter";
|
||
```
|
||
|
||
### Semantic
|
||
|
||
```css
|
||
success: [object Object];
|
||
warning: [object Object];
|
||
error: [object Object];
|
||
info: [object Object];
|
||
```
|
||
|
||
## Transitions & Animations
|
||
|
||
**Durations:** `0.25s`
|
||
|
||
### Common Transitions
|
||
|
||
```css
|
||
transition: all;
|
||
transition: background 0.25s;
|
||
```
|
||
|
||
### Keyframe Animations
|
||
|
||
**highlight-in**
|
||
```css
|
||
@keyframes highlight-in {
|
||
0% { background-color: rgb(200, 0, 0); }
|
||
}
|
||
```
|
||
|
||
**fa-spin**
|
||
```css
|
||
@keyframes fa-spin {
|
||
0% { transform: rotate(0deg); }
|
||
100% { transform: rotate(359deg); }
|
||
}
|
||
```
|
||
|
||
**opacity-70-25-0-13**
|
||
```css
|
||
@keyframes opacity-70-25-0-13 {
|
||
0% { opacity: 0.25; }
|
||
0.01% { opacity: 0.25; }
|
||
0.02% { opacity: 1; }
|
||
70.01% { opacity: 0.25; }
|
||
100% { opacity: 0.25; }
|
||
}
|
||
```
|
||
|
||
**opacity-70-25-1-13**
|
||
```css
|
||
@keyframes opacity-70-25-1-13 {
|
||
0% { opacity: 0.25; }
|
||
7.70231% { opacity: 0.25; }
|
||
7.71231% { opacity: 1; }
|
||
77.7023% { opacity: 0.25; }
|
||
100% { opacity: 0.25; }
|
||
}
|
||
```
|
||
|
||
**opacity-70-25-2-13**
|
||
```css
|
||
@keyframes opacity-70-25-2-13 {
|
||
0% { opacity: 0.25; }
|
||
15.3946% { opacity: 0.25; }
|
||
15.4046% { opacity: 1; }
|
||
85.3946% { opacity: 0.25; }
|
||
100% { opacity: 0.25; }
|
||
}
|
||
```
|
||
|
||
**opacity-70-25-3-13**
|
||
```css
|
||
@keyframes opacity-70-25-3-13 {
|
||
0% { opacity: 0.25; }
|
||
23.0869% { opacity: 0.25; }
|
||
23.0969% { opacity: 1; }
|
||
93.0869% { opacity: 0.25; }
|
||
100% { opacity: 0.25; }
|
||
}
|
||
```
|
||
|
||
**opacity-70-25-4-13**
|
||
```css
|
||
@keyframes opacity-70-25-4-13 {
|
||
0% { opacity: 0.258349; }
|
||
30.7792% { opacity: 0.25; }
|
||
30.7892% { opacity: 1; }
|
||
0.779231% { opacity: 0.25; }
|
||
100% { opacity: 0.258349; }
|
||
}
|
||
```
|
||
|
||
**opacity-70-25-5-13**
|
||
```css
|
||
@keyframes opacity-70-25-5-13 {
|
||
0% { opacity: 0.340766; }
|
||
38.4715% { opacity: 0.25; }
|
||
38.4815% { opacity: 1; }
|
||
8.47154% { opacity: 0.25; }
|
||
100% { opacity: 0.340766; }
|
||
}
|
||
```
|
||
|
||
**opacity-70-25-6-13**
|
||
```css
|
||
@keyframes opacity-70-25-6-13 {
|
||
0% { opacity: 0.423184; }
|
||
46.1638% { opacity: 0.25; }
|
||
46.1738% { opacity: 1; }
|
||
16.1638% { opacity: 0.25; }
|
||
100% { opacity: 0.423184; }
|
||
}
|
||
```
|
||
|
||
**opacity-70-25-7-13**
|
||
```css
|
||
@keyframes opacity-70-25-7-13 {
|
||
0% { opacity: 0.505602; }
|
||
53.8562% { opacity: 0.25; }
|
||
53.8662% { opacity: 1; }
|
||
23.8562% { opacity: 0.25; }
|
||
100% { opacity: 0.505602; }
|
||
}
|
||
```
|
||
|
||
## Component Patterns
|
||
|
||
Detected UI component patterns and their most common styles:
|
||
|
||
### Buttons (643 instances)
|
||
|
||
```css
|
||
.button {
|
||
background-color: rgb(239, 239, 239);
|
||
color: rgb(0, 0, 0);
|
||
font-size: 13.3333px;
|
||
font-weight: 400;
|
||
padding-top: 1px;
|
||
padding-right: 6px;
|
||
border-radius: 0px;
|
||
}
|
||
```
|
||
|
||
### Cards (36 instances)
|
||
|
||
```css
|
||
.card {
|
||
background-color: rgb(255, 255, 255);
|
||
border-radius: 4px;
|
||
box-shadow: rgb(170, 170, 170) 2px 2px 4px 0px;
|
||
padding-top: 4px;
|
||
padding-right: 4px;
|
||
}
|
||
```
|
||
|
||
### Inputs (16 instances)
|
||
|
||
```css
|
||
.input {
|
||
color: rgb(23, 23, 23);
|
||
border-color: rgb(255, 255, 255);
|
||
border-radius: 8px;
|
||
font-size: 16px;
|
||
padding-top: 2px;
|
||
padding-right: 2px;
|
||
}
|
||
```
|
||
|
||
### Links (130 instances)
|
||
|
||
```css
|
||
.link {
|
||
color: rgb(23, 23, 23);
|
||
font-size: 16px;
|
||
font-weight: 500;
|
||
}
|
||
```
|
||
|
||
### Modals (78 instances)
|
||
|
||
```css
|
||
.modal {
|
||
background-color: rgb(255, 255, 255);
|
||
border-radius: 12px;
|
||
padding-top: 24px;
|
||
padding-right: 0px;
|
||
max-width: 280px;
|
||
}
|
||
```
|
||
|
||
## Component Clusters
|
||
|
||
Reusable component instances grouped by DOM structure and style similarity:
|
||
|
||
### Button — 55 instances, 1 variant
|
||
|
||
**Variant 1** (55 instances)
|
||
|
||
```css
|
||
background: rgba(0, 0, 0, 0);
|
||
color: rgb(55, 55, 55);
|
||
padding: 0px 0px 0px 0px;
|
||
border-radius: 4px;
|
||
border: 0px none rgb(55, 55, 55);
|
||
font-size: 13.3333px;
|
||
font-weight: 400;
|
||
```
|
||
|
||
### Button — 1 instance, 1 variant
|
||
|
||
**Variant 1** (1 instance)
|
||
|
||
```css
|
||
background: rgb(239, 239, 239);
|
||
color: rgb(0, 0, 0);
|
||
padding: 1px 6px 1px 6px;
|
||
border-radius: 0px;
|
||
border: 2px outset rgb(0, 0, 0);
|
||
font-size: 13.3333px;
|
||
font-weight: 400;
|
||
```
|
||
|
||
## Layout System
|
||
|
||
**123 grid containers** and **1256 flex containers** detected.
|
||
|
||
### Container Widths
|
||
|
||
| Max Width | Padding |
|
||
|-----------|---------|
|
||
| 1200px | 0px |
|
||
| 100% | 0px |
|
||
| 992px | 0px |
|
||
|
||
### Grid Column Patterns
|
||
|
||
| Columns | Usage Count |
|
||
|---------|-------------|
|
||
| 1-column | 122x |
|
||
| 2-column | 1x |
|
||
|
||
### Grid Templates
|
||
|
||
```css
|
||
grid-template-columns: 592px 592px;
|
||
gap: 16px;
|
||
grid-template-columns: 32px;
|
||
grid-template-columns: 32px;
|
||
grid-template-columns: 32px;
|
||
grid-template-columns: 32px;
|
||
```
|
||
|
||
### Flex Patterns
|
||
|
||
| Direction/Wrap | Count |
|
||
|----------------|-------|
|
||
| column/nowrap | 470x |
|
||
| row/nowrap | 71x |
|
||
| row/wrap | 715x |
|
||
|
||
**Gap values:** `0px 12px`, `0px 20px`, `0px 24px`, `0px 4px`, `0px 8px`, `0px normal`, `12px normal`, `16px`, `18px normal`, `24px`, `24px normal`, `4px normal`, `8px normal`
|
||
|
||
## Interaction States
|
||
|
||
### Button States
|
||
|
||
**""**
|
||
```css
|
||
/* Focus */
|
||
outline: rgb(208, 135, 40) none 3px → rgba(0, 0, 0, 0) dotted 0px;
|
||
```
|
||
|
||
### Link Hover
|
||
|
||
```css
|
||
text-decoration: none → underline;
|
||
```
|
||
|
||
## Accessibility (WCAG 2.1)
|
||
|
||
**Overall Score: 100%** — 0 passing, 0 failing color pairs
|
||
|
||
## Design System Score
|
||
|
||
**Overall: 85/100 (Grade: B)**
|
||
|
||
| Category | Score |
|
||
|----------|-------|
|
||
| Color Discipline | 100/100 |
|
||
| Typography Consistency | 50/100 |
|
||
| Spacing System | 100/100 |
|
||
| Shadow Consistency | 100/100 |
|
||
| Border Radius Consistency | 90/100 |
|
||
| Accessibility | 100/100 |
|
||
| CSS Tokenization | 100/100 |
|
||
|
||
**Strengths:** Tight, disciplined color palette, Well-defined spacing scale, Clean elevation system, Consistent border radii, Strong accessibility compliance, Good CSS variable tokenization
|
||
|
||
**Issues:**
|
||
- 4 font families — consider limiting to 2 (heading + body)
|
||
- 140 !important rules — prefer specificity over overrides
|
||
- 81% of CSS is unused — consider purging
|
||
- 6545 duplicate CSS declarations
|
||
|
||
## Z-Index Map
|
||
|
||
**35 unique z-index values** across 3 layers.
|
||
|
||
| Layer | Range | Elements |
|
||
|-------|-------|----------|
|
||
| modal | 1503,2105 | div.b.u.b.b.l.e.-.e.l.e.m.e.n.t. .C.u.s.t.o.m.E.l.e.m.e.n.t. .b.a.T.a.K.a.Q.a.X. .f.l.o.a.t.i.n.g.-.g.r.o.u.p. .b.u.b.b.l.e.-.r.-.c.o.n.t.a.i.n.e.r. .f.l.e.x. .c.o.l.u.m.n, div.b.u.b.b.l.e.-.e.l.e.m.e.n.t. .C.u.s.t.o.m.E.l.e.m.e.n.t. .b.a.T.a.K.a.Q.a.X. .f.l.o.a.t.i.n.g.-.g.r.o.u.p. .b.u.b.b.l.e.-.r.-.c.o.n.t.a.i.n.e.r. .f.l.e.x. .c.o.l.u.m.n, div.b.u.b.b.l.e.-.e.l.e.m.e.n.t. .C.u.s.t.o.m.E.l.e.m.e.n.t. .b.a.T.a.K.a.Q.a.X. .f.l.o.a.t.i.n.g.-.g.r.o.u.p. .b.u.b.b.l.e.-.r.-.c.o.n.t.a.i.n.e.r. .f.l.e.x. .c.o.l.u.m.n |
|
||
| sticky | 10,30 | div.b.u.b.b.l.e.-.e.l.e.m.e.n.t. .G.r.o.u.p. .b.a.T.a.N.a.I.d. .b.u.b.b.l.e.-.r.-.c.o.n.t.a.i.n.e.r. .f.l.e.x. .r.o.w, div.b.u.b.b.l.e.-.e.l.e.m.e.n.t. .T.e.x.t. .b.a.T.a.N.a.I.q, textarea.b.u.b.b.l.e.-.e.l.e.m.e.n.t. .M.u.l.t.i.L.i.n.e.I.n.p.u.t. .a.1.7.8.6.2.3.1.7.9.1.3.3.1.x.5.4.4.4 |
|
||
| base | 0,9 | div.b.u.b.b.l.e.-.r.-.c.o.n.t.a.i.n.e.r. .f.l.e.x. .c.o.l.u.m.n, div.b.u.b.b.l.e.-.r.-.c.o.n.t.a.i.n.e.r. .f.l.e.x. .c.o.l.u.m.n, div.b.u.b.b.l.e.-.r.-.c.o.n.t.a.i.n.e.r. .f.l.e.x. .c.o.l.u.m.n |
|
||
|
||
## SVG Icons
|
||
|
||
**7 unique SVG icons** detected. Dominant style: **filled**.
|
||
|
||
| Size Class | Count |
|
||
|------------|-------|
|
||
| md | 4 |
|
||
| lg | 2 |
|
||
| xl | 1 |
|
||
|
||
**Icon colors:** `rgb(0, 0, 0)`
|
||
|
||
## Font Files
|
||
|
||
| Family | Source | Weights | Styles |
|
||
|--------|--------|---------|--------|
|
||
| FontAwesome | self-hosted | normal | normal |
|
||
| Material Icons | self-hosted | 400 | normal |
|
||
| Material Icons Outline | self-hosted | 400 | normal |
|
||
| Inter | google-fonts | 300, 400, 500, 600, 700 | normal |
|
||
|
||
**Google Fonts URL:** `https://fonts.googleapis.com/css?family=Inter:300%7CInter:regular%7CInter:500%7CInter:600%7CInter:700`
|
||
|
||
## Image Style Patterns
|
||
|
||
| Pattern | Count | Key Styles |
|
||
|---------|-------|------------|
|
||
| thumbnail | 28 | objectFit: contain, borderRadius: 8px, shape: rounded |
|
||
| general | 1 | objectFit: cover, borderRadius: 20px, shape: pill |
|
||
|
||
**Aspect ratios:** 1:1 (28x), 2:3 (1x)
|
||
|
||
## Motion Language
|
||
|
||
**Feel:** mixed · **Scroll-linked:** yes
|
||
|
||
### Duration Tokens
|
||
|
||
| name | value | ms |
|
||
|---|---|---|
|
||
| `sm` | `250ms` | 250 |
|
||
|
||
## Component Anatomy
|
||
|
||
### button — 56 instances
|
||
|
||
**Slots:** label, icon
|
||
|
||
## Brand Voice
|
||
|
||
**Tone:** neutral · **Pronoun:** third-person · **Headings:** unknown (tight)
|
||
|
||
### Top CTA Verbs
|
||
|
||
- **content** (25)
|
||
- **favorite** (25)
|
||
- **format** (1)
|
||
- **filter** (1)
|
||
- **add** (1)
|
||
- **arrow** (1)
|
||
- **note** (1)
|
||
|
||
### Button Copy Patterns
|
||
|
||
- "content_copy" (25×)
|
||
- "favorite_border" (25×)
|
||
- "format_line_spacing" (1×)
|
||
- "filter_list" (1×)
|
||
- "add_circle_outline" (1×)
|
||
- "arrow_drop_down" (1×)
|
||
- "note_alt" (1×)
|
||
|
||
## Page Intent
|
||
|
||
**Type:** `landing` (confidence 0.45)
|
||
**Description:** A tool to brainstorm, discuss, refine implement and promote ideas.
|
||
A social network for building stuff and influencing how stuff is built.
|
||
A marketplace for challenges, methods and solutions.
|
||
A platfo
|
||
|
||
## Material Language
|
||
|
||
**Label:** `flat` (confidence 0)
|
||
|
||
| Metric | Value |
|
||
|--------|-------|
|
||
| Avg saturation | 0.101 |
|
||
| Shadow profile | soft |
|
||
| Avg shadow blur | 0px |
|
||
| Max radius | 20px |
|
||
| backdrop-filter in use | no |
|
||
| Gradients | 0 |
|
||
|
||
## Imagery Style
|
||
|
||
**Label:** `mixed` (confidence 0)
|
||
**Counts:** total 29, svg 0, icon 1, screenshot-like 0, photo-like 0
|
||
**Dominant aspect:** square-ish
|
||
**Radius profile on images:** soft
|
||
|
||
## Quick Start
|
||
|
||
To recreate this design in a new project:
|
||
|
||
1. **Install fonts:** Add `Helvetica` from Google Fonts or your font provider
|
||
2. **Import CSS variables:** Copy `variables.css` into your project
|
||
3. **Tailwind users:** Use the generated `tailwind.config.js` to extend your theme
|
||
4. **Design tokens:** Import `design-tokens.json` for tooling integration
|