/whatsthat: fix oversized starburst + swap accent to an AA-verified navy against the orange bg - #91
Merged
Merged
Conversation
BurstSvg's width was 140% of CardPanel's own rendered width - a value
carried over "verbatim" from the pre-redesign PrintingTagQueue.tsx, whose
card column was Col md={4} (33% of the row). The queue redesign widened
the card column to md={7} (58%) without correspondingly adjusting the
burst's own percentage, so on both desktop and mobile the starburst now
renders large enough to visually collide with the "What's That Card?"
page heading and the "Still need help with N cards" stats line above it
- content that didn't exist in the old component's layout and was never
accounted for in the 140% figure.
Reduced to 55%, verified via local screenshot at desktop (1280px) and
mobile (390px) widths: the burst now reads as a contained dramatic
accent behind the card without reaching into the heading/stats text.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014dB7mGPQyoML2Ri5ZrprdK
4 tasks
…gainst the orange bg The orange background (#ff4719) stays - owner-ratified as the page's deliberate identity. But the site-wide theme accent (#4c9be8, used for links/primary buttons/nav-pills active state) measures 1.16:1 contrast against it - nowhere near WCAG AA's 4.5:1 for text, and elements genuinely do drown into the background as reported. No light tint of any hue can fix this against this specific orange: even pure white only reaches 3.41:1 (orange's own luminance sits in a mid-range no light color clears by enough). Derived a new accent from Superhero's own info/cyan (#5bc0de) by uniform darkening (preserves hue/saturation) until AA-for-text is cleared: #12262c measures 4.60:1 against the orange (passes AA-normal-text), with white button text on it at 15.68:1. Scoped to StarburstBackground specifically (the element whose own background IS the orange) - NOT the sibling Footer, which sits on the standard dark body background where the original blue accent already has good contrast and must stay unchanged. Verified via live computed styles: the "Filter by attribute" link and Level 3's "Confirm & continue" button both now render the new navy; the footer's own links and a different page's nav links are confirmed unchanged. Real finding along the way: overriding --bs-primary/--bs-link-color-rgb alone doesn't reach .btn-primary's background - bootswatch's Superhero theme hardcodes a literal background-color on .btn-primary (not var(--bs-btn-bg)), at equal specificity and later in source order than Bootstrap's own custom-property-driven rule, so it wins regardless of what the custom property resolves to. Fixed by setting background-color/ border-color directly (specificity, not !important, wins the cascade) in addition to the custom properties. .btn-link (the "Filter by attribute" toggle) isn't affected by this - bootswatch's hardcoding loop only covers $theme-colors, not the link variant. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014dB7mGPQyoML2Ri5ZrprdK
WilfordGrimley
pushed a commit
that referenced
this pull request
Jul 18, 2026
- "A value carried verbatim out of its old context can silently stop meaning what it meant": generalizes PR #91's starburst width% (relative to a column width that changed under it) together with PR #78's existing "extracts X verbatim" entry as two instances of the same class. - "Bootswatch Superhero hardcodes some component colors as literal properties, not CSS custom-property references": PR #91's .btn-primary background-color finding — verify computed styles on a live element, not just that a --bs-* custom property resolved correctly. Neither was captured in docs/lessons.md by PR #91 itself (checked: its diff only touched cardPanel.tsx and whatsthat.tsx). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AHfxN9bbWAWHs8rfzVtBWt
This was referenced Jul 18, 2026
WilfordGrimley
added a commit
that referenced
this pull request
Jul 18, 2026
…tions (#100) * Consolidate today's conventions into CLAUDE.md; fix proposal docs CLAUDE.md: - Report-relay: replies must carry the full GitHub blob URL to the pushed report, not just branch+path. - New merge-duty rule: never delete a branch in the same action as merging its PR; precondition `gh pr list --base <branch>` empty before deleting (this is how PR #88 was lost to the stacked-PR base-deletion trap). - New rule: search for an existing recovery before rebuilding a lost/auto-closed PR (two sessions rebuilt #88 in parallel; #95 duplicated #94's already-shipped recovery). docs/proposals/proposal-b-bleed-normalization.md: - Correct decision 4's stale pre-PR-2 persistence note: the shipped mechanism is identifier-keyed localStorage (device-local, mirroring favoritesSlice), not SavedDeck/project-cloud state, matching proposal-g's own §5 description of the same mechanism. - Genericize "Proxxied"/"Steam Deck" design-reference mentions. docs/proposals/proposal-c-context-menu-restyle.md: - Mark Part (b) (solid-color utilitarian restyle) SUPERSEDED by Proposal H, which absorbs the restyle direction. - Genericize a "Proxxied" design-reference mention. docs/proposals/proposal-g-user-accounts-saved-decks.md: - Genericize a "Proxxied" design-reference mention. docs/proposals/proposal-h-unified-display-page.md: - Correct alex-taxiera/proxy-print's license label from MIT to AGPL-3.0 (verified against its actual GitHub license metadata); acoreyj/proxies-at-home remains correctly MIT. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AHfxN9bbWAWHs8rfzVtBWt * Add docs/lessons.md entries for PR #91's two findings - "A value carried verbatim out of its old context can silently stop meaning what it meant": generalizes PR #91's starburst width% (relative to a column width that changed under it) together with PR #78's existing "extracts X verbatim" entry as two instances of the same class. - "Bootswatch Superhero hardcodes some component colors as literal properties, not CSS custom-property references": PR #91's .btn-primary background-color finding — verify computed styles on a live element, not just that a --bs-* custom property resolved correctly. Neither was captured in docs/lessons.md by PR #91 itself (checked: its diff only touched cardPanel.tsx and whatsthat.tsx). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AHfxN9bbWAWHs8rfzVtBWt --------- Co-authored-by: Claude <noreply@anthropic.com>
WilfordGrimley
added a commit
that referenced
this pull request
Jul 18, 2026
…ce in the display rail (#102) Wires EditorSearchResponse.degradedQueries end to end for the first time on the frontend (previously captured by the API but discarded before reaching Redux): APIEditorSearch now returns {results, degradedQueries} instead of discarding the latter, searchResultsSlice accumulates degradedQueryHashKeys across paginated search requests, and a new selectIsSearchQueryDegraded selector answers "did this printing-filtered query get retried unfiltered" for a given slot's query. The display rail's always-visible header consumes that selector: the requested- printing badge switches from bg-secondary to a bg-warning degraded style (plus a warning icon and explanatory title) when the backend reports the filter as degraded, per the design doc's §2/§5. Bootswatch's Superhero theme is known to hardcode some component colors past the CSS-variable layer (see PR #91), so the new Playwright test verifies actual computed background-color, not just the class name, to confirm the degraded state really renders distinctly. The header also mounts the real DeckbuilderConfirmAffordance - the same component CardSlot.tsx already mounts, adapted only via its onOpenGridSelector prop: the rail has no modal to open, so N expands (or keeps expanded) the Choose Image accordion section instead of opening GridSelectorModal. Claude-Session: https://claude.ai/code/session_01MHapYojTkT5wenrQwGbGYk Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Two related
/whatsthatvisual fixes from the same investigation, both landing on this branch (same page area, owner's call on bundling):1. Oversized starburst (original commit)
BurstSvg'swidth: 140%was relative toCardPanel's own rendered width, carried over "verbatim" from the pre-redesignPrintingTagQueue.tsx, where the card column wasCol md={4}(33% of the row). The queue redesign widened the card column toCol md={7}(58%) without re-tuning the percentage, so the burst grew large enough to visually collide with the page's own heading and stats text. Reduced to55%, verified at desktop (1280px) and mobile (390px).2. Accent color swap (this update)
The
#ff4719orange background stays — owner-ratified as the page's deliberate loud identity. But the site-wide theme accent (#4c9be8, blue) measures 1.16:1 contrast against it — far under WCAG AA's 4.5:1 for text, so links/buttons genuinely drown into the background as reported.No light tint of any hue clears AA against this orange — even pure white only reaches 3.41:1 (orange's own luminance sits in a mid-range no light color beats by enough margin). Derived a new accent from Superhero's own info/cyan (
#5bc0de) by uniform darkening (preserves hue/saturation, only reduces luminance) until AA-for-text clears:#12262c(new accent) vs#ff4719(page bg)#12262c(button text on new accent)#4c9be8vs#ff4719#ff4719Scope: applied directly on
StarburstBackground(the element whose own background is the orange) — specifically not the siblingFooter, which sits on the page's standard dark body background where the original blue accent already has good contrast and must stay unchanged. Covers: links (--bs-link-color-rgb), the "Filter by attribute" toggle (.btn-link), Level 3's "Confirm & continue" (.btn-primary), and the moderator tab switcher's active pill (.nav-pills). Semantic colors (success/danger/warning) and the attribute chips' polarity fills are untouched, per the explicit scope.Real bug found along the way: overriding
--bs-primary/custom properties alone doesn't reach.btn-primary's background — bootswatch's Superhero theme hardcodes a literalbackground-coloron.btn-primary(notvar(--bs-btn-bg)), at equal specificity and later in the compiled source order than Bootstrap's own custom-property-driven rule, so it wins regardless of what the custom property resolves to. Fixed by settingbackground-color/border-colordirectly (specificity alone wins the cascade, no!importantneeded) in addition to the custom properties..btn-linkisn't affected by this — bootswatch's hardcoding loop only covers$theme-colors, not the link variant.Verified zero leakage: computed styles confirmed via live render —
/whatsthat's footer links and a completely different page's (/editor) nav link colors are both unchanged. Screenshots (before/after at desktop + mobile, plus the other-page-unchanged proof) attached to the accompanying chat report.Checklist
npx tsc --noEmit: clean except one pre-existing, unrelated error inDisplayPage.tsx(from a concurrent session's PR Proposal H, Step 1: /display route shell behind a feature flag #87, confirmed viagit log/git shownot caused by either change here).npx jest --runInBand: 32 suites / 345 tests passing.npx eslint+npx prettier --check: clean on all touched files.