Compact-slot typography rule (the 16px board card title needs a rule, not an exception) #232
Labels
No labels
build-dist
priority
P1
priority
P2
priority
P3
priority
P4
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Toilville/toilville-design#232
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Split out from Toilville/toilville_rituals#619's design issue — #231's decision comment records this as "a separate follow-up" without filing one.
The decision that created this
#231 accepted 16px board card titles as the design direction for compact board slots, and was explicit that this does not change the ratified global title rule:
So there is now one accepted exception and no rule that contains it. That is the gap.
What to decide
SHAPES.md§13 already carries "Density modes (compact / comfortable / spacious): not yet specified. Likely a runtime preference rather than a schema concern." A compact-slot type rule either answers part of that open question or deliberately sits beside it.ForgeSlotDensityflag (already read by all 12 block renderers, per toilville_rituals#171) carry this, or is it a separate axis?Why it matters beyond one number
The ratified global title rule stands, and board cards now contradict it by agreement. Until the exception is expressed as a rule, there is nothing to check a second compact surface against, and the next one will be argued from this one's screenshot rather than from a token.
Acceptance
packages/udg/lib/src/token_manifest.dartwith contrast-pair coverage in both themes (toilville_ritualsCLAUDE.md, "Adding or changing a color token" — the same discipline applies to type).SHAPES.md§13's density bullet is updated to point here, or explicitly scoped away from it.Decision for #232: the compact-slot title
This is Ville's design decision. The technical shape of the mechanism goes to the implementation issue, where Peter's precedence rule applies.
Decision
A narrow, repeated card slot renders its title with one semantic token,
titleCompact: 16px (size.body), weight 600,leading.snug. Every other slot keepsheadingSm(20px, 600). The global title rule is unchanged. The 16px board card title becomes the first instance of this rule. It is no longer an exception.Why
Board cards are horizontally constrained. At the normal 20px title size, ordinary multi-word run titles wrap too aggressively. They can become three one-word lines. The title then dominates the card. Cards get taller, fewer runs fit on screen, and the board is harder to scan. The compact title keeps a useful line length in narrow, repeated cards.
In the wireframes, two cards wrap to three lines at 20px ("Add dark / mode to / settings" and "Weekly / dependency / bump"). At 16px only the Weekly card does.
The alternative I rejected
I considered making board cards larger to fit the normal title size. A board is valuable because it shows many runs and their state at once. Bigger cards would show less of the board at a glance. I prefer compact cards and more runs on screen.
So the 16px title is a deliberate hierarchy tradeoff. Each card gives up some title prominence. The board gains information density and scanability. This is a design choice. It is not a technical constraint.
Answers to the questions in this issue
size.body, weight 600 andleading.snug. No new size, no new weight and no new colour.headingSm, as BLOCK_RENDERING_PRINCIPLES §1 already says for dense rows.ForgeSlotDensitycarry it? No. This is a separate axis. The existing mechanism answers a different question:flutterCompact), which is viewport identity.surface_hints.flutter.compact) overrides it.isCompactSloton inbox rows (PresentationShared.swift:140). Those rows must keep their 20px title. Reusing it would shrink them.No author flag
The container decides, not the author. There is no
compact=trueschema flag for typography. An author cannot make an inbox row or a calendar event a compact slot.Acceptance for this issue
titleCompactand its primitives.titleCompactis registered where the other type tokens are, includingpackages/udg/lib/src/token_manifest.dart. The colour pair on a card istextPrimaryonbgSurfaceCard. The existing contrast tests already cover that pair in both themes (8.52:1 light, 9.17:1 dark). #233 decides the card surface itself.Implementation, for the follow-up issue
ForgeSlotDensity. It carries a role, not a boolean, and it has no author override.