Info badge: the icon was a PanelContainer using StyleBoxFlat corner
radius to fake a circle, with the radius exceeding half the box size,
causing visible artifacts. Replaced with a custom-drawn Control
(draw_arc) for a clean ring at any size, and added a hover tooltip
explaining what each stat card measures.
Profile: Dictionary.get(key, default) only falls back when the key is
missing, not when it's present with a null value, so a null
displayName rendered as the literal string "<null>" (str(null) in
GDScript) - including pre-filling the edit-profile dialog with it.
Added a shared string_field() helper that treats null the same as
missing, applied everywhere an account/preference string field is
displayed or edited.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
The pause menu (Escape during a question/CCS/flashcards run) only had
Resume/UI Sounds/Exit Run/Log Out. Settings already has an equivalent
"Interface sounds" toggle, so drop the duplicate from the pause menu.
More importantly, "player" and "ccs_player" hide the entire app shell
(header + sidebar), so there was no way to reach Settings or Profile
at all mid-session - add Profile/Settings buttons to the pause menu to
close that gap.
Navigating there follows the existing return_screen payload
convention (already used by simulation_history/results/review) rather
than inventing new navigation infrastructure: _navigate_from_pause()
remembers current_screen_name and passes it through show_screen's
payload. Both screens show a "Back to session" button when that's
set, and hide it otherwise (including on ordinary non-paused visits).
show_screen() unconditionally resumes the question timer via
_close_app_menu() as a side effect of any navigation, so
_navigate_from_pause() re-pauses it immediately when leaving "player" -
the timer then resumes for real, for free, when the user actually
returns via show_screen(return_screen).
progress_profile.gd rebuilds its whole child tree on every theme
toggle (_rebuild -> _build), which would otherwise wipe the button's
visibility - added _refresh_back_to_session_visibility(), called both
after _build() and from on_show(), so it survives a theme change while
paused.
Flipped tests/web_responsive_test.gd's assertion, which previously
required the pause menu NOT to have a Profile button.
Verified end-to-end headlessly: opening the pause menu from a live
"player" session, navigating to Settings and Profile, confirming
current_question_pause_started_at is correctly paused while away and
resumed on return, confirming the back-to-session button appears only
when reached via pause (not on ordinary nav), and confirming it
survives a dark/light theme toggle on the Profile screen.
It checked for a "DynamicQuestionsIcon" mode card that no longer
exists in study_selector.gd (that mode moved to its own nav item and
screen a while back), so it always failed. CCS Cases is now also
UAT-gated and won't be present in the default test environment either,
so point the check at Question Bank, the one mode card that's always
rendered.
- A toolbar icon that hides itself at runtime (labs, notes,
flashcard, bookmark) left its text label behind, showing as an
orphaned label floating in a gap. The label's wrapper now tracks
the button's own visibility.
- The theme toggle used a distinct circular pill shape; changed it
to match the same rounded-square box every other toolbar icon uses.
Adapts the quiz screen's header, toolbar, choice cards, and bottom bar
to the designer's new layout:
- Header: adds the RanaZe logo/wordmark and a question-progress bar +
percentage alongside the existing "Question N of M" text.
- Toolbar: consolidates 12 icon-only/chip buttons into 6 labeled items
(Text size, Calculator, Clear highlight, Notes, Bookmark, More), with
a new "More" popup holding the rest (labs, flag, report, flashcard,
theme toggle, feedback). The underlying buttons are reparented, not
duplicated, so every existing theming/visibility/state call site
keeps working unmodified.
- Category tag: shows the question's discipline (falling back to
system) above the stem.
- Choice cards: every choice now renders as a subtly-bordered rounded
card even before answering, not just a flat divider row; the
currently-selected pre-submit choice shows a checkmark.
- Bottom bar: merges the Skip/Submit row and the timer row into one -
Skip as a plain link, a centered "X of Y" progress bar, and a
time slot that shows the existing countdown when a limit applies or
a new count-up stopwatch ("Time elapsed") otherwise, plus a
Ctrl+Enter/Cmd+Enter submit shortcut with a visible hint.