Skip to content

[Specs — do not cascade yet] Component set: section header, canonical card, buttons, motifs - #235

Draft
jackhenderson12 wants to merge 5 commits into
mainfrom
design/components
Draft

[Specs — do not cascade yet] Component set: section header, canonical card, buttons, motifs#235
jackhenderson12 wants to merge 5 commits into
mainfrom
design/components

Conversation

@jackhenderson12

@jackhenderson12 jackhenderson12 commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

PR #3 of the refinement sequence — review the pixels, please don't merge into the cascade yet. This is the reusable component set that every downstream PR (#5 homepage, #6 templates) inherits, so per our plan it gets eyes before anything adopts it. If the card/section-header spec is even slightly off, the mistake compounds across the sequence.

Stacked on the foundations branch (#234) — base is set to design/foundations-tokens so this diff shows only the component files. Nothing here is applied to any existing template.

How to review

Build the site and open /styleguide/ (noindex, not nav-linked) — it renders every component on real brand fonts and tokens, including the mixed-length card grid and the black-section moment. (I've shared rendered desktop + mobile screenshots with Jack directly in review.)

What's proposed

  • Section header (section-header.njk) — the shared eyebrow + title + rule + See all → motif. One rhythm for every listing/section.
  • Canonical content card (content-card.njk) — promoted from the (good) Updates card. Key fix: the old card forced a min-height on the title, which left big empty gaps under short titles. New card is flex h-full with the meta pinned via mt-auto, so meta bottom-aligns across a row at any title length, no padding hacks. Optional description for the Projects/Proposals variant.
  • Buttons (button.njk) — primary (pill + sliding arrow, identical to the existing action-button, so adoption is a rename) and secondary (uppercase text + thick underline).
  • Motifs (components.css) — where the brand yellow lives: mark-highlight, underline-yellow, icon-circle, number-circle. Outlined motifs auto-flip to white inside .is-on-dark bands.
  • Black-section "moment" demo in the styleguide — shows the white-surface / black-for-big-moments / yellow-as-accent discipline you described (oversized Messer caps in white, yellow only as an accent within the black).

Specific things I'd value a call on (pixels)

  1. Card title weight — currently Suisse regular at size-2 (editorial/AI-Now restraint, matches today's Updates). Bolder (Suisse Bold) reads more "confident" but heavier across a 4-up grid. Which do you want as canonical?
  2. Card rule placement — I used a top hairline over the tag (clear "item starts here"). The current Updates rule is on the bottom. Preference?
  3. Tag treatment — uppercase, tracked, 60% opacity. Quiet enough / too quiet?
  4. Section-header eyebrow — keep it optional (only where it adds meaning), or standard on every section?

Once the card is signed off, the rest of the sequence (chrome → repaint → homepage → templates) adopts it and moves faster.

Constraints

11ty + Nunjucks + Tailwind only. No content/routes/redirects/i18n/Fathom/newsletter changes. npm run build passes. Verified desktop + mobile.

🤖 Generated with Claude Code

Jack Henderson and others added 4 commits June 26, 2026 12:51
Additive, low-risk foundation for the refinement work — no surface
repaint here (the bg-golden-fizz → white change lands in its own PR).

- global.css: set color-scheme:light and a white <body> background so
  pages that don't paint their own surface no longer fall through to the
  browser's dark canvas (which rendered black body text invisible in OS
  dark mode — Updates, articles, Search, Wiki). Set on low-specificity
  selectors so utilities (bg-black, bg-golden-fizz, a page's bodyBg)
  still override — intentionally dark/yellow bands are unaffected.
- tailwind.config.js: lock the brand palette to black/white/golden-fizz;
  remove single-use off-brand light-gold/light-black; quarantine gray/red
  (kept only for the CWNYC vote-bar data-viz) under a "restricted, non-
  brand" comment so they're not used on brand surfaces.
- popup.njk / about: swap the two light-gold / light-black usages to
  brand golden-fizz / black.
- link.css: de-gray .see-more-link (brand black at reduced opacity).
- tailwind.config.js: add documented section/block/element spacing-rhythm
  tokens for consistent gaps between structural blocks.
- README: document the palette, contrast rule, surface default, type
  roles (one Messer weight → hierarchy by size), and the spacing scale.

npm run build passes. Dark-mode fix verified in-browser (Updates renders
white; 404's bodyBg yellow still wins).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the rationale to the README palette note so a future pass doesn't
"tidy up" the restricted colors and break the Community Week NYC vote
bars: there the colors carry meaning (data encoding), not decoration,
so they're exempt from the brand-surface three-token rule.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PR #3 of the refinement sequence — the reusable component set everything
downstream inherits. Built as macros + a noindex /styleguide page that
renders them on real brand fonts and tokens (review pixels, not prose).
NOT applied to any existing template yet — the cascade is gated on the
card pattern being signed off.

- section-header.njk: the shared "eyebrow + title + rule + See all →"
  motif, so every listing/section opens with one rhythm.
- content-card.njk: the ONE canonical card, promoted from the (good)
  Updates card. Fixes the old min-height hack — flex h-full + mt-auto
  pins meta to the bottom so it aligns across a row at any title length,
  with no forced empty gaps. Supports an optional description (Projects /
  Proposals variant).
- button.njk: primary (pill + sliding arrow, == existing action-button)
  and secondary (uppercase text + thick underline).
- components.css: motif utilities where the brand YELLOW lives —
  mark-highlight, underline-yellow, icon-circle, number-circle; outlined
  motifs auto-flip on .is-on-dark bands.
- styleguide/index.njk: live reference page (noindex, excluded from
  collections, not nav-linked), incl. a black-section "moment" demo
  showing the white/black/yellow discipline.

Builds on the foundations branch (#234). npm run build passes; verified
desktop + mobile.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fold the open card questions into side-by-side renders so they're judged
on real fonts/tokens rather than prose:
- A/B #1 title weight as full 8-card grids (regular vs bold) — the tiled
  effect is the decision; bold vibrates at grid scale, regular stays calm.
- A/B #2 rule placement (top hairline over tag vs bottom rule under meta)
  for rollout-consistency.
- "Resolved" block records the locked calls: tag/meta opacity 60%
  (#666 on white = 5.74:1, passes WCAG AA); eyebrow optional (standard-
  on-every-section would recreate audit finding #2's stacked-label noise).

A/B overrides are styleguide-scoped (.ab-bold / .ab-bottom-rule) so the
canonical content-card macro stays the single source of truth.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@jackhenderson12
jackhenderson12 changed the base branch from design/foundations-tokens to main June 26, 2026 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant