Code Editor Land - Design Language & System
Authoritative reference for the visual language of this site and the
architecture that implements it. Read this before touching fonts, colors,
themes, or component styling so changes stay coherent with the system instead of
fighting it.
The product: "VS Code, without Electron" - a Rust-core, Tauri-shell,
Effect-TS editor with gRPC/IPC/WASM protocol spines. Audience is
systems-software developers. The design language must read as technical,
precise, and confident, never decorative.
The design direction (canonical decisions)
These were chosen deliberately. Do not drift from them without an explicit
decision to.
- Dual theme - light + dark, both first-class. Light mode is required and
stays the austere flat-white system that exists today. Dark mode is a
cyberpunk terminal-HUD: near-black canvas, hairline grid rules,
restrained neon accents. A toggle switches them.
darkMode: "class" is
already configured in tailwind.config.js.
- "Polished and minimal" cyberpunk, not neon-slop. The HUD reads cyberpunk
through structure (mono chrome, grid lines, sharp corners, technical
labels) and restraint (accents glow only on interaction), not through
saturated color everywhere.
- Typography - three faces, each with a job:
- Instrument Serif - large display headlines (hero, section titles). The
"fancy" high-contrast voice. Used sparingly and big.
- Geist Mono - HUD chrome: eyebrows, labels, tags, metadata, code. The
technical voice.
- Geist (sans) - body copy and UI text. Replaces Albert Sans. See
Reference/Typography.md.
- Sharp corners stay.
--BorderRadius: 0 for cards/surfaces; only
buttons/inputs keep the logo-aligned 6px. No shadows or gradients in light
mode; dark mode may use a single subtle glow on focus/hover only.
- Protocol-spine palette = the accent system. gRPC green
#22c55e, IPC
blue #3b82f6, TCP orange #f97316, WASM purple #a855f7. These are
already tokenized; in dark mode they become the neon accents. Each has
Primary / Mute / Surface / Fore variants. See
Reference/Theme.md.
- Voice - marketing-led top-of-funnel, technical in docs. The current
default English copy is needlessly technical/hedged; standardize on a
confident benefit-led voice for hero/ features/pricing and keep
deep-technical prose for docs. See Reference/Copy.md.
Current status
- Implemented (in progress). Fonts, dual-theme tokens, theme toggle, the
hero overhaul, the calm/static motion pass, the modern tech-stack grid,
section eyebrows, feature card accent system, logo replacement, footer
refinement, and badge strip token pass are live. Remaining: theme-blind status
colors in Dashboard/DynamicAccountProfile/DynamicContactForm, emoji→icon swap,
copy pass. See Implementation learnings below.
- Errors fixed: missing peer deps
@testing-library/dom and react-is are
now declared devDependencies (the .npmrc has legacy-peer-deps=true, which
skips peer install, so peers of test libraries must be declared explicitly or
Astro's dep optimizer fails).
Implementation learnings (hard-won - read before editing)
- The real header is
Source/Component/Layout/Header.tsx, NOT
DynamicHeader.tsx. Pages import Header from
Source/Component/Layout/Header and render it client:load. Its background
lives in Source/Component/Layout/Header/Stylesheet.css (.Header), now a
frosted color-mix(var(--Background) 78%) + backdrop-filter bar. The theme
toggle (Source/Component/UI/ThemeToggle.tsx) is wired into Header.tsx's
action cluster.
- Hot reload works (Vite HMR). CSS + component edits hot-reload. Only
tailwind.config.js / astro.config.ts changes need a dev-server restart.
Don't restart for ordinary edits.
- Hard-coded
bg-white was everywhere (~110 sites). Swept to bg-card
(maps to var(--Card)), so cards/surfaces follow the theme. bg-black/50
modal scrims are legitimate and were left. Hex literals: only #EB5424 (Auth0
brand) remains, intentionally. CSS hex (#ffffff) in Header/Footer/Portal
stylesheets was tokenized too.
- PITFALL - never set
background-color on .StaccatoCard in plain
(unlayered) CSS. Unlayered rules beat Tailwind's @layer utilities, so a
.StaccatoCard { background } rule overrode bg-primary on IconTooltip
(which reuses .StaccatoCard) → dark-on-dark tooltips. Card definition
(hairline border + hover glow) is scoped to the named card classes
(.FeatureCard, .PricingCard, .TestimonialCard, .TransparencyCard,
.MasonryCard) instead.
- Calm/static motion is a core decision. The
Staccato/Attention noise
engine's scatter, tilt (per-card seed rotate), and scroll-parallax read as
dated ("2010"). They're neutralised: an always-on block in
Source/Function/Noise/Stylesheet.css zeroes the parallax/translate/rotate
transforms; the named card classes force transform: none; and the hero scene
animation is disabled (orbital cards sit static). Keep new sections static and
grid-aligned - do not reintroduce noise-driven motion.
- Hero tech stack: orbital diagram → HUD grid. The old hub-and-spokes
orbital (
DynamicHeroSection.tsx) was replaced with a
grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 of bordered tiles:
spine-accent edge bar + tinted lucide icon + mono uppercase label. Static,
grid-aligned. Pattern to reuse for other "diagram" sections.
- Hero title is only
TitleHighlight ("Land") - HomePage.tsx sets no main
Title. The big serif word is the headline by design; not a bug.
- Section spacing: content sections used
min-h-[100dvh] … justify-center
which ballooned sparse sections into huge empty bands. Removed →
w-full py-24 sm:py-32 (content-sized). The hero dropped lg:min-h-[200dvh]
(the parallax scroll region).
- Nav consolidated from 7 links to 4 (Features, Docs, Download, GitHub).
Blog/Contributing live in the footer; Dashboard is post-sign-in / via Portal.
- Icons:
lucide-react ("icon": "lucide" in components.json) is the
standard. Use it for all glyphs - no emoji in UI. Stray emoji (codename
tooltips, element-card Emoji field, Footer/Dashboard inline) are being
swapped to lucide.
- Theme-blind colors:
index.astro badge strip is now fixed - all chips use
spine tokens (var(--SpinegRPC*), var(--SpineIPC*), var(--Border), etc.)
via inline style=. Remaining theme-blind utilities are concentrated in
Dashboard.astro, DynamicAccountProfile, DynamicLocalFirstScan,
RichText, DynamicContactForm - need dark: variants or semantic status
tokens.
DynamicBadge dot colors were theme-blind (bg-green-500 etc.). Now use
DotColorTokenMap with spine CSS variables via
style={{ backgroundColor: … }}.
- Footer architecture - two separate components:
Source/Component/Layout/Footer.tsx - the real site footer, rendered
in Base.astro via <Footer client:idle />. Has brand, columns, NLnet
funding notice, bottom bar.
Source/Component/Dynamic/DynamicFooter.tsx - used on non-homepage pages
only.
- Both share the same
.Footer { background-color: var(--Background) } CSS
(no gray bg).
Layout/Footer.tsx column headers use
font-mono text-xs font-semibold uppercase tracking-wider text-muted-foreground.
- NLnet funding notice uses
border-l-2 with
borderLeftColor: var(--SpinegRPC) - not a gray box.
- Brand description uses
whitespace-pre-line to render \n\n as paragraph
breaks.
Architecture map (where things live)
The token pipeline is already a clean shadcn-style extraction. Respect these
layers:
| Layer |
File |
Role |
| Raw scales |
Source/Function/TailWind/DesignToken.css |
Color ramps (50-950), spacing scale, tech-color aliases. No semantics. |
| Semantic tokens |
Source/Stylesheet/Base.css |
--Background, --Foreground, --Primary, spine *Mute/*Surface/*Fore, component classes (.Button*, .Badge*, .Card). Dark mode overrides go here. |
| Tailwind bridge |
tailwind.config.js |
Maps tokens → utilities (bg-background, text-spine-grpc). fontFamily, darkMode: "class", safelist. |
| shadcn config |
components.json |
PascalCase aliases: components → ./Source/Component, utils → CN.ts. |
| Primitives |
Source/Component/UI/*.tsx |
~50 shadcn primitives (Button, Card, Badge, Dialog…). PascalCase filenames. |
| Feature components |
Source/Component/Dynamic/*.tsx |
41 composed components (Hero, Features, Pricing…). |
| Global CSS |
Source/Stylesheet/Global.css |
html/body base, font-family, scrollbar, selection, heading rules. |
| Font loading |
Source/Layout/Base.astro |
Google Fonts preconnect/preload pattern. |
| Copy / i18n |
Source/Library/I18n/Locale/<Lang>/*.json |
Localized strings (En, Bg, De, Es, Fr). |
Reference files:
- Reference/Typography.md - fonts, loading, heading
rollout.
- Reference/Theme.md - light + dark cyberpunk tokens,
accents, glow, toggle.
- Reference/Architecture.md - token pipeline +
composition/extraction.
- Reference/Copy.md - voice system (marketing vs
technical) + rewrites + glossary.
Quickstart - run & screenshot
npm install # peers now declared; needs legacy-peer-deps (already in .npmrc)
npm run Run # astro dev --host → http://localhost:9999/
To review visually, drive Chrome DevTools MCP against http://localhost:9999/
and screenshot. The dev server is the source of truth - verify visual changes
against http://localhost:9999/ before assuming the production domain
editor.land reflects your edits.
Implementation roadmap (deferred until approved)
- Fonts - add Geist, Geist Mono, Instrument Serif to the Google Fonts
request in
Base.astro; define --FontSans/--FontMono/--FontSerif in
Base.css; map fontFamily in tailwind.config.js. Drop Albert Sans.
(Reference/Typography.md)
- Heading rollout - serif applies to display headings (hero + section
H1/H2) via a
.Display/font-serif convention; small UI/card/dashboard
headings stay Geist sans. Don't blanket-serif all 55 heading tags.
- Dark theme - add a
.dark override block in Base.css mapping the
semantic surface tokens to the cyberpunk HUD palette; promote spine colors to
neon. (Reference/Theme.md)
- Theme toggle - wire a class toggle on
<html> with persisted
preference + system default; respect prefers-color-scheme.
- HUD details - hairline grid backdrop, mono eyebrows/labels,
interaction-only glow.
- Copy pass - rewrite hero/features/pricing strings to the marketing-led
voice across all five locales; move technical detail + caveats to docs.
(Reference/Copy.md)
- Validate - screenshot light + dark across hero, features, pricing, docs,
dashboard.
Logo
Public/Asset/Logo/Glyph/Land.svg - 32×32 black square (#151515) with a white
L mark (vertical bar + horizontal base). Self-contained across light and dark -
no CSS filter or inversion needed. The black background recedes in dark mode
leaving the white L floating. Do not add filter: invert() rules; the mark is
intentionally always-black-bg.
Section eyebrow pattern
Every content section title block uses a mono // eyebrow above the <h2>.
Pattern:
<p className="mb-4 font-mono text-xs tracking-[0.25em] text-[var(--MuteForeground)] uppercase">
<span className="text-[var(--SpinegRPCFore)]">//</span> Section Name
</p>
Established in hero (// Tech Stack) and rolled out to Features, Roadmap,
Architecture, Download. Apply to any new section heading. The green // is the
gRPC spine accent - it anchors every section to the technical HUD language.
Feature card accent system
Feature/content cards use two signals from the FeatureColorMap (feature ID →
spine token):
- Left border:
style={{ borderLeftColor: FeatureColor, borderLeftWidth: "2px" }} -
overrides the uniform 1px var(--Border) on the left side only.
- Icon container bg:
style={{ backgroundColor: FeatureColorMuteMap[Feature.Id] }} - uses the
*Mute tinted background (12% spine color on white / 18% on dark).
The FeatureColorMuteMap maps feature IDs to tokens like
var(--ExtensionRustMute), var(--SpineWASMMute) etc. Testimonial/masonry
cards already had the left-border pattern (borderLeftColor: AccentColor).
Feature cards now match. Keep this pattern consistent across any new card type
that represents a technology or element.
Section backgrounds
No alternating gray stripe. Features and Architecture previously used
bg-[var(--Mute)]. All content sections now use the plain white canvas
(bg-background or no bg class). The visual hierarchy comes from the card
borders and accent colors, not section backgrounds.
Conventions (non-negotiable in this repo)
- PascalCase for component files, CSS custom properties, and most
identifiers.
- Style through tokens, never hard-coded hex in components - add a token if
one is missing.
- Keep light mode flat: no shadows, no gradients, no rounded corners (except
button/input 6px).
- Prefer extending the existing primitive/token over inventing a parallel one.
- No alternating section backgrounds - no
bg-[var(--Mute)] on section
wrappers.
- Every section heading gets a
// eyebrow in Geist Mono uppercase.
Source: CodeEditorLand/WebSite — distributed by TomeVault.
1---2name: codeeditorland-website-land-design3description: Code Editor Land - Design Language & System4---56# Code Editor Land - Design Language & System78Authoritative reference for the visual language of this site and the9architecture that implements it. Read this before touching fonts, colors,10themes, or component styling so changes stay coherent with the system instead of11fighting it.1213The product: **"VS Code, without Electron"** - a Rust-core, Tauri-shell,14Effect-TS editor with gRPC/IPC/WASM protocol spines. Audience is15systems-software developers. The design language must read as **technical,16precise, and confident**, never decorative.1718## The design direction (canonical decisions)1920These were chosen deliberately. Do not drift from them without an explicit21decision to.22231. **Dual theme - light + dark, both first-class.** Light mode is required and24 stays the austere flat-white system that exists today. Dark mode is a25 **cyberpunk terminal-HUD**: near-black canvas, hairline grid rules,26 restrained neon accents. A toggle switches them. `darkMode: "class"` is27 already configured in `tailwind.config.js`.282. **"Polished and minimal" cyberpunk, not neon-slop.** The HUD reads cyberpunk29 through _structure_ (mono chrome, grid lines, sharp corners, technical30 labels) and _restraint_ (accents glow only on interaction), not through31 saturated color everywhere.323. **Typography - three faces, each with a job:**33 - **Instrument Serif** - large display headlines (hero, section titles). The34 "fancy" high-contrast voice. Used sparingly and big.35 - **Geist Mono** - HUD chrome: eyebrows, labels, tags, metadata, code. The36 technical voice.37 - **Geist (sans)** - body copy and UI text. Replaces Albert Sans. See38 [Reference/Typography.md](Reference/Typography.md).394. **Sharp corners stay.** `--BorderRadius: 0` for cards/surfaces; only40 buttons/inputs keep the logo-aligned 6px. No shadows or gradients in light41 mode; dark mode may use a single subtle glow on focus/hover only.425. **Protocol-spine palette = the accent system.** gRPC green `#22c55e`, IPC43 blue `#3b82f6`, TCP orange `#f97316`, WASM purple `#a855f7`. These are44 already tokenized; in dark mode they become the neon accents. Each has45 Primary / Mute / Surface / Fore variants. See46 [Reference/Theme.md](Reference/Theme.md).476. **Voice - marketing-led top-of-funnel, technical in docs.** The current48 default English copy is needlessly technical/hedged; standardize on a49 confident benefit-led voice for hero/ features/pricing and keep50 deep-technical prose for docs. See [Reference/Copy.md](Reference/Copy.md).5152## Current status5354- **Implemented (in progress).** Fonts, dual-theme tokens, theme toggle, the55 hero overhaul, the calm/static motion pass, the modern tech-stack grid,56 section eyebrows, feature card accent system, logo replacement, footer57 refinement, and badge strip token pass are live. Remaining: theme-blind status58 colors in Dashboard/DynamicAccountProfile/DynamicContactForm, emoji→icon swap,59 copy pass. See **Implementation learnings** below.60- **Errors fixed:** missing peer deps `@testing-library/dom` and `react-is` are61 now declared devDependencies (the `.npmrc` has `legacy-peer-deps=true`, which62 skips peer install, so peers of test libraries must be declared explicitly or63 Astro's dep optimizer fails).6465## Implementation learnings (hard-won - read before editing)6667- **The real header is `Source/Component/Layout/Header.tsx`**, NOT68 `DynamicHeader.tsx`. Pages import `Header` from69 `Source/Component/Layout/Header` and render it `client:load`. Its background70 lives in `Source/Component/Layout/Header/Stylesheet.css` (`.Header`), now a71 frosted `color-mix(var(--Background) 78%)` + `backdrop-filter` bar. The theme72 toggle (`Source/Component/UI/ThemeToggle.tsx`) is wired into Header.tsx's73 action cluster.74- **Hot reload works (Vite HMR).** CSS + component edits hot-reload. Only75 `tailwind.config.js` / `astro.config.ts` changes need a dev-server restart.76 Don't restart for ordinary edits.77- **Hard-coded `bg-white` was everywhere (~110 sites).** Swept to `bg-card`78 (maps to `var(--Card)`), so cards/surfaces follow the theme. `bg-black/50`79 modal scrims are legitimate and were left. Hex literals: only `#EB5424` (Auth080 brand) remains, intentionally. CSS hex (`#ffffff`) in Header/Footer/Portal81 stylesheets was tokenized too.82- **PITFALL - never set `background-color` on `.StaccatoCard` in plain83 (unlayered) CSS.** Unlayered rules beat Tailwind's `@layer utilities`, so a84 `.StaccatoCard { background }` rule overrode `bg-primary` on `IconTooltip`85 (which reuses `.StaccatoCard`) → dark-on-dark tooltips. Card definition86 (hairline border + hover glow) is scoped to the _named_ card classes87 (`.FeatureCard`, `.PricingCard`, `.TestimonialCard`, `.TransparencyCard`,88 `.MasonryCard`) instead.89- **Calm/static motion is a core decision.** The `Staccato`/`Attention` noise90 engine's scatter, tilt (per-card seed `rotate`), and scroll-parallax read as91 dated ("2010"). They're neutralised: an always-on block in92 `Source/Function/Noise/Stylesheet.css` zeroes the parallax/translate/rotate93 transforms; the named card classes force `transform: none`; and the hero scene94 animation is disabled (orbital cards sit static). Keep new sections static and95 grid-aligned - do not reintroduce noise-driven motion.96- **Hero tech stack: orbital diagram → HUD grid.** The old hub-and-spokes97 orbital (`DynamicHeroSection.tsx`) was replaced with a98 `grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4` of bordered tiles:99 spine-accent edge bar + tinted lucide icon + mono uppercase label. Static,100 grid-aligned. Pattern to reuse for other "diagram" sections.101- **Hero title is only `TitleHighlight`** ("Land") - `HomePage.tsx` sets no main102 `Title`. The big serif word is the headline by design; not a bug.103- **Section spacing:** content sections used `min-h-[100dvh] … justify-center`104 which ballooned sparse sections into huge empty bands. Removed →105 `w-full py-24 sm:py-32` (content-sized). The hero dropped `lg:min-h-[200dvh]`106 (the parallax scroll region).107- **Nav consolidated** from 7 links to 4 (Features, Docs, Download, GitHub).108 Blog/Contributing live in the footer; Dashboard is post-sign-in / via Portal.109- **Icons:** `lucide-react` (`"icon": "lucide"` in components.json) is the110 standard. Use it for all glyphs - no emoji in UI. Stray emoji (codename111 tooltips, element-card `Emoji` field, Footer/Dashboard inline) are being112 swapped to lucide.113- **Theme-blind colors:** `index.astro` badge strip is now fixed - all chips use114 spine tokens (`var(--SpinegRPC*)`, `var(--SpineIPC*)`, `var(--Border)`, etc.)115 via inline `style=`. Remaining theme-blind utilities are concentrated in116 `Dashboard.astro`, `DynamicAccountProfile`, `DynamicLocalFirstScan`,117 `RichText`, `DynamicContactForm` - need `dark:` variants or semantic status118 tokens.119- **`DynamicBadge` dot colors** were theme-blind (`bg-green-500` etc.). Now use120 `DotColorTokenMap` with spine CSS variables via121 `style={{ backgroundColor: … }}`.122- **Footer architecture - two separate components:**123 - `Source/Component/Layout/Footer.tsx` - the **real** site footer, rendered124 in `Base.astro` via `<Footer client:idle />`. Has brand, columns, NLnet125 funding notice, bottom bar.126 - `Source/Component/Dynamic/DynamicFooter.tsx` - used on non-homepage pages127 only.128 - Both share the same `.Footer { background-color: var(--Background) }` CSS129 (no gray bg).130 - `Layout/Footer.tsx` column headers use131 `font-mono text-xs font-semibold uppercase tracking-wider text-muted-foreground`.132 - NLnet funding notice uses `border-l-2` with133 `borderLeftColor: var(--SpinegRPC)` - not a gray box.134 - Brand description uses `whitespace-pre-line` to render `\n\n` as paragraph135 breaks.136137## Architecture map (where things live)138139The token pipeline is already a clean shadcn-style extraction. Respect these140layers:141142| Layer | File | Role |143| ------------------ | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |144| Raw scales | `Source/Function/TailWind/DesignToken.css` | Color ramps (50-950), spacing scale, tech-color aliases. No semantics. |145| Semantic tokens | `Source/Stylesheet/Base.css` | `--Background`, `--Foreground`, `--Primary`, spine `*Mute/*Surface/*Fore`, component classes (`.Button*`, `.Badge*`, `.Card`). **Dark mode overrides go here.** |146| Tailwind bridge | `tailwind.config.js` | Maps tokens → utilities (`bg-background`, `text-spine-grpc`). `fontFamily`, `darkMode: "class"`, safelist. |147| shadcn config | `components.json` | PascalCase aliases: components → `./Source/Component`, utils → `CN.ts`. |148| Primitives | `Source/Component/UI/*.tsx` | ~50 shadcn primitives (Button, Card, Badge, Dialog…). PascalCase filenames. |149| Feature components | `Source/Component/Dynamic/*.tsx` | 41 composed components (Hero, Features, Pricing…). |150| Global CSS | `Source/Stylesheet/Global.css` | `html`/`body` base, font-family, scrollbar, selection, heading rules. |151| Font loading | `Source/Layout/Base.astro` | Google Fonts preconnect/preload pattern. |152| Copy / i18n | `Source/Library/I18n/Locale/<Lang>/*.json` | Localized strings (En, Bg, De, Es, Fr). |153154Reference files:155156- [Reference/Typography.md](Reference/Typography.md) - fonts, loading, heading157 rollout.158- [Reference/Theme.md](Reference/Theme.md) - light + dark cyberpunk tokens,159 accents, glow, toggle.160- [Reference/Architecture.md](Reference/Architecture.md) - token pipeline +161 composition/extraction.162- [Reference/Copy.md](Reference/Copy.md) - voice system (marketing vs163 technical) + rewrites + glossary.164165## Quickstart - run & screenshot166167```bash168npm install # peers now declared; needs legacy-peer-deps (already in .npmrc)169npm run Run # astro dev --host → http://localhost:9999/170```171172To review visually, drive Chrome DevTools MCP against `http://localhost:9999/`173and screenshot. The dev server is the source of truth - verify visual changes174against `http://localhost:9999/` before assuming the production domain175`editor.land` reflects your edits.176177## Implementation roadmap (deferred until approved)1781791. **Fonts** - add Geist, Geist Mono, Instrument Serif to the Google Fonts180 request in `Base.astro`; define `--FontSans/--FontMono/--FontSerif` in181 `Base.css`; map `fontFamily` in `tailwind.config.js`. Drop Albert Sans.182 ([Reference/Typography.md](Reference/Typography.md))1832. **Heading rollout** - serif applies to _display_ headings (hero + section184 H1/H2) via a `.Display`/`font-serif` convention; small UI/card/dashboard185 headings stay Geist sans. Don't blanket-serif all 55 heading tags.1863. **Dark theme** - add a `.dark` override block in `Base.css` mapping the187 semantic surface tokens to the cyberpunk HUD palette; promote spine colors to188 neon. ([Reference/Theme.md](Reference/Theme.md))1894. **Theme toggle** - wire a class toggle on `<html>` with persisted190 preference + system default; respect `prefers-color-scheme`.1915. **HUD details** - hairline grid backdrop, mono eyebrows/labels,192 interaction-only glow.1936. **Copy pass** - rewrite hero/features/pricing strings to the marketing-led194 voice across all five locales; move technical detail + caveats to docs.195 ([Reference/Copy.md](Reference/Copy.md))1967. **Validate** - screenshot light + dark across hero, features, pricing, docs,197 dashboard.198199## Logo200201`Public/Asset/Logo/Glyph/Land.svg` - 32×32 black square (`#151515`) with a white202L mark (vertical bar + horizontal base). Self-contained across light and dark -203no CSS filter or inversion needed. The black background recedes in dark mode204leaving the white L floating. Do not add `filter: invert()` rules; the mark is205intentionally always-black-bg.206207## Section eyebrow pattern208209Every content section title block uses a mono `//` eyebrow **above** the `<h2>`.210Pattern:211212```tsx213<p className="mb-4 font-mono text-xs tracking-[0.25em] text-[var(--MuteForeground)] uppercase">214 <span className="text-[var(--SpinegRPCFore)]">//</span> Section Name215</p>216```217218Established in hero (`// Tech Stack`) and rolled out to Features, Roadmap,219Architecture, Download. Apply to any new section heading. The green `//` is the220gRPC spine accent - it anchors every section to the technical HUD language.221222## Feature card accent system223224Feature/content cards use two signals from the `FeatureColorMap` (feature ID →225spine token):2262271. **Left border**:228 `style={{ borderLeftColor: FeatureColor, borderLeftWidth: "2px" }}` -229 overrides the uniform `1px var(--Border)` on the left side only.2302. **Icon container bg**:231 `style={{ backgroundColor: FeatureColorMuteMap[Feature.Id] }}` - uses the232 `*Mute` tinted background (12% spine color on white / 18% on dark).233234The `FeatureColorMuteMap` maps feature IDs to tokens like235`var(--ExtensionRustMute)`, `var(--SpineWASMMute)` etc. Testimonial/masonry236cards already had the left-border pattern (`borderLeftColor: AccentColor`).237Feature cards now match. Keep this pattern consistent across any new card type238that represents a technology or element.239240## Section backgrounds241242**No alternating gray stripe.** Features and Architecture previously used243`bg-[var(--Mute)]`. All content sections now use the plain white canvas244(`bg-background` or no bg class). The visual hierarchy comes from the card245borders and accent colors, not section backgrounds.246247## Conventions (non-negotiable in this repo)248249- **PascalCase** for component files, CSS custom properties, and most250 identifiers.251- Style through **tokens**, never hard-coded hex in components - add a token if252 one is missing.253- Keep light mode flat: **no shadows, no gradients, no rounded corners** (except254 button/input 6px).255- Prefer extending the existing primitive/token over inventing a parallel one.256- **No alternating section backgrounds** - no `bg-[var(--Mute)]` on section257 wrappers.258- **Every section heading gets a `//` eyebrow** in Geist Mono uppercase.259260---261> Source: [CodeEditorLand/WebSite](https://github.com/CodeEditorLand/WebSite) — distributed by [TomeVault](https://tomevault.io).262<!-- tomevault:4.0:skill_md:2026-06-10 -->