Task List - Attempts Telemetry, Letter Lock-in, Color Flash, Global Stats, Victory Badge, Victory Quote, and Font Legibility
[x]Update database layerbackend/database.pyto record'attempt'events and fetch attempts stats.[x]Update API endpoints inbackend/admin_server.pyto parse and store attempts in local fallback file copy.[x]DeclarelockedInIndicesset in clientboxofficeblunders/app.jsand clear it on game start.[x]ModifyhandleGuessSubmit()to match correct letters on incorrect guesses, lock them in, and fire'attempt'telemetry event to the backend.[x]ModifygetPrefilledIndices()andrenderGuessSlots()inboxofficeblunders/app.jsto prefill locked-in correct letters.[x]Highlight locked-in correct letters in the UI with a satisfying neo-brutalist green style inboxofficeblunders/style.css.[x]Dynamically compute inputmaxLengthbased on locked-in letters to keep input typing aligned.[x]Bump version parameters forstyle.cssandapp.jsreferences inboxofficeblunders/index.htmlto bypass caches.[x]Add an early inline JavaScript color loader inside<head>ofboxofficeblunders/index.htmlto calculate colors and set CSS custom variables immediately, preventing the yellow-to-challenge background color flash.[x]Fix a JS syntax error (prefilledIndicesdouble declaration) inboxofficeblunders/app.jswhich blocked page execution.[x]Add a "Total Attempts" aggregate stat box to the "Global Box Office Stats" grid, layout out in a symmetrical 2x2 grid. (Replaced in follow-up task with a full attempts distribution graph, then reverted to Average Attempts).[x]Track local attempts count per puzzle in a local mappun_fiction_puzzle_attemptsinside client localStorage.[x]Display attempts count next to hints count in the victory Solved badge (e.g.Solved! No Hints • 3 Attempts).[x]Clear the attempts map when players click the "Reset Progress" button.[x]Add the parodied quote (final-boss-quotecontainer) to the correct answer victory screen underneath the plot description, rendering with a dashed purple border, italic layout, and highlighted pun/rhyme words.[x]Support recording attempts-to-solve distribution parameters (solve_att_1tosolve_att_5) inbackend/database.pyandbackend/admin_server.py.[x]Add a top-level "Avg Attempts" card inboxofficeblunders/index.htmlinside the 2x2 aggregate stats grid.[x]Calculate the weighted average attempts per solve insideopenStatsSelectModal()based on solved attempts distribution telemetry.[x]Remove the attempts distribution graph to keep the UI clean, lightweight, and focused.[x]Resolve the legibility issue between numbers1and7in theBangersfont by wrapping active challenge numbers in span tags styled with theNunitobody font (var(--font-body)) and heavy weight (900).[x]Change the.stat-valuestyling inboxofficeblunders/style.cssto use theNunitobody font for high-contrast numeric legibility.