Repository navigation
Shrink the empty portrait to a slim button - #111
Open
rayzhou-bit wants to merge 2 commits into
Open
rayzhou-bit wants to merge 2 commits into
rayzhou-bit wants to merge 2 commits into
Conversation
An empty portrait was a 96px box - about a quarter of a stat card's content height, on every card without one, and the same tax on note cards. It's now a 26px labelled button, reclaiming 70px. Slim rather than a small icon so it stays full-width in its column and remains a usable drop target, and always visible rather than hover-revealed: revealing it would shift the card's content every time the pointer crossed the card. Refits the fixture cards that were sized around the old box - the Barrow areas and the party sheets were left with ~85px of dead space once it went. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
blankTs called Date.now() fresh for every card and added a small offset, so if the clock ticked while the module evaluated, card A's `now + 2` and card B's `now + 1` landed on the same millisecond and two starter cards shared a timestamp. One clock reading for all three makes them distinct by construction. Mine, from #107. It passed locally because the three cards happened to evaluate inside one millisecond; CI's clock ticked and the test I wrote for exactly this caught it there. Ran the affected file 20x after the fix. Co-Authored-By: Claude Opus 5 <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.
An empty portrait was a 96px box — measured at 96px of a 394px content area, about a quarter of every stat card without a picture, and the same tax on note cards. It's now a 26px labelled button, reclaiming 70px.
Two deliberate choices
Slim strip, not a small icon. Keeping it full-width in its column means it stays a usable drop target. The
onDrophandler lives on the portrait wrapper, so shrinking it to an icon would have quietly made drag-and-drop almost unhittable — the kind of thing that still "works" in a test and fails in use.Always visible, not hover-revealed. The codebase hover-gates
+ Add textand+ Add Detail, so that was the obvious convention to follow — but those sit at the end of their card. This one sits at the top, so revealing it on hover would push everything below it down every time the pointer crossed the card.Fixture refit
The Barrow areas and the party sheets were sized around the old 96px box and were left with ~85px of dead space once it went. Re-measured and refitted: 32 → 27 units for the areas, 34 → 29 for the party sheets, landing at 21–25px of slack with no content overflow.
Verification
847 tests pass, build clean. Checked in the browser on the canvas and in the Library (which has its own smaller portrait sizing): placeholder is 26px, no content overflow, no card overlaps on either refitted tab.
Still open
Nothing here lets someone make an image — that was the second half of the ask and needs a decision before I build it. There's also no paste support anywhere in the app (
onPasteonly appears on title fields, for text), which is probably the cheapest way to get an image onto a card.🤖 Generated with Claude Code