Italic Newsreader at the same font-size renders visibly taller than its
regular sibling — the cursive 'B' has a flourish that extends above the
cap-line. Matching font-sizes meant Bifrost always looked larger, and
trying to fit that flourish inside the line-box / gradient-clip
either made the wordmark cramped or clipped the top off.
Asymmetric sizes for optical match:
Project — 18px regular Newsreader
Bifrost — 16px italic Newsreader
At those sizes, Project's 18px cap-height roughly equals Bifrost's
16px cap + flourish-ascender, so the two words read as the same
visual height.
inline-block + padding 3px top / 1px bottom on Bifrost keeps the
gradient-clip bbox tall enough to contain the flourish without
clipping, while vertical-align: baseline keeps the typographic baseline
aligned with Project's baseline so the wordmark sits on one line.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three small tweaks:
- AppLayout wordmark: 'Project' and 'Bifrost' now share font-size 18 +
line-height 1.4 + tracking-snug via a combined selector. The previous
asymmetry (Bifrost had display: inline-block + padding 4/0/2 +
line-height: 1 to lift the gradient-clip box for the italic ascender)
was visibly making Bifrost render slightly off-height vs Project. With
parent line-height 1.4 the gradient-clip bbox is tall enough on its
own; padding hack removed.
- EventHeroCard footer status line drops the ' | CLOSES TUESDAY'
trailer. The line now reads simply '{capacity} SEATS · {n} CONFIRMED'.
closesDay variable and .hero-status-divider style both gone.
- /pulse pulse-col eyebrow: 'This week's' → 'Pulse Vote'. Matches the
more direct labelling everywhere else.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
.nav-link.active was carrying four overlapping cues from earlier passes:
terracotta colour, serif italic, sentence case, leading '·' bullet, and
a 15px size bump. The spec's 'option 4' is colour-only. Strip the rest:
.nav-link.active {
color: var(--pigment-terracotta);
font-weight: 500;
}
That's it. Same sans uppercase as inactive links, just terracotta with
a touch more weight. The bullet ::before is gone; nothing floats below
the link.
Sign out (.logout-btn) is already --on-surface-muted with --on-surface
on hover from a prior pass — exactly the muted treatment the new spec
asks for, so no change needed. The 'Sign out is currently terracotta'
line in the spec didn't match the codebase; flagged in the audit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The italic 'B' on 'Bifrost' was being clipped at the top because
background-clip: text only paints inside the inline element's content
box — which at the previous tight line-height didn't include the
ascender flourish.
Two cooperating fixes:
- .wordmark-project gets line-height: 1.5 so the parent line-box has
enough vertical room for the italic ascender to live in.
- .wordmark-bifrost becomes display: inline-block with 4px top / 2px
bottom padding. That extends the element's content box vertically so
the gradient-clip mask covers the full italic glyph including the
serif curl above the cap-height.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two fixes for the previous baseline-align attempt:
- 'Bifrost' was getting its italic ascender clipped because line-height
was pinned at 1. Switched to line-height: 1.3 on .wordmark-project so
the swash on the italic 'B' / 'f' has room to render.
- The lockup was reading low overall because align-items: baseline +
translateY(3px) on the SVG together shifted the SVG below the text
baseline. Reverted to align-items: center for reliable cross-browser
centring, dropped the SVG transform, and pulled the SVG height from
22 → 20 so the visible glyph height of the wordmark matches the cap-
height of Newsreader at 18px more closely. The '·' bullet keeps a
-2px nudge because Newsreader's bullet sits typographically above its
baseline at this size.
- 2px padding-top on .wordmark-project compensates for the small bit
of descender slack at the bottom of the Fenja SVG — caps now sit on
the same visible cap-line as the wordmark glyphs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three small adjustments so the lockup reads as one mark, not a logo
next to a label:
- align-items: baseline on .wordmark-link so the typographic baseline
drives vertical alignment (instead of bounding-box centres).
- 'Project' + 'Bifrost' bumped from text-body-md (16px) to 18px with
line-height: 1 and tracking-snug. The bigger weight matches the
visible glyph height of the Fenja SVG and pulls the bullet into
conversation with the wordmark instead of floating between them.
- The Fenja SVG gets a translateY(3px) nudge to compensate for the
descender slack in its 265×101 viewBox — the SVG's actual baseline
sits a couple of px above its bounding-box bottom, so the flex
baseline-align would otherwise place 'fenja' above the text baseline.
- The '·' separator drops 1px and grows to 18px so it sits between the
two marks rather than floating above them.
The exact numbers are empirical — eyeballed in dev — but the rationale
each pin to a baseline relationship rather than 'magic px offset'.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
.wordmark-project was Manrope 500 — visually a sans-serif label next to
a serif-italic gradient noun. Switches to Newsreader 400 so the
wordmark reads as one continuous editorial mark, with the italic +
gradient on 'Bifrost' doing the visual lift instead of a family contrast.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Greeting (1, 2): the tracked date label above the greeting and the
milestone tenure line below it both come out. The greeting is now just
'Good morning, Jonathan.' alone on the left, with the MEMBER · NNN /
'Founding circle' stamp on the right. tenureMilestone helper + test stay
in place — they're still useful for future surfaces but no longer
rendered on /pulse.
Section titles (3): the noun in each section title gets serif italic +
a trailing period — 'On the <em>roadmap.</em>' and 'The <em>council.</em>'.
The two-word framing reads better visually than the previous flat
sans-serif title.
Spacing (6): bumped the major section transitions. Greeting → hero now
80px (was 56), also-coming-up → editorial 96px, editorial → roadmap
96px, roadmap → council 96px. The hero → also-coming-up gap stays at
the deliberate 18px because they're a pair, and the dispatch column's
internal margin-top 48px to its 'Earlier' list stays unchanged because
they belong to the same story.
Footer (7): 'Council manifesto' link removed from the footer for all
pages. The standalone /council-manifesto route stays in the codebase
(orphaned, not linked) so it isn't a 404 when someone has the URL.
Active nav link (8): the previous 4px terracotta dot below the active
link is gone. The active link now reads in a different typographic
register entirely:
- terracotta colour
- serif italic Newsreader (vs sans uppercase for inactive)
- sentence case (text-transform: none — the label appears as 'Pulse'
instead of 'PULSE')
- leading '· ' prefix dot for an additional 'you are here' marker
Four cues at once, no positioned overlay, no floating elements. The
typography shift alone tells you which page you're on.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Active link no longer carries a background fill or pill. Instead, a
4px terracotta dot is centred 22px below the link via ::after. Quieter,
more confident, and survives the cream/white surface change without
needing a hover-area redesign.
- Vertical divider before the user's name shifts from the existing ghost-
border colour to a solid rgba(0,0,0,0.15) line, 18px tall with 18px
padding either side (replacing the prior --space-2 / 8px). Still a
scaled-1px element rather than a pipe character.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Width: --content-max 72rem → 83rem (15% wider, per the v3 follow-up
spec). Every page that uses var(--content-max) gets the new bound.
- Wordmark in the top-left nav: Fenja logo · "Project Bifrost". 'Bifrost'
is serif italic with a horizontal pigment-rainbow gradient
(terracotta → ochre → copper → indigo → heather), background-clip:text.
The bullet separator uses --on-surface-muted at 1rem.
- Global .section-link utility class: serif italic, terracotta, no
underline, no all-caps. Modifier --ink for use on the dark events card.
This becomes the only italic body text on the site (along with the
Bifrost wordmark); everywhere else loses italics in the next commit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Restructures /pulse around three blocks instead of seven, per the
follow-up simplification spec.
Nav: Events and Members drop out of the top bar. Becomes
Pulse · Roadmap · [Admin]. Members and Events remain reachable via the
two new on-page links ('See who our council is made up of →' and
'View all →' under past gatherings).
/pulse render order:
1. Greeting (unchanged)
2. Events card (--ink). One blue card now holds all three sub-sections:
- Hero NEXT UP / INVITATION BY HAND treatment for the soonest event,
full date+title+desc+capacity+RSVP CTA. AvatarPile of confirmed.
- 0.5px ink-muted divider, then ALSO COMING UP — compact list of other
upcoming events with their action-label fallback. Less visual weight,
same dark surface.
- Divider, then PAST GATHERINGS — compact list with notes / no-notes
indicator, plus a 'View all →' link to /events/past.
- Empty state retains the visual weight of the card if nothing is up.
3. Combined Roadmap + Latest from Fenja (--surface-card). One white card,
two stacked sub-sections separated by a 1px divider. Top is the single
most recent published dispatch (was 'Latest from the studio', now
labeled 'LATEST FROM FENJA'; 'All updates →' link to /dispatches). Bottom
is the three most-recently-updated roadmap items + 'See the full roadmap →'.
4. Members strip (--surface-card). Every cab user as a pill (avatar + name
+ title) flowing horizontally. Header has the 'See who our council is
made up of →' link to /members.
Removed from /pulse:
- This-week's-pulse voting block (deferred → todo.md, idea is to fold
poll-shaped dispatches into the Latest from Fenja stream)
- MembershipCard (the COUNCIL · NNN identity card)
- RecentlyFromTheCouncil (deferred → todo.md)
- Bottom event-row with the two small dinner + studio hours cards (events
moved to the top hero card, so these were duplicates)
POST handler is now RSVP-only — vote handling went with the pulse block.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Nav (AppLayout.astro): brand stays left; everything else is a single
right-aligned flex group — Pulse · Roadmap · Members · Events · [Admin
if fenja] · 0.5px vertical divider · name · Sign out. The .nav-user
wrapper is gone; the name and logout button now belong to the same flex
flow as the link list.
/pulse:
- ActivityTicker render removed. The component file gets a one-line
deprecation comment; the activity table and write hooks stay in place
for later use.
- 'X others online now' chip strip removed — including all its supporting
helpers and styles in the page.
- CouncilMark replaced with <MembershipCard> in the right column of the
preview row. The roadmap preview is now a white --surface-card with
0.5px border; pulse-card switches to the same white surface and
--radius-lg. The .chosen pulse option uses --pigment-terracotta border
and a 6% terracotta tint via color-mix.
- <DispatchesSection limit={4} /> and <RecentlyFromTheCouncil /> stacked
below the preview row, in the position the online-now strip vacated.
- Vote-count denominator pulls from countCabMembers() and renders via
voteCountSentence(votes, total) — a new helper covering 0/1/5+ cases.
- Event row: dark dinner card now uses --ink/--ink-text; light card uses
--surface-card with 0.5px border.
Tests: 3 new cases for voteCountSentence (0/1/5). 36/36 passing.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>