Rawcut design system · v1.0
Styleguide
Every token, type style and component in the kit, rendered live from app/globals.css and components/ui. No radius, 2px ink lines, hard offset shadows, one acid accent.
Colors
Twelve tokens, defined on :root (paper) and .dark (ink). Use them as Tailwind colors: bg-ink, text-muted, border-line-soft. The big swatch shows the current theme.
paper
Page background
- Light
- L #f3f2ee
- Dark
- D #0b0b0b
--r-paperpaper-2
Image wells, hover rows, raised areas
- Light
- L #e7e6e0
- Dark
- D #161616
--r-paper-2card
Cards, fields, menus, modals
- Light
- L #ffffff
- Dark
- D #121212
--r-cardink
Text, 2px borders, hard shadows, inverted bands
- Light
- L #0a0a0a
- Dark
- D #f3f2ee
--r-inkmuted
Secondary text, meta
- Light
- L #5c5c58
- Dark
- D #a6a5a0
--r-mutedsubtle
Placeholders, disabled sizes
- Light
- L #9a9993
- Dark
- D #6b6a66
--r-subtleline
Rules (same as ink), grid-rules gaps
- Light
- L #0a0a0a
- Dark
- D #f3f2ee
--r-lineline-soft
Hairlines inside menus and lists
- Light
- L #cfcec8
- Dark
- D #2c2c2a
--r-line-softaccent
The one acid accent: CTAs, highlights, hover
- Light
- L #d2ff1f
- Dark
- D #d2ff1f
--r-accentaccent-fg
Text on accent (always ink)
- Light
- L #0a0a0a
- Dark
- D #0a0a0a
--r-accent-fgsale
Sale prices, discounts, errors
- Light
- L #ff3d12
- Dark
- D #ff5a33
--r-salesale-fg
Text on sale
- Light
- L #0a0a0a
- Dark
- D #0a0a0a
--r-sale-fg
Component aliases
@theme inline
- canvas
- → paper
- surface / solid
- → card
- raised / sunken
- → paper-2
- fg
- → ink
- line-strong
- → line
- accent-hover
- → ink
- accent-soft
- → paper-2
- danger
- → sale
- success
- → #1f9d55 (fixed)
- warning
- → #b26a00 (fixed)
Pairings
Text on fill
Paper on ink
Ink on accent
Ink on sale
Muted on paper-2
Type
Archivo (variable width) for everything you read, Geist Mono for labels and numbers. Display styles are condensed, heavy and uppercase; sizes clamp between phone and desktop.
.text-mega
Page titles, manifesto lines
- Font
- Archivo
- Weight
- 900
- Width
- 62%
- Size
- clamp(3.5rem, 12.5vw, 14rem)
- Range
- 56–224px
- Leading
- 0.8
- Tracking
- -0.02em
- Case
- Uppercase
Uniforms
.text-hero
Page heroes
- Font
- Archivo
- Weight
- 850
- Width
- 65%
- Size
- clamp(3rem, 11vw, 10rem)
- Range
- 48–160px
- Leading
- 0.84
- Tracking
- -0.015em
- Case
- Uppercase
Shipping
.text-display
Section titles (SectionHead)
- Font
- Archivo
- Weight
- 850
- Width
- 68%
- Size
- clamp(2.5rem, 6.5vw, 6rem)
- Range
- 40–96px
- Leading
- 0.88
- Tracking
- -0.01em
- Case
- Uppercase
Most worn
.text-headline
Card titles, values
- Font
- Archivo
- Weight
- 800
- Width
- 72%
- Size
- clamp(1.875rem, 3.6vw, 3.25rem)
- Range
- 30–52px
- Leading
- 0.92
- Tracking
- 0
- Case
- Uppercase
Repair for life
.text-title
Panel titles, totals
- Font
- Archivo
- Weight
- 750
- Width
- 80%
- Size
- 1.5rem
- Range
- 24px
- Leading
- 1
- Tracking
- 0
- Case
- Uppercase
Order summary
.text-heading
Item names, small heads
- Font
- Archivo
- Weight
- 700
- Width
- 90%
- Size
- 1.125rem
- Range
- 18px
- Leading
- 1.15
- Tracking
- 0
- Case
- Uppercase
Heavyweight Box Tee
.text-lede
Intros, quotes
- Font
- Archivo
- Weight
- 500
- Width
- 100%
- Size
- clamp(1.125rem, 1.6vw, 1.375rem)
- Range
- 18–22px
- Leading
- 1.35
- Tracking
- -0.01em
- Case
- As written
Heavyweight basics, built in small runs in Portugal.
.body
Default body copy
- Font
- Archivo
- Weight
- 400
- Width
- 100%
- Size
- 15px
- Range
- 15px
- Leading
- 22px
- Tracking
- 0
- Case
- As written
Dense 300 gram cotton that holds its shape and a collar that won't wave after ten washes.
.text-label
All small meta, buttons, chips
- Font
- Geist Mono
- Weight
- 500
- Width
- —
- Size
- 0.6875rem
- Range
- 11px
- Leading
- 1rem (16px)
- Tracking
- 0.04em
- Case
- Uppercase
Free shipping over $150
.text-data
Prices, counts, codes
- Font
- Geist Mono
- Weight
- inherit
- Width
- —
- Size
- inherit
- Range
- inherit
- Leading
- inherit
- Tracking
- inherit · tabular-nums
- Case
- As written
$128.00 · 0042 · 4.8
.wordmark
Logo, footer mark
- Font
- Archivo
- Weight
- 900
- Width
- 125%
- Size
- set per use
- Range
- —
- Leading
- —
- Tracking
- -0.04em
- Case
- Uppercase
RAWCUT
Borders & shadows
Radius is 0 everywhere. Structure comes from 2px ink lines, grid rules and hard offset shadows that move on press.
Hard line
2px
border-2 border-inkHairline
1px soft
border-b border-line-softShadow
4px 4px 0 ink
shadow-hardShadow large
8px 8px 0 ink
shadow-hard-lgPress
Hover + click
press shadow-hard · lift -2px / 6px shadow · sink +2px / 0 · 120ms snapGrid rules
1px collapsed
grid-rules grid grid-cols-3Focus ring
Keyboard
:focus-visible · 2px ink outline + 4px accent haloRadius
None
Edges are hard. No rounded-* anywhere.Fields
48px controls on card with a 2px ink border. Focus adds the 4px hard shadow; aria-invalid turns the border sale-red.
We'll send the receipt here.
Five digits, numbers only
Field (label + htmlFor + hint) · Input · Select · Textarea from components/ui/fieldBadges
tone="ink"tone="accent"tone="sale"tone="outline"Controls
Interactive pieces. In the HTML edition they run on data-tabs, data-switch, data-menu and data-open hooks.
Tabs
Arrow keys move
300 gsm combed cotton jersey. Rib collar, 2.5 cm. Pre-shrunk and garment dyed.
Boxy, dropped shoulder. Take your usual size; size down for a closer fit.
4.8 out of 5. “Two years in and the collars are still flat.”
Switch
role="switch"
Menu
Outside click / Esc
Click the trigger · Esc closes
Modal
<dialog>
Native <dialog> · Esc or backdrop closes
Product card & price
ProductCard handles badges (new, restock, limited, sale %, low stock, sold out), the hover second photo and quick add. Price marks sale prices on red.
- Loopback Hoodie$1283 colors
- Pocket Tee 3-Pack$96
Was $120Mixed - 5 colors
- Studio Parka$340Black
Price
Regular
<Price price={48} />Price
Sale
compareAt={120}Price
Large, cents
text-data · tabular-numsPhotos · 54
Every image is a CC0 photo picked by name with <Photo name=… />. The box sets the crop; replace the files in public/images with your own using the same names.

backpack- black 
bag- duffel- leather 
bag- leather- carry 
bag- messenger- brown 
beanie- cream 
boot- worn- leather 
boots- brown- worn- in 
boots- lacing- mono 
boots- tan- ledge 
coat- pink- hanger 
coat- tweed- buttons 
coat- wool- detail 
hat- white- dark 
hoodie- blue- lake 
hoodie- grey- window 
jeans- button- detail 
jeans- folded- stack 
jeans- front- pocket 
knit- grey- detail 
knit- poncho- hanger 
knit- white- flatlay 
leather- jacket- detail 
leather- jackets- row 
model- beanie- coat 
model- coast 
model- coat- scarf 
model- coat- white 
model- denim- crossed 
model- leather- jacket 
model- parka- studio 
model- shirt- white 
shoes- brown- floor 
sneaker- white- studio 
sneakers- white- sand 
socks- wool- stripe 
store- interior 
store- rack- minimal 
store- rack- warm 
store- white- shirts 
sunglasses- watch 
sweater- cream- denim 
sweater- cream- wood 
sweater- stripe- folded 
sweatshirt- cream- studio 
tee- hangers- close 
tee- hangers- front 
tee- rail- minimal 
tee- rail- white- wall 
tee- stack- colors 
tee- white- back 
tote- red 
trousers- khaki- seated 
trousers- navy- street 
watches- wood
Marquee
Two identical children inside .marquee loop seamlessly (30s, or 60s with .marquee-slow). Pauses on hover and stops for reduced motion.
.marquee · .marquee-slow · overflow-hidden parentSee it on the home page