Pebble Improvement Roadmap
This roadmap turns the Visual Audit into ordered work. It favors the smallest changes that restore hierarchy before adding new decoration.
Phase A — remove the visual failures
- Verify the deployed
games/pebble/build/identity against the intended source before styling further. - Replace the game-over gradient stack with a single
card bg-base-100 border border-base-300 shadow-xlresult surface. - Replace the level-clear overlay with the same surface contract and a clear
Continueaction. - Remove the play-mode navbar
shadow-[var(--shadow-2)]; use a border orshadow-sm. - Remove GamePill hover lift and default shadow; use a restrained Daisy semantic badge/context state.
- Establish page
base-200, boardbase-300, and HUDbase-100surfaces. - Make the canvas letterbox intentional and remove unexplained blank mobile space.
Phase B — compose the game
- Build a unified HUD rail containing labeled Score, Level, Balls, Orange left, and Multiplier values.
- Move readability-critical metrics outside the canvas while retaining canvas feedback for immediacy.
- Rework
FREE BALLas a clearly identifiable moving gameplay target, not a tiny button-like label. - Use one feedback lane for Multiball, Free Ball, Lucky Bucket, and Level Clear notifications.
- Reduce trajectory styling to a subtle prediction line with a clear aim/release distinction.
- Keep peg semantics aligned with Daisy roles: warning orange, accent/secondary specials, primary launcher, success clear.
- Redesign mobile around a compact header, two-row HUD, 16:9 board, and deliberate action/status dock.
Phase C — theme and accessibility hardening
- Resolve the Funday theme once and pass it through the existing ViewportPool/GameViewport/FundayBridge boundary.
- Ensure the iframe does not paint a bright fallback surface before theme variables are ready.
- Test fresh browser, stored light, stored dark, system light, system dark, SPA navigation, and iframe reload.
- Add DOM/live-region equivalents for score, level, remaining orange pegs, multiplier, bonuses, and terminal states.
- Make overlay actions keyboard reachable with correct focus return.
- Add reduced-motion behavior for confetti, score popups, bucket flash, launcher recoil, and overlay transitions.
- Test all supported Daisy themes and ensure special pegs are distinguishable without color alone.
Phase D — platform and performance hardening
- Keep canvas references and rendering outside Svelte
$state()proxies. - Preserve stable iframe identity through ViewportPool; do not recreate the iframe for ordinary state changes.
- Keep shell/iframe communication on the FundayBridge contract; do not add raw
postMessagetoGameViewport.svelte. - Avoid giant blur filters, stacked shadows, and large gradient layers on low-end mobile.
- Add shell and iframe build identifiers so stale-artifact drift is diagnosable.
Priority matrix
| Priority | Scope | Outcome |
|---|---|---|
| P0 | Game-over, theme, board surface, shell elevation, artifact verification | Removes the visible “unfinished” feeling |
| P1 | HUD, feedback lane, mobile composition, level-clear | Makes gameplay legible and cohesive |
| P2 | Accessibility, reduced motion, theme matrix, performance | Makes the result durable across users and devices |
Definition of done
- No giant generic shell shadow in play mode.
- No gradient-heavy game-over or level-clear screen.
- No unexplained blank mobile letterbox.
- All gameplay metrics have labels and hierarchy.
- Shell and iframe use one resolved semantic theme.
- Public route screenshots prove desktop, mobile, gameplay feedback, game-over, and level-clear states.