the locked image now gets a small pinned copy (18rem, same width as the text column) that appears once the real preview scrolls out of view and disappears again once the text runs out — fixed-position + scroll-driven rather than CSS sticky, since the filebrowser box is only ever as tall as its own content, not the much taller text next to it.\n\nalso scoped the existing click-outside-unfreezes-the-lock listener to clicks inside .filebrowser only, since with listings now starting locked, a click to read or select a word in the text would otherwise silently kill the sticky preview.\n\nportfolio index: rows there are real links (href + data-img together), so a single click used to jump straight into the project — the only way to preview a different one first was hovering, which does nothing for touch and is now also blocked while something is locked. first click on a different project now just previews it (like hover used to); a second click on the same row, or clicking the preview image itself, opens it.
same end state as clicking the first row by hand — hovering other rows no longer steals the preview until you actually click one. clicking a different row still jumps straight to it and relocks there; clicking the locked row again releases it back to hover-browsing. games are excluded (nothing to browse), matched via the game-embed class rather than page context so it stays correct no matter which page a game was launched from.
the .. row has no image/video/text of its own, so the preview fell through to the blank-everything branch — most noticeable on video projects, where the video would stop and vanish. now non-preview rows just leave whatever was last shown in place.
new video project (Basic Lecture MAA, FS26) mirrors the-shadow-over-emmen exactly: video + thumbnail, no body text, no images list. video re-encoded to ~1.7Mbps h264/aac (matches shadow.mp4 bitrate), thumbnail is a representative frame.\n\nhotel national: swapped the typst-export images for the original higher-res photos/plans from hotel-national-images/, credited co-author Tamara Grabovska in the text.
new: hotel national (MA studio, 2026), translation (MA collage collab. with Tim Schwander + Jérôme Arnold, 2026), utopie der koexistenz (BA thesis, Kantonsspital Baden, 2025) — text sourced from portfolio-2026.typ, translated EN<->DE, images pulled from the higher-res portfolio-export folder and converted to webp.
Generalized the doom launcher into launchGame(name) keyed by archive.org identifier; each cds into a fake .<name> folder and runs <name>.sh, same as doom.
cds into a fake .doom folder (breadcrumb + file listing match every other page); .. is a real link back to wherever you typed doom from, so leaving is just normal pjax navigation.
about now lists cv.md, openbureau.md, rapport.md, dossier.md side by side. the standalone /openbureau/ page, its layout, and its home-menu entry are gone; internal links repointed to /about/. also switch the info-panel text to justified (with hyphenation, per earlier request) instead of ragged-right.
Self-hosted, subset to exactly the glyphs the site uses (fonttools --unicodes), so the pair is smaller (6.4+6.3KB) than the curly-slab files they replace despite covering en+de plus shell/tree symbols.
kgva can now be edited through openbureau-core instead of Decap: a small Node CMS
(git subtree at cms/core) with a schema-driven editor at /admin, file-based login
(no Supabase/Postgres), Markdown on disk. cms/kgva.config.js models the content
(portfolio/pages/sections); docker-compose builds the core image (Hugo 0.163.3,
no VITE_SUPABASE_URL → local-auth admin) and mounts the repo as the site. seed an
admin via cms/seed-admin.mjs; deploy/provision-lxc.sh + ADMIN.md updated.
Verified DB-less end-to-end on real content (staged): local login → schema-driven
editor → 42 entries (de/en) → stats → create/preview/cleanup; unknown frontmatter
(image galleries) preserved on save. The LIVE static site (CT130 timer→hugo→nginx)
is unaffected — hugo ignores cms/; the CMS is dormant until provisioned.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>