๐ŸŽฎ Player & Library โ€” Design Audit

Superseded โ€” 2026-07-24

P3โ€™s prose-only unavailable state is superseded by Program Masterplan as of 2026-08-02: current source renders an icon, heading, explanatory copy and an optional filtered Builder CTA, Catalog and Subjects now inherit the public --qw-* root, and explicit player mood palettes remain intentional. Player chrome, loading/retry behavior and the original theme/geometry measurements were not browser-rerun. Preserved as observed.

TL;DR

Player has the cleanest content-first card and the only real theme system (6 presentations) โ€” but themes fork the same token names 6ร— instead of layering overrides on one base. Library/embeds introduce a third namespace (--qwizz-*). Loading spinner now fixed (FE-8). Grade: A themes-intent ยท C token craft ยท B chrome-less ยท B- library.

  • surface: [quizwizz_quiz] player ยท [quizwizz_library] / subjects embeds
  • files: qwizz-player.css ยท qwizz-player.js ยท qwizz-embeds.css ยท QuizEmbed.php
  • themes: default + dark ยท retro ยท cyber ยท love ยท aqua

๐Ÿงญ Rubric scores (1โ€“5)

LensScoreOne-line
Visual hierarchy4Legend clamp 1.28โ€“1.9rem/800; answers as big targets
IA / progressive disclosure4One question at a time; review after submit
Information scent3Library cards OK; empty catalog is flat
Chrome-less / content-first5max-width:780px;margin:auto card โ€” best chrome-less surface
Hook paths & density4Play loop tight; theme choice is a hook
Visual weight & Gestalt4Card + progress + answers group cleanly
AR / rhythm4Clamp padding; responsive stack at 620px
Art direction5Six distinct moods; strongest AD in the product
Design-token discipline26 full redefinitions of --qw-ink/--qw-line/--qw-softโ€ฆ
Affordances & signifiers4Answer labels as buttons; result states via data-result
Fitts / Hicks4Full-width answer rows; primary actions spacious
Hover-intent vs instant3Instant select; limited hover foreshadow
Escape hatches4renderFailure() + Try again + Retry-After
Micro-interactions / continuity4Progress bar transition; FE-8 spinner; reduced-motion guard

๐Ÿ”ฌ Findings

#FindingSevEvidence
P1Theme system re-declares full palettes (no base+override)๐ŸŸ Six scopes in qwizz-player.css: default + `[data-theme=dark
P2Third token namespace on embeds๐ŸŸ .qwizz-catalog,.qwizz-subjects{--qwizz-violet:#6d28d9;--qwizz-ink:#241c30;--qwizz-muted:#706778}
P3Library empty / unavailable state is low-scent๐ŸŸกQuizEmbed::unavailable() โ†’ .qwizz-library__empty prose only; no CTA into Studio
P4Loading state now has spinnerโœ…FE-8: .qwizz-player__loading::before spin + QuizEmbed.php class
P5Failure/retry already solidโœ…renderFailure() + Try again + Retry-After

Theme palette map (art direction โ€” keep)

Theme--qw-vMood
default#6d28d9violet product
dark#a78bfanight
retro#b83d2bsepia paper
cyber#f5d90aneon on #0e0b1e
love#c2185brose
aqua#0e7490ocean

๐Ÿฉน Prioritized fixes

  1. ๐ŸŸ  Refactor themes to base on .qwizz-player + sparse [data-theme] overrides
  2. ๐ŸŸ  Migrate embeds --qwizz-* โ†’ --qw-* aliases
  3. ๐ŸŸก Enrich unavailable/empty with CTA โ†’ Studio
  4. Keep theme moods; document as AD SSOT in tokens-palette

๐Ÿ”— Anchors

  • css: qwizz-player.css theme scopes ยท FE-8 loading block
  • embeds: qwizz-embeds.css .qwizz-library-card
  • related: tokens-palette ยท patch-spec

  • auditor: CSS inventory + prior live FE-8 proof + QuizEmbed source