# #5 Direction 6ef0bf96

> light · 156° · Xanh Mono / Libre Baskerville · 9 col

| | |
|---|---|
| hash / ref | `6ef0bf969f3cbf602400997a7e378c74429955cf879684fdb1e9d8338faed12e` |
| algorithm / library | hash-design/v2 / `bd20321c36ab` |
| constraints | none |

**这份 brief 是冻结的执行规格，不是灵感板。** 每个数值都来自哈希：不要替换字体、颜色、栅格或数值，不要"顺手优化"成你习惯的样子。若与全局禁令冲突，以禁令为准；若 twist 无法照字面执行，取最接近字面的做法，并在 HTML 注释里写明。

## 映射过程 Mapping trace

| bytes | hex | parameter | rule | → result |
|---|---|---|---|---|
| 0+1 | `6e f0` | hue | 0x6ef0 = 28400; 28400/65536 × 360 | **156.01°** |
| 2 | `bf` | polarity · paper lightness | 191 ≥ 77 → light; L = 0.90 + 114/178 × 0.085 | **light, L 0.954** |
| 3 | `96` | paper chroma | 150/255 × 0.045 | **0.026** |
| 4 | `9f` | accent chroma | 0.07 + 159/255 × 0.16 | **0.17** |
| 5 | `3c` | accent2 hue offset | 30 + 60/255 × 300 | **+100.59°** |
| 6 | `bf` | display face | 191 mod 98 = 93 | **Xanh Mono** |
| 7 | `60` | body face | 96 mod 62 = 34 | **Libre Baskerville** |
| 8 | `24` | display case · weight | 36 mod 4 = 0; ⌊36/4⌋ mod 1 | **as-written, 400** |
| 9 | `00` | display tracking | −0.04 + 0/255 × 0.24 | **-0.04em** |
| 10 | `99` | type scale ratio | 1.067 + 153/255 × 0.551 | **1.398** |
| 11 | `7a` | density | t = 122/255 | **t 0.478: base 16px, line-height 1.51, unit 7px** |
| 12 | `7e` | grid columns · gutter | 3 + 126 mod 10; unit × (1 + ⌊126/10⌋ mod 4) | **9 columns, 7px gutter** |
| 13 | `37` | text block span · start | span 7/15, start 3/15 | **columns 2–7 of 9** |
| 14 | `8c` | first-screen height | 45 + 140/255 × 55 | **75%** |
| 15 | `74` | sections · separator | 3 + 116 mod 6; ⌊116/6⌋ mod 5 | **5 sections, boxes** |
| 16 | `42` | anchor subject · size | 66 mod 8; 25 + ⌊66/8⌋/31 × 75 | **initial, 44%** |
| 17 | `99` | anchor position · rotation | x 9/15; ((9) − 7.5)/7.5 × 8 | **x 0.6, 1.5°** |
| 18 | `55` | motif shape · size | 85 mod 12; unit × (1 + ⌊85/12⌋ mod 8) | **dots, 56px** |
| 19 | `cf` | motif placement · angle | 207 mod 4; ⌊207/4⌋ × 180/63 | **markers, 146°** |
| 20 | `87` | radius · border | RADII[135 mod 8]; ⌊135/8⌋ mod 4; ⌊135/32⌋ mod 4 | **16px radius, 0px solid border** |
| 21 | `96` | shadow · texture | 150 & 3; (150 >> 2) & 3; 3 + 9 × 0.6 | **2px hard shadow, grain 8.4%** |
| 22 | `84` | motion property · duration | ⌊132/64⌋; (132 mod 64)/63 × 600 | **clip-path, 40ms** |
| 23 | `fd` | easing | 253 ≥ 32 → cubic-bezier from bits | **cubic-bezier(0.9, 1.4, 0.37, 1)** |
| 24 | `b1` | voice person · headline form | 177 mod 4; ⌊177/4⌋ mod 6 | **we, label** |
| 25 | `e9` | sentence length · register | 3 + (233 & 15); (233 >> 4)/15 | **12 words, register 0.93** |
| 26 | `d8` | twist target | 216 mod 9 | **headline** |
| 27 | `33` | twist operation · amount | 51 mod 10; ⌊51/10⌋ | **vertical, 5** |
| 29 | `ae` | CJK display face | 174 mod 14 _(used on Chinese pages)_ | **Noto Sans SC** |
| 30 | `d1` | mono face | 209 mod 8 | **B612 Mono** |
| 28, 31 | `8f 2e` | (unused) | recorded, not used | — |

## 内容 Content

**Subject:** 二号桥单车铺

只能使用以下事实。不得编造数字、评价、奖项或客户；缺少的信息留空或写"待补"。

- 店名：二号桥单车铺（Bridge No.2 Cycle Works）
- 地址：河西路二号桥桥洞下东侧，蓝色卷帘门，门口立着一个旧车轮
- 营业：周三至周日 10:00–20:00；周一、周二休息
- 补胎 ¥15；换内胎 ¥35（含内胎）
- 全车保养 ¥180：清洗传动、调变速和刹车、紧固全车螺丝，约 2 小时
- 手工编轮组 ¥260 起，工期 5 天
- 二手车：每辆都换过链条和刹车皮，保修 90 天
- 公路车 Fitting ¥480，约 90 分钟，需预约
- 店主：陈立平，大家叫他老陈，修车 27 年，以前在自行车厂做装配
- 周四夜骑：每周四 19:30 店门口出发，沿江一圈 24 公里，免费，自带车灯
- 门口气泵免费，24 小时可用
- 预约：电话 0571-5555-0222，或到店登记
- 不卖新车，只修车、卖二手车和零件

## 文案语气 Voice

- **Person:** first person plural ("we")
- **Headlines:** a label: a noun phrase, no verb
- **Sentences:** about 12 words on average (about 24 characters in Chinese)
- **Register:** 0.93 on a 0–1 scale — formal and exact

## 版式 Layout

- **Grid:** 9 columns, 7px gutters, max width 1250px
- **Text block:** columns 2–7 of 9 (left of centre)
- **First screen:** 75% of the viewport height
- **Sections:** 5, separated by each section in a bordered box on the grid
- Below 640px wide the grid collapses to one column; separators and the anchor stay.

**First-screen anchor:** the initial letter (or first character) of the subject; about 44% of the first screen's width, centred at 60% from the left edge, rotated 1.5°.

## 字体 Typography

- **Display**: Xanh Mono 400 + italic · set at 400, as written (sentence case), letter-spacing -0.04em — fallback `"Courier New", monospace`
- **Body**: Libre Baskerville 400/700 + italic — fallback `Baskerville, Georgia, serif`
- **Mono**: B612 Mono 400 — fallback `"Courier New", monospace`
- **CJK** (Chinese pages): display Noto Sans SC, body Noto Serif SC

Scale: ratio **1.398** on a 16px base → -2: 8.2px · -1: 11.4px · 0: 16px · 1: 22.4px · 2: 31.3px · 3: 43.7px · 4: 61.1px · 5: 85.4px · 6: 119.4px · 7: 167px

```html
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Xanh+Mono:ital,wght@0,400;1,400&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400;1,700&family=B612+Mono&family=Noto+Sans+SC:wght@400;700&family=Noto+Serif+SC:wght@400;700&display=swap">
```

## 配色 Colour — light, hue 156.01°

Computed in OKLCH: paper L 0.954 / C 0.026 at hue 156.01°; accents at chroma 0.17, accent2 100.59° round the wheel. Text lightness is solved for contrast (ink ≥ 7.5:1, muted ≥ 4.6:1, accents ≥ 3:1 on paper).

| token | hex | role |
|---|---|---|
| paper | `#e3f5e9` | page background |
| ink | `#293d30` | primary text |
| muted | `#636f67` | secondary text |
| accent | `#00995a` | the anchor and one kind of mark |
| accent2 | `#478be5` | sparingly, under a tenth of the page |
| rule | `#a7c0af` | lines, borders |
| panel | `#d0e8d8` | secondary background |

Contrast (WCAG):

- ink on paper: **10.25:1** — AAA — any text
- muted on paper: **4.63:1** — AA — body text OK
- ink on panel: **8.99:1** — AAA — any text
- accent on paper: **3.24:1** — large text / UI marks only (≥24px or bold ≥19px)
- accent2 on paper: **3.04:1** — large text / UI marks only (≥24px or bold ≥19px)
- #000000 on accent: **5.7:1** — AA — body text OK
- #000000 on accent2: **6.09:1** — AA — body text OK

## 密度 Density — 0.478

0.478 on the density axis (0 = airiest, 1 = most packed): base 16px, line-height 1.51, spacing unit 7px, section gap 103px, max width 1250px.

## 形状与材质 Shape & surface

- **Radius:** 16px on boxes and inputs
- **Borders:** none; use the separators and space
- **Shadow:** hard offset 2px 2px in ink, no blur (never a soft, blurred shadow)
- **Texture:** fine noise grain over the paper at 8.4% opacity

```css
body { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.084'/%3E%3C/svg%3E"); }
```

## 母题 Motif

Dots, each about 56px, as list and heading markers, at 146°. Draw them with CSS or inline SVG in the palette colours; no icon fonts, no emoji.

## 动效 Motion

A wipe (clip-path) changes over 40ms with `cubic-bezier(0.9, 1.4, 0.37, 1)`, on hover, focus and state changes, plus the anchor once on load. Never animate every section on scroll. Under prefers-reduced-motion nothing moves.

## 变数 Twist

The main headline: set vertically (writing-mode: vertical-rl).

## 全局禁令 Global bans

- **禁用 Inter 及同类默认无衬线** (generic-sans, critical): 不得使用 Inter / Inter Tight / Inter Display / Roboto / Roboto Flex / Open Sans / Lato / Poppins / Montserrat / Nunito / Nunito Sans / Plus Jakarta Sans / Manrope / DM Sans / Outfit / Figtree / Geist / Urbanist / Sora / Lexend / Raleway / Work Sans / Space Grotesk，也不得只写 system-ui / sans-serif 当作"设计选择"。字体必须来自 brief 指定的字体对。
- **禁用紫蓝渐变** (purple-blue-gradient, critical): 禁止紫/靛/蓝系渐变背景、渐变文字（background-clip:text）、模糊彩色光斑（mesh blob / glow orb）。需要渐变时只能用 brief 调色板内的颜色，且必须有材质理由（如油墨叠印、日晒褪色）。
- **禁用居中 hero + 双按钮** (centered-hero-two-buttons, critical): 禁止"居中大标题 + 一行副标题 + 主按钮/幽灵按钮并排"的首屏。首屏结构必须来自 brief 的 layout 与 anchor。
- **禁用三张同款卡片** (identical-cards, major): 禁止 3/4/6 张结构相同的"图标 + 标题 + 两行说明"卡片排成一行。信息分组要用 brief 指定的版式手段（表格、清单、编号条款、价签、标签……），且各项尺寸/权重应有差异。
- **禁用玻璃态** (glassmorphism, major): 禁止 backdrop-filter 毛玻璃、半透明白卡片叠在彩色背景上。
- **禁用 emoji 当图标** (emoji-icons, major): 禁止用 emoji（✨🚀⚡️🎯 等）充当图标、项目符号或装饰；也不要拿通用图标库（Heroicons/Lucide/Feather）当装饰。需要图形时用 brief 母题自绘 SVG 或纯排版符号。
- **禁用空洞营销文案** (buzzword-copy, major): 禁止 unlock / unleash / seamless / seamlessly / supercharge / elevate / empower / revolutionize / revolutionary / effortless 等英文空话，以及 赋能 / 无缝 / 一站式 / 极致体验 / 颠覆 / 引领未来 / 全方位 / 助力 等中文空话。文案只能由用户提供的事实构成，按 brief 的 voice 写。
- **禁用"圆角 + 柔和大阴影"一切** (soft-shadow-rounded, major): 禁止所有块都是 12–24px 圆角加 0 10px 30px 级别的柔和投影。圆角与阴影只能按 brief tokens 使用（--radius、--shadow：硬投影或不用，绝不模糊）。
- **禁止编造事实与社会证明** (invented-facts, critical): 禁止虚构数据条（"10K+ 用户 / 99.9% 可用"）、"Trusted by" logo 墙、带头像的假评价、假奖项。只用 facts 中给出的信息；缺信息就留空位或写明待补。
- **禁用框架默认色板** (tailwind-default-palette, major): 禁止直接用 Tailwind slate/indigo/violet/sky 默认色值（如 #6366f1、#8b5cf6、#0f172a、#3b82f6），禁止"深海军蓝底 + 霓虹强调色"的开发者工具外观（除非 brief 明确如此）。颜色只能来自 brief 调色板。
- **禁用"每段都淡入上浮"** (scroll-fade-everything, minor): 禁止给每个区块都加滚动淡入上浮（AOS / data-aos / IntersectionObserver fade-up）。动效只能按 brief motion 规格，且必须尊重 prefers-reduced-motion。
- **禁用标题上方的胶囊徽标** (pill-badge-sparkle, minor): 禁止在大标题上方放 "New ✨ / Now in beta →" 一类圆角胶囊小标签。
- **禁用占位内容** (placeholder-content, major): 禁止 Lorem ipsum、"Feature One"、通用图库人物照、随机 Unsplash 图。没有真实图片时，用排版、色块、自绘 SVG 或 brief 母题代替。
- **禁用 SaaS 模板分节** (template-sections, minor): 禁止 Hero → Features → Testimonials → Pricing → FAQ → CTA 的固定套路。分节顺序来自 brief layout 的 structure，内容按事实组织。

## tokens.css

```css
/* hash-design hash-design/v2 · 6ef0bf96 */
:root {
  --paper: #e3f5e9;
  --ink: #293d30;
  --muted: #636f67;
  --accent: #00995a;
  --on-accent: #000000;
  --accent2: #478be5;
  --on-accent2: #000000;
  --rule: #a7c0af;
  --panel: #d0e8d8;

  --font-display: "Xanh Mono", "Noto Sans SC", "Courier New", monospace;
  --font-body: "Libre Baskerville", "Noto Serif SC", Baskerville, Georgia, serif;
  --font-mono: "B612 Mono", "Courier New", monospace;
  --display-weight: 400;
  --display-tracking: -0.04em;

  --step-n2: 0.512rem; /* 8.2px */
  --step-n1: 0.715rem; /* 11.4px */
  --step-0: 1rem; /* 16px */
  --step-1: 1.398rem; /* 22.4px */
  --step-2: 1.954rem; /* 31.3px */
  --step-3: 2.732rem; /* 43.7px */
  --step-4: 3.82rem; /* 61.1px */
  --step-5: 5.34rem; /* 85.4px */
  --step-6: 7.465rem; /* 119.4px */
  --step-7: 10.436rem; /* 167px */
  --leading: 1.51;

  --space-1: 7px;
  --space-2: 14px;
  --space-3: 21px;
  --space-4: 28px;
  --space-5: 35px;
  --space-6: 42px;
  --space-7: 49px;
  --space-8: 56px;
  --section-gap: 103px;
  --max-width: 1250px;
  --columns: 9;
  --gutter: 7px;

  --radius: 16px;
  --border: 0px solid var(--rule);
  --shadow: 2px 2px 0 var(--ink);

  --motion-duration: 40ms;
  --motion-easing: cubic-bezier(0.9, 1.4, 0.37, 1);
}

html { font-size: 100%; }
body { background: var(--paper); color: var(--ink); font-family: var(--font-body); line-height: var(--leading); }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
}
```

## 交付前自检 Before you ship

- [ ] Fonts on the page are exactly: Xanh Mono / Libre Baskerville / B612 Mono (+ Noto Sans SC / Noto Serif SC)
- [ ] Every colour on the page comes from the 7 palette tokens above
- [ ] 9-column grid, text block in columns 2–7 of 9 (left of centre), first screen built around the initial letter (or first character) of the subject
- [ ] Copy uses first person plural ("we"), headlines are a label: a noun phrase, no verb, only the facts
- [ ] Radius 16px, hard 2px shadow, grain texture
- [ ] Twist applied: The main headline: set vertically (writing-mode: vertical-rl).
- [ ] `critique_page` (or `hash-design critique --brief 6ef0bf969f3cbf602400997a7e378c74429955cf879684fdb1e9d8338faed12e`) reports no critical/major findings
