This is a follow-up to Elena · Poem of the Sea Wind on aogl.cn. The first article introduced the HTML sheet, turnaround source, and May 18–20 exploration PNGs. Here I document what I actually maintain week to week: the palette contract, the five expression placeholders, and the “ritual UI” tone in elena_character_sheet.html—still personal archive work, not a commercial game SKU.
Why a second URL instead of editing the first post
Merging palette rules into the launch article would bury searchable phrases like character palette swatches and HTML reference sheet maintenance. Splitting lets the first page stay the onboarding story (who Elena is, what files exist) while this page answers “how do I change a color without breaking the sheet?” That mirrors how I split Earth WebGL from real planet textures.
Hard palette rows in the left panel
The sheet encodes primaries (ivory / sky blue / ocean blue / deep sea), secondaries (sand beige / warm gold), and accents (staff gold / crown green / gem blue). These are not decorative CSS—they are rejection criteria. If a new generative still pushes hair toward neon purple or shifts the skirt to crimson, I discard the frame before it touches ChatGPT-Image2.png. The inline swatches use hex values I copy into prompts as anchors; I do not auto-sync hex from PNG samples (that lied once when compression shifted skin tone).
Five expression discs: CSS filters as placeholders
Each mood circle reuses the face crop with filter:saturate/brightness/hue-rotate. That is intentional technical debt: I wanted the sheet shippable before five painted expressions existed. The footer of this article is honest—replace filters with real crops before any client delivery. For aogl.cn the filters document the UX slots (gentle / smile / contemplative / resolute / joyful) so layout does not jump when art arrives.
Ritual UI copy (confidential footer)
“Official Character Design · Confidential” reads like a AAA pipeline footer. On this site it signals layout tone only. I keep it because playtesters said the sheet felt more “real” with a footer bar—even though there is no NDA, no publisher, and no SKU. If I ever open-source the HTML, I will add a one-line disclaimer above the footer; until then the contrast between playful island lore and faux-confidential chrome is part of the demo.
Maintenance contract (v1.0)
- Replace
ChatGPT-Image2.png→ re-check all threeobject-positioncrops. - Change a hex swatch → update this article’s
dateModifiedand one changelog bullet. - Add a sixth expression → widen the grid in HTML first, then paint—never the reverse.
- Do not embed WebGL or Live2D here; animation belongs in a future article with its own scope paragraph.
Tool bookmarks I use beside the sheet
Look-dev stills: Gemini or Midjourney notes on this site. Code edits to the sheet: Cursor. Official model news (if I need a policy reminder): briefs. None of these links are endorsements—they are my directory entries.
Relation to games hub
I read games.html for first-party headlines, then return to character folders like original/game-girl/ for personal art passes—see Games hub RSS × generative art workflow for that Sunday routine. Store RSS does not auto-update the sheet; humans still merge decisions.
Scope boundary
No rig, no engine import, no gacha rates, no voice casting. If Elena gets a third article, it will be because a new artifact shipped (for example painted expressions)—not because I padded keywords.
Costume SVG cells: why inline vector placeholders
The sheet’s clothing breakdown uses simple inline SVG silhouettes—not final fashion flats. They exist so layout width stays stable when I swap PNG crops later. Each cell labels “主服 / 腰带 / 头饰 / 法杖” in Chinese because the sheet’s primary reader is me during maintenance; English articles explain the intent for visitors. I resist embedding raster costume pieces inside the SVG layer; rasters belong in the turnaround strip only.
Accent colors with hard reject rules
- Staff gold (#D4AF37) — if generative output pushes orange brass, reject; the staff must read metallic, not wooden.
- Crown green (#2E8B57) — only the vine crown; never bleed into hair highlights.
- Gem blue (#4169E1) — reserved for the tide-sand staff orb; do not reuse on eyes or lip gloss.
When a May 19 exploration violated gem blue on the pupils, I kept the PNG as a negative example locally but excluded it from the public gallery in the launch article.
Expression filter values (placeholder era)
Current CSS uses mild filters on the shared face crop: gentle (+5% brightness), smile (+10% saturate), contemplative (−8% brightness), resolute (+hue-rotate 5deg), joyful (+12% saturate). These numbers are not aesthetic goals—they prevent layout shift until painted discs arrive. Documenting them here means I can diff when replacing filters with real PNGs.
Version history I actually track
- 2026-05-18 — First turnaround + sheet HTML scaffold.
- 2026-05-20 — Palette rows locked; exploration gallery finalized.
- 2026-06-03 — Launch article published (sea-wind reference).
- 2026-06-18 — Palette & ritual UI notes split to this URL.
Any hex or filter change bumps the last row and triggers a changelog bullet—no silent edits.