The torus backdrop and film-grain glass were too much, so this goes back
to the quieter dithered field and the lighter frosted surfaces, keeping
the light-theme and status-chip removals from the previous commit.
The hero now lays out as a three-part grid: the photo pinned to the top
left, the contact buttons directly under it, and the text column beside
them, so the left column carries weight instead of leaving ragged space.
The contact buttons lose their labels and become 48px icon squares that
line up exactly with the width of the photo. On narrow screens the photo
drops out and the contact row moves below the text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Replace the flat dither backdrop with a lit, rotating torus drawn the
way donut.c does it: a z-buffer per cell and a luminance ramp from a
dot to a solid block, sized against the shorter viewport axis. The
dither field stays underneath as dust. It leads on the landing page
and fades back where there is reading to do, and a scrim keeps the
projects heading legible over it.
- Thicken the glass: one .surface treatment with a heavier blur, more
transparency and an SVG film grain, shared by the header, hero,
cards, panels and footer.
- Give the landing page labelled contact cards for LinkedIn, Gitea and
email in place of three bare icons.
- Drop the status chips from project cards and entry headers.
- Remove the light theme, its toggle and theme.js outright.
- Add restrained motion: underlines growing from the left on links and
nav items, a lift on cards, buttons and contact cards, and tags
brightening with their card. All of it is off under
prefers-reduced-motion.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The first pass applied terminal decoration to everything, which read as
costume rather than design. Strip it back to a few deliberate cues and
let an animated backdrop carry the character instead:
- Drop the prefix glyphs from links, tags, nav items, badges and
headings, and restore plain section names in place of snake_case.
- Keep one prompt in the hero, the ~/ on the wordmark, ISO dates and
status dots; everything else is ordinary type.
- Restore depth: acrylic surfaces over soft radial light, 6px radii,
and an accent glow on the primary action and status dots.
- Draw a dithered ASCII field behind the page. A fixed per-cell dither
value decides which cells are lit so coverage stays even, while slow
interfering waves move brightness through it. It idles when the tab
is hidden and stays still under prefers-reduced-motion.
- Remove the nested panel boxes on the projects page and size the entry
page to its article column.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>