The site uses the Dracula palette with system sans-serif type. The homepage, article headers and navigation follow study 09A. Monospace is reserved for code.
Layout and navigation
The page header, masthead text, post list and footer share a 700px column. The purple background spans the viewport. The homepage headline reaches 112px; article titles stop at 68px, or 55px for longer titles. Everything stays left aligned.
The homepage contains a brief introduction and the five most recent posts. The header links directly to Writing, About, Sports and Reading. Reading jumps to a section at the end of About. The footer holds the Rust reference, tags, RSS, GitHub and style guide. Both sets of links wrap on narrow screens.
Articles use the same purple masthead for their title, description, author and publication date. The body returns to the dark reading column. Archive, About and tag pages use the same shell without article metadata. Archive and tag pages show only the title in their masthead.
Reference pages
Only static reference pages use body.wide. Above 1224px, their main content can widen to 1272px and split into .panes. Their masthead and navigation keep the reading measure. Long code and tables scroll inside their own containers.
Colour
Use native CSS nesting to group related selectors and states under their component. Keep nesting shallow and preserve selector specificity. No preprocessor is needed.
CSS rules use tokens. Hex values belong in the :root definitions, not component rules. Purple surfaces use --color-masthead-text, the dark page colour, for text, links and focus outlines.
| Token | Role |
|---|---|
--c-iris | Site identity: purple mastheads and the brand suffix. Also code keywords and control selection. |
--c-foam | Links, focus and primary actions; function names in code. |
--c-gold | Tips and code strings. |
--c-love | Warnings and destructive actions. |
--c-rose | Component interaction accents and code literals. |
--c-pine | Decorative fills and rails. |
--color-border | Subtle dividers and outlines. |
--color-border-strong | Table header rules and stronger outlines. |
--color-muted | Decoration and disabled controls; never body copy. |
Sport filters may repeat their text labels with a hue on a border or fill. Sport chips also use that hue on their label. Colour never carries the category alone.
Typography
--font-sans uses the platform UI font, then Segoe UI and Arial. --font-mono uses installed developer fonts. No webfonts or theme assets are fetched.
Section headings
32px display · 26px section · 22px subsectionAn article title in the post list
26px desktop · 22px phone · normal weightBody copy has a 16px base and a 1.8 line height.
Descriptions 14px · metadata and navigation 13pxHeadings use sentence case and descend one level at a time. Hierarchy comes from size and spacing. There are no numbered heading decorations, prompts, status bars or blinking cursors. The homepage headline uses a 0.9 line height and tight tracking; article titles use 1.05.
Components
Post list
A quiet date sits above each title, followed by the description. A thin solid rule separates entries. Titles are neutral; archive links use cyan. Descriptions wrap in full.
- Evals are useful
Testing prompts and models with repeatable scenarios and clear assertions.
Code and tables
Code uses the inset surface, a subtle border and monospace type. Highlighting happens at build time. Wide tables belong in .scroll-x with a named region that can receive keyboard focus.
go build -o ssg .
go test ./...
Cards and callouts
Use cards for grouped reference material. Reading uses plain lists under muted shelf headings on About. Keep article lists unboxed. Card titles sit inside the surface.
Reference material
Keep related examples together under a short heading.
Note
Callouts use a label and a coloured rail. Their paragraphs keep the normal text colour.
Disclosure and controls
Reference details
Use native disclosure elements for optional information.
Tags, sport filters and reading shelves retain their category labels. Active controls change their fill or border as well as colour. Square corners apply throughout.
Accessibility
- Every page has one main heading and a skip link to its main content.
- Navigation wraps. Focusable text is never truncated or clipped.
- Focus rings are cyan on dark surfaces and dark on the purple masthead.
- Reference disclosures use native browser behavior and need no JavaScript.
- At 320px, the page stays within the viewport. Only code and table containers scroll sideways.
- The theme has no animation, external requests or scripts. The sports page keeps its existing content filters.
Layout tokens
| Token | Value |
|---|---|
--layout-width | 700px |
--layout-width-wide | 1272px |
--layout-pad-x | 48px; 28px below 760px; 22px below 540px |
--space-header | 30px; 21px on phones |
--space-masthead | 44px; 38px on phones |
--layout-pad-y | 44px; 35px on phones |
--space-1 through --space-6 | 4, 8, 16, 24, 40, 64px |
--text-hero | 50–112px |
--text-title | 39–68px |
--text-title-long | 34–55px |
The complete token definitions and shared components live in theme.css. Keep this guide in step with changes to those definitions.