Style Guide
Table of contents
This page exists to be looked at, not read — every element CyberLavandaTea
styles, rendered once, in order, so a change to _tokens.scss or
_components.scss shows up here first. It also proves the small stuff
still works: footnotes,1 for instance.
This is a heading level one
Rendered with the display face at its largest, an anchor id from its
slug, and a pilcrow (¶) that fades in on hover — the same render hook
handles every level below. Each level has its own voice rather than just
a smaller size, so the hierarchy reads at a glance.
This is a heading level two
Still the display face, a step down, with a hairline underneath and a short Primary segment at its start — in prose it opens a section, so it doubles as a divider. Also the level this page uses for its own section headers, which is why it shows up nested under “Heading level one” in the table of contents above.
This is a heading level three
Drops to the body face, bold, in Primary green: a sub-section title that stands out from the paragraph without competing with the h2 above it.
This is a heading level four
A mono, uppercase, letter-spaced label in Inactive grey, prefixed with a
Primary // — like a comment tag in a config file.
Body text
This theme renders Goldmark’s Markdown plus a handful of render hooks of
its own. Inline styles work as expected: emphasis, strong emphasis,
inline code, and a link to Hugo
— external, so it
picks up the outbound arrow.
Lists
An unordered list, nested one level, in the tree-triangle marker:
- Static site generators
- Hugo (Go — this site)
- Eleventy (Node)
- Zola (Rust)
- Build tooling
- Tailwind CSS v4
- Dart Sass
And an ordered list, in zero-padded mono indices, because sequence matters here:
- Write Markdown in
content/. - Hugo compiles templates and Markdown into static HTML.
- Tailwind processes
assets/css/main.cssand purges unused utilities. public/ships to a static host.
Links
An unvisited link is Link-blue, like the one to Hugo
above. This link back to the Lists section
turns Visited-sage
once you’ve clicked it. On :hover or :focus any link switches to
Primary green, with a focus ring for keyboard navigation.
Images
A lone image becomes a <figure> with a caption, centered:
Quote
The full layout is written in plain CSS, so the theme renders correctly even without Tailwind’s content detection.
Tables
| Format | Path | Consumed by |
|---|---|---|
| RSS | /index.xml | most feed readers |
| Atom | /atom.xml | feed readers, PubSubHubbub |
| JSON Feed | /index.json | JSON Feed readers |
| SearchIndex | /search.json | this site’s own client-side search |
Code
// buildIndex writes the search index used by /search.
const maxResults = 40
func buildIndex(posts []Post) (string, error) {
count := 0
for _, p := range posts {
if p.Draft {
continue
}
count++
}
return fmt.Sprintf("indexed %d posts", count), nil
}Buttons
Color & type reference
The same six roles, read directly from assets/scss/_tokens.scss:
| Role | Hex | |
|---|---|---|
| Primary | #5FD88F | |
| Content | #E6E6EC | |
| Background | #14151A | |
| Link | #4D9FFF | |
| Visited | #7EA88E | |
| Inactive | #8B8F9A |
And the typefaces that carry it:
| Role | Typeface |
|---|---|
| Display | Audiowide — h1, h2 |
| Body | Rajdhani — body text, h3 |
| Mono | JetBrains Mono (stack) — code, list markers, h4 |
| Signature | Sig Font, cursive fallback |
Goldmark’s footnote extension, rendered automatically below — and yes, it’s an
<ol>, so it gets the same zero-padded markers as every other numbered list on this page. ↩︎
Written by a human
Reference this post
Please reference this post with a link to this page. I prefer to be called Dev Person (they/them) or the CyberLavandaTea demo.