This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Realm is the visual exploration portal for cytrogen.icu. It replaces the root domain's previous blog with a Castlevania-inspired territory map. The blog lives at blog.cytrogen.icu.
Design language: Deep cold tones (oklch blues), high-saturation orange as the sole accent, flat geometry, no strokes, no gradients, large color blocks.
Tech stack: Pure HTML + CSS. Zero JavaScript. All SVG is inline. No build tools, no bundler, no framework.
Push-to-deploy via bare repo on VPS (accessible as ssh vps-user):
git push origin main
The post-receive hook at ~/repos/realm.git/hooks/post-receive performs:
/var/www/realm (excludes .git, caddy/, CLAUDE.md)ssh://git@localhost:22222/~cytrogen/realm)Caddy config lives at /etc/caddy/Caddyfile on the VPS (backup at ~/vps-deploy/Caddyfile). Editing requires sudo. The caddy/ directory in this repo contains reference snippets only.
| Subdomain | Service | Backend |
|---|---|---|
| cytrogen.icu | Phase 1: 301 → blog.cytrogen.icu | Caddy redirect |
| blog.cytrogen.icu | Hexo blog (static) | /var/www/blog.cytrogen.icu |
| git.cytrogen.icu | Sourcehut git | localhost:5003 |
| meta.cytrogen.icu | Sourcehut meta | localhost:5001 |
| rss.cytrogen.icu | FreshRSS | localhost:8096 |
| status.cytrogen.icu | Beszel | localhost:8090 |
| mail.cytrogen.icu | Stalwart | localhost:8080 |
Blog deploys via ~/repos/blog.git → builds Hexo → /var/www/blog.cytrogen.icu → pushes to Sourcehut (blog-local + blog-public).
css/realm.css)Single stylesheet using @layer for cascade control:
@layer reset, tokens, base, layout, components, utilities;
:root.svg-icon, .svg-interactive), navigation, panels@property declarations at file top enable smooth color transitions on SVG fillsprefers-reduced-motion kills all transition durations globallyColors use oklch with relative color syntax (oklch(from var(--accent) ...)) for derived variants.
All SVG assets are inline in the HTML DOM — never <img> or <object>.
<symbol> in a hidden sprite block, referenced via <use href="#id">aria-hidden="true" focusable="false"role="img" aria-labelledby="title-id" with <title> as first childfill attributesstroke attributes anywhere. No gradients. Fill-only flat geometry.viewBox only — omit explicit width/height on <symbol> for responsive scalingindex.html — Realm entry, contains the SVG sprite <defs> block and navigationpages/contact.html — 领地联络处 (Contact)caddy/ — Reference Caddyfile snippets (not deployed)/var/www/blog.cytrogen.icucss/realm.css.realm-scene, .realm-layer--far/mid/near are pre-defined in the layout layer./var/www/realm), remove 301 redirects:hover, :focus-visible, transitions, @property animations)aria-hidden, label informative SVG, respect prefers-reduced-motion