Both were still on the legacy flat-panel Style system, which made
"Review Questions" on the redesigned results screen drop into a
visibly older-looking screen. Rebuilt both with the same Brand card/
badge/accent-color language: a hero card for the break screen, and
color-coded (green/red-tinted, bordered) choice cards, accent-colored
filter chips, and icon headings for the review screen. Pure re-skin -
same functions, same data flow, only what they render into changed.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
RZ Shop joins the other UAT-only features (slot machine, flashcards,
CCS, dynamic questions) - hidden from the sidebar and no longer
reachable by clicking the header coin/rank badge in production. Also
drop the header's account avatar+chevron dropdown entirely: its only
contents (Profile, Settings, Log out) already live in the sidebar.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Review Questions is the only action this screen needs - leaving via
the sidebar already covers navigating elsewhere.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
The results screen was still the legacy VBoxContainer-of-plain-Labels
placeholder from before the Brand/medmind_style migration - no cards,
icons, or colored bars. Rebuild it with a score hero card (medallion
badge, predicted-range pill), three stat cards (correct, pass
probability, previously seen), and a two-column color-coded
content-area breakdown with progress bars, mirroring patterns already
used in progress_profile.gd and simulation_history.gd. No backend or
data changes - every field was already being fetched, just rendered
as bare text.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
timer_label and timer_caption_label were fully driven (text, color,
visibility) but never parented into the scene tree, so only the bare
progress bar rendered - no MM:SS readout or "Time remaining"/"Time
elapsed" caption in any session mode. Parent them into timer_footer
alongside the existing bar.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Simulations no longer color-code correct/incorrect choices, retry a
failed per-question autosave, or show the RZ coin/ELO badge - users
move on immediately after submitting a timed block, same as a real
exam. The slot machine panel now shows only the cabinet/reels/lever
and a status line (title, banner, controls row, rewards list, and
footer removed), the reels fill the cabinet window instead of
floating in a black border, the coin-burst animation no longer
starts oversized, and the toolbar button is UAT-only via
Brand.is_uat_environment().
Co-Authored-By: Claude Sonnet 5 <[email protected]>
The shield icon's dark/mushy rendering was caused by disabled mipmaps
on all 6 slot-machine icon textures (inherited from the flat lucide
icon convention, wrong for these gradient-heavy assets) - at small
display sizes this caused aliasing that hit the shield's fine detail
(RZ lettering, metallic bevels) hardest since the other icons are
bolder/simpler shapes. Enabling mipmaps/generate on all 6 fixes it;
confirmed by rendering the actual in-game presentation size before
and after, not just eyeballing the source file.
Also converts the slot machine from a full standalone screen (sidebar
nav entry, main.gd-managed) into a movable/draggable floating panel
opened from the question-player toolbar, mirroring the existing
calculator panel exactly: same top_level+custom title-bar-drag+
viewport-clamp mechanics, same open/close/toggle API, instantiated
once alongside the calculator and closed on session hide. Shrunk the
cabinet and restacked the rewards list below it (was beside it) to
fit a toolbox-sized floating panel instead of a full page, wrapped in
a ScrollContainer for any overflow.
Removed the sidebar entry and screens[] registration from main.gd and
the now-dead routing case from navigation_routes.gd.
Three real bugs from user testing:
- The lever was a plain TextureRect with mouse_filter set to IGNORE -
it visually looked interactive but could never receive a click.
Swapped it for a TextureButton wired to the same spin action, plus
a quick pull-and-spring-back rotation for tactile feedback.
- The "reel animation" was just rapidly swapping each cell's texture
in place - no actual motion. Reels are now real scrolling strips
(a clipped viewport + a taller VBoxContainer strip that scrolls and
recycles its front icon to the back), which is what an actual
spinning reel look/feel requires.
- Every reel unconditionally settled on the coin icon regardless of
what was actually won, so a jackpot and a QBank Reset Token looked
identical - the two facts users need to trust the mechanic. Reels
now settle with the real reward's icon landing in the middle
(payline) row on all three columns, with random decorative icons
above/below, so the visual result always matches the actual payout.
Verified the settle math directly (a reel-only probe confirming the
middle icon matches the requested target after recycling) and the
lever's click wiring (confirms _spinning toggles and the disabled
state round-trips), plus a real rendered screenshot of a settled
spin, before cleaning up the probes.