A dame.is & pds.dad production bsky38.com

Give the tally bar a track you can see past, and the share messages names #67

Merged dame.is
targeting main
Merged opened by and assigned to dame.is
targeting main

The bar's track was line, which is pure black in light mode. A blue fill at 60% opacity over black is two dark colours an arm's length apart, 1.9:1, and the filled length is the only thing the bar is for. On hairline, the soft rule this design keeps for exactly this job, it goes to 4.0:1, and the fill can climb back to full strength so the rank tiers separate by weight rather than by all being faint together. Dark lands at 2.9:1, a shade under the 3:1 that non-text contrast asks for but far past where it was, and the hue carries the rest.

paper measured better still, 5.2:1, but a track the colour of the recessed ground all but disappears against the card, and a bar with no visible extent has nothing to be read against. Comparing lengths is the entire point of a column of them.

The ballot message now names a few of the ballot. It named nobody before, on the grounds that a ballot was thirty-eight handles and a partial list would imply a ranking. The first half of that was simply wrong: a ballot is ten votes, and thirty-eight is how many names the list ends up with. Three handles a reader already follows say more about what this is than any sentence describing it, and the sample is shuffled off the ballot's own dids rather than Math.random() so the message holds still under an open menu instead of re-rolling on every tick. Names drop from the end until the post fits, so ten long handles shorten rather than overflow, and a ballot whose profiles have not landed yet falls back to describing the poll.

The rest of the copy lost the framing it was leaning on. "A readers' poll with no shortlist" is a phrase about polls, not about this one; what a stranger needs is that anyone with a Bluesky account can be voted for, that they get ten votes, and that every vote is a public record on their own account. Every message now ends with its call to action and the link alone on their own line: run into the end of a paragraph a link reads as a footnote to the sentence it is buried in, and on its own line it reads as the thing to do next, which is the only reason the post exists. The newlines survive the compose intent, where they travel as %0A%0A in a query parameter.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

This pull request has no versions submitted yet.