feat(ui): splash screen + main-menu design pass#53
Conversation
Hand-authored 480×120 SVG with Georgia serif P&K logotype, FOREVER subtitle in pnk-orange, and decorative rule lines with accent dots. Used in both game-splash and start-menu screens via CSS background. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Skip the engine splash (narrat branding) and activate the game-splash scene with "Begin the Story" button text. Engine splash removed via splashScreens.engineSplashScreen.skip: true. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Splash screen: warm radial bg, ambient glow animation, SVG wordmark replaces plain title text, themed "Begin the Story" button with lift-on-hover and correct z-stacking - Main menu (#game-menu): matching radial bg, orange divider rule, SVG wordmark on #game-title-text, themed .main-menu-button states - Volume-select: rose/teal left-border accent per choice, Vol. I / Vol. II badge via ::after, card-feel padding - Systemic focus rings on all interactive elements via :focus-visible - Hover motion (translateY/X + shadow) gated on prefers-reduced-motion - Design tokens: --pnk-rose, --pnk-teal, --pnk-dark, motion vars Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
✅ Deploy Preview for p-n-k-forever ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e2777c7685
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| display: block !important; | ||
| width: 400px !important; | ||
| height: 100px !important; | ||
| background: url('/img/ui/splash/wordmark.svg') center/contain no-repeat !important; |
There was a problem hiding this comment.
Use relative URL for wordmark asset
This hard-codes the wordmark to a root-absolute path (/img/...), but this project is built with base: './' in v1-modern/vite.config.ts, so production deployments under a subpath (or opening dist/index.html directly) will resolve the image from the host root and fail to load it. Because this selector also sets font-size: 0, the fallback text is hidden, so the splash/menu title can disappear entirely in those environments. Please switch to a base-aware relative URL (and apply the same fix to the identical #game-title-text background rule).
Useful? React with 👍 / 👎.
Round 2 of the UI pass — replaces placeholder gradients with hand-painted Gemini-generated backgrounds, softens UI copy from game-style to anniversary-gift tone, and works around a narrat scene-mount bug that left the splash stuck at opacity 0. Art (art-director + game-artist / nano banana): - splash_bg.jpg — balcony at golden dusk, sheer curtains billowing over a sunset view. Natural darker center band for the wordmark - menu_bg.jpg — two coffee cups + orange-blossom letter on a sunlit table. Left-side shadow for the button stack - paper_texture.png — 1024px warm-cream grain, layered at 8% opacity under both menu and any .pnk-paper-overlay container Copy (game-narrative): - Splash CTA: "Begin the Story" → "Come inside" - Volume-picker intro: "a story kept, chapter by chapter." - Volume options: "The original · read it the way it was first written" and "The full story · all the chapters, from the beach onward" CSS fix: - .game-scene wrappers were computing opacity: 0 because narrat's prod CSS only ships .narrat-transition-fade-enter-from (opacity 0) and -active (transition-property: opacity), but no enter-to rule to commit the fade-in. Added our own pnkSceneFadeIn keyframe so scenes fade in cleanly, with prefers-reduced-motion gate Also adds scripts/gemini-generate-ui.mjs so future art regens are one command away. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
Agent: Claude Code ( Level-up pass — painted backgrounds, warmer copy, scene-fade fixPushed commit Art (art-director → game-artist / nano banana)
Copy (game-narrative)
Regression fix
Verified in preview (port 4173)
Still open
Prompt used to generate this comment |
"A Love Story in Two Volumes" read like a movie-poster tagline. "Tel Aviv · Kyoto · Vancouver" is grounded and specific — the three cities the couple has actually been. Drops uppercase + reduces letter-spacing so it reads as a quiet caption, not an advertisement. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
Agent: Claude Code ( Verdict: APPROVE — ship it. No blocking issues. Sacred line intact, end-to-end playtest passed, scope is CSS + copy + new assets only. Three parallel reviews (critic, plan-reviewer x2) converge on ready-to-merge. Two recurring concerns, both non-blocking:
No save/load, CI, easter-egg-keyword, or narrat-script touches. Prompt used to generate this comment |
Summary
First real UI chrome pass for PNK Forever v1. Replaces the CSS-gradient placeholder main menu with a proper splash screen, wordmark, polished start-menu buttons, and systemic focus/hover motion. Dispatched via the `game-ui-artist` subagent.
This closes a long-standing gap: the menu has been a bare `linear-gradient` with a single gradient button since day one (see HANDOVER.md:235 aspiration that was never dispatched).
What landed
Why splashScreens over an HTML overlay
narrat boots into `#app` on `DOMContentLoaded` and owns the transition between splash → main-menu → script. An HTML overlay would have had to race that boot order and manually fade itself out once narrat mounted; the native `splashScreens` config lets narrat handle the sequencing.
What didn't land (known gap)
Volume-select choice styling is a no-op. The subagent wrote rose/teal card styles targeting `.nrt-choice-button`, but narrat actually emits `p.dialog-choice` with `.choice-index` / `.choice-text` children. The selectors don't match the real DOM, so the volume-select screen falls back to narrat's default dialog-text rendering (functional but unstyled).
Filing a P2 follow-up issue to retarget the CSS at the real selectors.
Verification
Verified locally via `vite preview` + Claude Preview MCP — screenshots confirm:
Test plan
Files changed
Total new UI asset payload: ~1 KB (well under the 200 KB cap in the `game-ui-artist` agent spec).
Sacred constraints
🤖 Generated with Claude Code