Shirokane
Remix this template to create a similar design — same sections, layout, animations, colors, and typography.
A landing page for a Japanese katagami textile atelier. Warm washi-cream canvas, indigo and vermilion accents, Cormorant Garamond with Japanese mincho type.
Palette
Typography
clamp(64px, 10vw, 158px)
clamp(54px, 7vw, 96px)
clamp(36px, 4vw, 52px)
clamp(24px, 2.6vw, 34px)
16px
14px
11px
12px
18px
Spacing & Shape
| Token | Value | Preview |
|---|---|---|
| xs | 4px | |
| sm | 8px | |
| md | 16px | |
| lg | 24px | |
| xl | 36px | |
| xxl | 48px | |
| section-y | 120px | |
| gutter | 56px |
Border Radius
| Token | Value | Preview |
|---|---|---|
| none | 0px | |
| stamp | 6px | |
| full | 9999px |
design.md
tokens (raw)
name: shirokane-design
version: alpha
description: >
An editorial, scroll-driven site for a fictional Japanese katagami stencil-dyeing
house, set on warm paper-white washi (#EDE4CF) over ink-black sumi (#16120E). The
signature voltage is a vermilion hanko red (#D4452A), backed by deep indigo (#22335C)
and persimmon (#C26A3A) section grounds. The type story braces an English display
serif (Cormorant Garamond) against a Japanese mincho (Shippori Mincho B1), with a
mono caption face (JetBrains Mono) for codes and labels. Geometry is near-zero radius
and razor hairlines; the page is a four-folio register of pinned, parallaxing,
theme-inverting sections wrapped in SVG paper grain and torn-paper edges.
colors:
# Brand / Voltage
vermilion: '#D4452A' # primary accent — hanko stamp, kickers, buttons, dots, focus ring, prices
persimmon: '#C26A3A' # secondary accent — custom-section ground, intro kicker, spec labels
# Surface
washi: '#EDE4CF' # primary page surface (warm paper-white); also light text on dark grounds
sumi: '#16120E' # ink-black — dark sections (craft), body text, button hover
indigo: '#22335C' # deep blue ground — intro + footer sections, photo placeholders
linen: '#DDD0B4' # muted card panel fill — etymology boxes, geo/spec panels, custom-right ground
# Text
ink-mist: '#8A8270' # muted text — captions, intro-t, notes, roman gloss names
panel-body: '#4a4034' # warm brown body copy inside light custom panel (p1 p)
# Hairlines (derived via rgba/opacity)
hairline-dark: 'rgba(22,18,14,.2)' # hairlines on washi grounds
hairline-light: 'rgba(237,228,207,.16)' # hairlines on dark grounds (marquee borders)
# Overlay / scrim
scrim: 'rgba(22,18,14,.6)' # photo tag chips, hero gradient darkening
nav-solid: 'rgba(22,18,14,.92)' # nav background once scrolled
# Gradient
hero-grad: 'linear-gradient(160deg, #22335C, #16120E 70%)' # hero base behind video
typography:
display:
fontFamily: "'Cormorant Garamond', serif"
fontSize: clamp(64px, 10vw, 158px)
fontWeight: 400
lineHeight: 0.84
letterSpacing: 0.04em
display-section:
fontFamily: "'Cormorant Garamond', serif"
fontSize: clamp(54px, 7vw, 96px)
fontWeight: 300
lineHeight: 0.95
mincho-head:
fontFamily: "'Shippori Mincho B1', serif"
fontSize: clamp(36px, 4vw, 52px)
fontWeight: 700
lineHeight: 1
display-italic:
fontFamily: "'Cormorant Garamond', serif"
fontSize: clamp(24px, 2.6vw, 34px)
fontWeight: 400
fontStyle: italic
lineHeight: 1.3
body:
fontFamily: "'Zen Kaku Gothic New', sans-serif"
fontSize: 16px
fontWeight: 400
lineHeight: 1.65
body-sm:
fontFamily: "'Zen Kaku Gothic New', sans-serif"
fontSize: 14px
fontWeight: 400
lineHeight: 1.6
label:
fontFamily: "'JetBrains Mono', monospace"
fontSize: 11px
fontWeight: 400
letterSpacing: 0.18em
textTransform: uppercase
spec-mono:
fontFamily: "'JetBrains Mono', monospace"
fontSize: 12px
fontWeight: 400
lineHeight: 1.9
button:
fontFamily: "'Cormorant Garamond', serif"
fontSize: 18px
fontWeight: 400
letterSpacing: 0.24em
textTransform: uppercase
rounded: # near-zero geometry; only stamps + dots are round
none: 0px
stamp: 6px
full: 9999px
spacing: # base unit 4px; section rhythm in large multiples
xs: 4px
sm: 8px
md: 16px
lg: 24px
xl: 36px
xxl: 48px
section-y: 120px
gutter: 56px
components:
button:
backgroundColor: '{colors.vermilion}'
textColor: '{colors.washi}'
typography: '{typography.button}'
rounded: '{rounded.none}'
padding: '17px 30px'
hoverBackgroundColor: '{colors.sumi}'
# label e.g. "VIEW FULL REGISTER →", "SEND INQUIRY ↗"
hanko:
backgroundColor: '{colors.vermilion}'
textColor: '{colors.washi}'
typography: '{typography.mincho-head}'
rounded: '{rounded.stamp}'
size: 'clamp(48px,5.5vw,86px)'
# vertical-rl stamp set into the H1 lockup ("白金")
photo-tag:
backgroundColor: '{colors.scrim}'
textColor: '{colors.washi}'
typography: '{typography.label}'
rounded: '{rounded.none}'
padding: '5px 12px'
# corner chip on bolt/drape photos ("macro · raking light")
etymology-card:
backgroundColor: '{colors.linen}'
textColor: '{colors.sumi}'
typography: '{typography.body-sm}'
rounded: '{rounded.none}'
padding: '20px'
# hover/reveal panel under a bolt title
spec-row:
typography: '{typography.spec-mono}'
keyColor: '{colors.ink-mist}'
priceColor: '{colors.vermilion}'
# justified key/value rows; price in Cormorant 20px
input-line:
backgroundColor: 'transparent'
textColor: '{colors.sumi}'
typography: '{typography.display-italic}'
border: '1px solid {colors.hairline-dark} (bottom only)'
focusBorderColor: '{colors.vermilion}'
rounded: '{rounded.none}'
padding: '12px 0'
nav:
backgroundColor: 'transparent → {colors.nav-solid} (on scroll)'
textColor: '{colors.washi}'
typography: '{typography.label}'
padding: '18px 56px'
stat:
backgroundColor: 'rgba(237,228,207,.05)'
numberTypography: '{typography.display-section}'
labelTypography: '{typography.label}'
rounded: '{rounded.none}'
padding: '18px 22px'
motion:
ease: 'cubic-bezier(.16,1,.3,1) — the single house easing on nearly every transition'
hero-entrance: 'per-letter blur(16px)+translateY(28px)→0 stagger (55ms step, 200ms base); hanko scales 1.12→1 at .5s delay'
word-reveal: 'translateY(105%)→0 clip lines on intro H2 (.9s); clip-path inset wipes on collection headers (1s)'
count-up: 'stats ease-out cubic count to data-count over 900ms on intersection'
parallax: 'rAF scroll loop: hero video scale 1→1.1 + dim 0→.55; photos translateY by data-speed -0.08; vertical rail drift'
craft-rail: 'sticky 460vh pin → horizontal translateX of card strip driven by scroll progress, with progress fill bar'
custom-split: 'sticky 340vh pin, 3 stacked panels cross-fade by scroll segment (0-.32 / .32-.6 / .6-1), seam dots toggle'
heritage-invert: 'sticky 300vh pin: background washi→sumi & text sumi→washi color-mix across .15-.55 scroll; vertical title scaleY .4→1; timeline nodes clip-reveal'
marquee: 'intro label tape translateX 0→-50% over 42s linear infinite'
underline-wipe: 'links: 1px underline scaleX(0)→1 from left over .45s on hover'
icons:
library: inline SVG (hand-authored, no icon font)
style: outline (line) with a few solid glyphs (play triangle, star, hanko mark)
stroke: 1.4–1.6px (UI), 1.2px (geo motif diagrams)
sizes: { sm: 16px, md: 18px, lg: 22px, brand: 28px }
color: '{colors.vermilion} for accent marks; currentColor otherwise'SHIROKANE
shirokane-design · alpha
Design spec — version alpha. Source: static HTML (
index.html); tokens read from inline styles +:rootcustom properties + class rules. Fictional/sample product; described factually.
Overview
SHIROKANE is a long-scroll editorial site for a fictional Ise katagami stencil-dyeing
atelier, structured as a four-folio register. It lives on warm paper-white washi
#EDE4CF over ink-black sumi #16120E, with a single hot voltage — vermilion hanko red
#D4452A — reserved for the brand stamp, kickers, prices, the focus ring, and the
underline-wipe accents. Whole sections switch to coloured grounds: indigo #22335C
(intro, footer), pure sumi (craft), and persimmon #C26A3A (custom). The type story is
a deliberate east/west bracing: an English display serif, Cormorant Garamond, set huge
and light, against a Japanese mincho, Shippori Mincho B1, for the kanji and headings,
with JetBrains Mono carrying every code, label, and spec row in .18em uppercase
tracking. The geometry is austere — near-zero radius everywhere, razor 1px hairlines
instead of shadows, the only curves being the 6px-radius hanko stamp and tiny round
dots. The signature moves are all scroll-driven via a single rAF loop: a per-letter
blurred hero entrance, a horizontally-pinned 460vh "twelve steps" photo rail, a pinned
three-panel custom split, and a heritage section that color-mixes its entire theme from
light to dark as you scroll. Two textures recur over everything: an SVG feTurbulence
paper grain at 5% multiply, and a masked torn-paper top edge on dark sections.
Colors
Brand / Voltage. vermilion #D4452A is the one true accent — it fills the .btn
buttons, the hero .hanko stamp, every .kick kicker label, the inline dots, prices
(.pm .v), the focus outline, and the underline-wipe hover. persimmon #C26A3A is the
secondary accent: it is the full ground of the custom-left split panel and tints the
intro kicker and spec labels.
Surface. washi #EDE4CF is the default page background and the light text colour on
dark grounds. sumi #16120E is the ink-black used for body text, the craft section
ground, and button hover. indigo #22335C grounds the intro and footer and stands in as
a placeholder behind loading photos. linen #DDD0B4 is the muted card fill for
etymology boxes, geo/spec panels, and the custom-right column.
Text. Body copy is sumi on light, washi on dark. ink-mist #8A8270 is the muted
text for captions, intro lead-ins, the bolt-count note, and roman gloss names. A one-off
warm brown #4a4034 carries the body paragraph inside the light custom panel.
Hairlines. No borders are opaque black — they are rgba(22,18,14,.2) on light
grounds and rgba(237,228,207,.16) on dark (e.g. the marquee top/bottom rules). The
.hair utility is currentColor at .22 opacity.
Scrims / overlays. Photo tag chips and hero darkening use rgba(22,18,14,.6); the
nav becomes rgba(22,18,14,.92) once scrolled past the hero. The hero base is
linear-gradient(160deg, #22335C, #16120E 70%) behind the video.
Typography
Four families, all loaded from Google Fonts in one request: Cormorant Garamond
(display serif, weights 300–600 + italics), Shippori Mincho B1 (Japanese mincho,
400–800), Zen Kaku Gothic New (body sans, 300–500), and JetBrains Mono (labels &
specs, 400–500). These are real open-source faces — no substitution needed. Display
serif is set light (300–400) and enormous; mincho headings are heavy (700) and often run
writing-mode: vertical-rl; the mono is always uppercase with wide tracking.
| Token | Size | Weight | Line-height | Tracking | Usage |
|---|---|---|---|---|---|
| display | clamp(64–158px) | 400 | 0.84 | .04em | Hero H1 lockup |
| display-section | clamp(54–96px) | 300 | 0.95 | — | Section H2s, footer wordmark, stat numbers |
| mincho-head | clamp(36–52px) | 700 | 1 | — | Japanese bolt titles (青海波) |
| display-italic | clamp(24–34px) | 400 italic | 1.3 | — | Pull-quotes, input field text |
| body | 16px | 400 | 1.65 | — | Default paragraph copy |
| body-sm | 14px | 400 | 1.6 | — | Captions, etymology, intro-t |
| label | 11px | 400 | — | .18em | Kickers, nav, tags, all-caps mono labels |
| spec-mono | 12px | 400 | 1.9 | — | Spec key/value rows, codes, addresses |
| button | 18px | 400 | — | .24em | Button labels (uppercase serif) |
Layout
Base unit is 4px; section vertical rhythm runs in big multiples (120px section padding,
128px between bolts, 140px intro). The page is centred on a max-width: 1440px .wrap
with 56px side gutters (32px under 980px). The composition is a stack of full-bleed
folios: a 100vh hero with corner ticks and HUD captions; an indigo intro with a 3fr/6fr/3fr
grid and a vertical-rl kanji rail; a collections register of alternating .bolt grids
(64px metarail / 7fr photo / 5fr info, flipped on even rows); a sumi craft section with a
460vh sticky-pinned horizontal photo rail; a 340vh pinned 1fr/1fr custom split; a 300vh
pinned heritage section that inverts its theme; and an indigo footer. Whitespace is
generous and editorial; asymmetry (offset hero lockup lower-left, flipped grids,
vertical rails) is the structural signature.
Elevation & Depth
This system is essentially flat — depth comes from hairlines, coloured grounds, and
texture, not shadows. The only real box-shadow is on the custom-left monitor frame
(0 30px 80px rgba(22,18,14,.4)) and the hero headline text-shadow
(0 4px 44px rgba(22,18,14,.55)). Everywhere else, separation is achieved with 1px
hairlines (often double-rule 3px double on the masthead), .05–.22 opacity overlays,
and section background swaps. Two textures add tactility: an SVG feTurbulence paper
grain (.grain::after, 5% opacity, multiply blend) and masked torn-paper top edges
(.torn::before).
Shapes
Resolutely orthogonal. Radius is 0 on every card, photo, button, input, panel, and
chip — corners are sharp. The only rounded forms are the .hanko stamp at 6px and
fully-round 50% dots (the vermilion .dot, metarail tick, seam-rail dots). Photos use
strict aspect ratios (4/3 bolts, 4/5 drapes, 3/4 craft & heritage) and reveal via
clip-path inset wipes rather than scale or fade.
Components
- Button (
.btn) — vermilion fill, washi text, no radius,17px 30pxpadding, 18px Cormorant uppercase at.24em; hover swaps fill to sumi; active nudges down 1px. Label pairs text with an inline arrow SVG (e.g. "View full register →"). - Hanko stamp (
.hanko) — vermilion6px-radius square set into the H1, with vertical-rl mincho "白金"; scales in on load. - Photo tag (
.tag) —rgba(22,18,14,.6)chip, washi mono label,5px 12px, pinned top-left of photos. - Etymology card (
.ety) — linen fill,20pxpadding, hidden until bolt hover/reveal. - Spec block (
.spec) — JetBrains Mono 12px justified key/value rows, muted keys, vermilion Cormorant price. - Stat (
.stat) —rgba(237,228,207,.05)fill, Cormorant 54px count-up number, mono label. - Input line (
.iline) — transparent, bottom 1px hairline only, Cormorant 20px text, vermilion underline on focus. - Nav (
header.nav) — fixed, transparent over hero, solidifies torgba(22,18,14,.92)past 85vh; mono links with mincho Japanese sub-labels. - Geo / spec panels (
.geo,.specgrid) — linen fill, hand-drawn pattern SVGs at 1.2px stroke alongside italic Cormorant values.
Motion
One easing rules everything: cubic-bezier(.16,1,.3,1) (--ease). The hero entrance
staggers each headline letter from blur(16px) + translateY(28px) at a 55ms step, then
the hanko scales 1.12→1. Section headers reveal with translateY(105%) line wipes or
clip-path inset reveals. A single requestAnimationFrame scroll loop drives the rest:
hero video scales 1→1.1 with a darkening overlay, photos parallax by data-speed, the
craft rail translates horizontally across a 460vh pin with a progress-fill bar, the
custom split cross-fades three panels by scroll segment, and the heritage section
color-mixes its whole theme washi→sumi while a vertical title grows scaleY .4→1 and
timeline nodes clip-reveal. The intro marquee scrolls 42s linear infinite; links carry a
.45s underline-wipe. prefers-reduced-motion is acknowledged in code via a reduce
flag but it is hard-set to false, so motion always runs.
Iconography
All icons are hand-authored inline SVGs — there is no icon font. Style is predominantly
outline (1.4–1.6px stroke, currentColor) with a handful of solid glyphs: the play
triangle on the documentary link, the star/clock heritage marks, and the brand compass
mark. Pattern diagrams in the geo panels are drawn at 1.2px stroke with solid sumi
dots. Accent marks (dots, ticks) take vermilion; functional UI icons inherit
currentColor so they flip with the section theme. Sizes: 16px UI, 18px in buttons,
22px heritage marks, 28px brand mark.
Do's and Don'ts
- Do keep vermilion as the only saturated accent — one voltage, used sparingly on stamps, kickers, prices, and focus.
- Do brace Cormorant Garamond against Shippori Mincho B1, and reserve JetBrains Mono exclusively for uppercase labels, codes, and spec rows.
- Do keep corners sharp (radius 0) and lean on hairlines, coloured grounds, and the grain/torn textures for depth instead of shadows.
- Do preserve the scroll-pinned signature sections and the single shared
cubic-bezier(.16,1,.3,1)easing. - Don't introduce drop shadows, soft rounded cards, or a second bright accent — it breaks the austere paper-and-ink discipline.
- Don't body-set the display serif or drop the Japanese mincho; the east/west pairing is the identity.
- Don't swap reveal wipes (clip-path / line-mask) for generic fades, or let the marquee/parallax run without the house easing.
Known Gaps
- The reduced-motion path exists in JS (
reduceflag) but is hard-coded tofalse, so the spec documents motion as always-on. - Section-inversion colours during the heritage scroll are computed live via JS
color-mix/lerp between washi, sumi, persimmon, and indigo — intermediate values are interpolated, not authored tokens. --her-accentinterpolates between[212,69,42](vermilion) and[34,51,92](indigo); the resting value is vermilion, captured here ashairline/accent rather than a fixed hex.- Spacing tokens are inferred from the recurring padding/gap values; the HTML uses raw pixel values rather than a named scale.