refactor(roadmap): single centred header + dispatch banner below the route
Order on the page:
1. Centred header — 48px serif 'Roadmap' h1, one merged subtitle that
combines the original page lead ('A live picture of the work…')
with both interaction hints (tap-or-hover, drag-or-scroll).
2. <RoadmapRoute> — full-bleed track + right-edge advance arrow.
3. Legend — centred in content column.
4. <LatestDispatchBanner> — moved from above the route to below the
legend. The dispatch becomes supplementary editorial that sits at
the foot of the page; the route is the primary surface and now
leads.
Banner spacing flipped: was margin-bottom 56px above the route, now
margin-top 64px below the legend.
The previous left-aligned 'What we are building.' top header and the
secondary centred 'Roadmap' route-intro block are both gone — merged
into one centred header at the top.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b2e0e8f518
commit
4009d5b711
1 changed files with 28 additions and 67 deletions
|
|
@ -12,31 +12,20 @@ const items = getAllRoadmapItems()
|
||||||
<AppLayout title="Roadmap" user={user}>
|
<AppLayout title="Roadmap" user={user}>
|
||||||
<article class="roadmap-page">
|
<article class="roadmap-page">
|
||||||
|
|
||||||
<!-- Page-level header — left-aligned, the page's editorial lead. -->
|
<!-- Single centred header — merges the page lead with the route's
|
||||||
<header class="page-header">
|
interaction hints. -->
|
||||||
<p class="page-eyebrow">Roadmap</p>
|
<header class="roadmap-header">
|
||||||
<h1 class="page-title">What we are building.</h1>
|
<h1 class="roadmap-title">Roadmap</h1>
|
||||||
<p class="page-sub">
|
<p class="roadmap-sub">
|
||||||
A live picture of the work. What's in motion, what's queued,
|
A live picture of the work. What's in motion, what's queued,
|
||||||
what we're still thinking about.
|
what we're still thinking about. Tap or hover any milestone
|
||||||
|
for the full story. Drag or scroll to move.
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<LatestDispatchBanner />
|
|
||||||
|
|
||||||
<!-- Centred section intro for the route specifically. Sits between
|
|
||||||
the dispatch banner and the full-bleed route; carries the two
|
|
||||||
interaction hints (hover/tap + drag/scroll). -->
|
|
||||||
<section class="route-intro">
|
|
||||||
<h2 class="route-intro-title">Roadmap</h2>
|
|
||||||
<p class="route-intro-hint">
|
|
||||||
Tap or hover any milestone for the full story. Drag or scroll to move.
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<RoadmapRoute items={items} />
|
<RoadmapRoute items={items} />
|
||||||
|
|
||||||
<!-- Legend — final row, centred in content column. -->
|
<!-- Legend — final row inside content column. -->
|
||||||
<div class="roadmap-legend" aria-label="Status legend">
|
<div class="roadmap-legend" aria-label="Status legend">
|
||||||
<span><i style="background:#6d8c7c"></i>Shipping</span>
|
<span><i style="background:#6d8c7c"></i>Shipping</span>
|
||||||
<span><i style="background:#b96b58"></i>In beta</span>
|
<span><i style="background:#b96b58"></i>In beta</span>
|
||||||
|
|
@ -44,6 +33,11 @@ const items = getAllRoadmapItems()
|
||||||
<span><i style="background:#d4d2c8"></i>Considering</span>
|
<span><i style="background:#d4d2c8"></i>Considering</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Latest dispatch — moved below the route. The route is the page's
|
||||||
|
primary surface; the dispatch is supplementary editorial that
|
||||||
|
sits at the foot. -->
|
||||||
|
<LatestDispatchBanner />
|
||||||
|
|
||||||
</article>
|
</article>
|
||||||
</AppLayout>
|
</AppLayout>
|
||||||
|
|
||||||
|
|
@ -54,21 +48,14 @@ const items = getAllRoadmapItems()
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ── Page header (left-aligned editorial lead) ────────────────── */
|
/* ── Centred header ──────────────────────────────────────────── */
|
||||||
.page-header {
|
.roadmap-header {
|
||||||
max-width: 540px;
|
text-align: center;
|
||||||
margin-bottom: 36px;
|
max-width: 640px;
|
||||||
|
margin: 0 auto 48px;
|
||||||
padding-top: 32px;
|
padding-top: 32px;
|
||||||
}
|
}
|
||||||
.page-eyebrow {
|
.roadmap-title {
|
||||||
font-family: var(--font-sans);
|
|
||||||
font-size: 11px;
|
|
||||||
letter-spacing: 1.4px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
color: var(--on-surface-variant);
|
|
||||||
margin: 0 0 12px;
|
|
||||||
}
|
|
||||||
.page-title {
|
|
||||||
font-family: var(--font-serif);
|
font-family: var(--font-serif);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 48px;
|
font-size: 48px;
|
||||||
|
|
@ -77,38 +64,12 @@ const items = getAllRoadmapItems()
|
||||||
color: var(--on-surface);
|
color: var(--on-surface);
|
||||||
margin: 0 0 14px;
|
margin: 0 0 14px;
|
||||||
}
|
}
|
||||||
.page-sub {
|
.roadmap-sub {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.65;
|
line-height: 1.65;
|
||||||
color: var(--on-surface-variant);
|
color: var(--on-surface-variant);
|
||||||
margin: 0;
|
margin: 0 auto;
|
||||||
max-width: 480px;
|
max-width: 520px;
|
||||||
}
|
|
||||||
|
|
||||||
.roadmap-page :global(.banner),
|
|
||||||
.roadmap-page :global(.rr-dispatch) { margin-bottom: 56px; }
|
|
||||||
|
|
||||||
/* ── Centred route intro ──────────────────────────────────────── */
|
|
||||||
.route-intro {
|
|
||||||
text-align: center;
|
|
||||||
max-width: 560px;
|
|
||||||
margin: 0 auto 28px;
|
|
||||||
}
|
|
||||||
.route-intro-title {
|
|
||||||
font-family: var(--font-serif);
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 22px;
|
|
||||||
line-height: 1.2;
|
|
||||||
color: var(--on-surface);
|
|
||||||
margin: 0 0 10px;
|
|
||||||
}
|
|
||||||
.route-intro-hint {
|
|
||||||
font-family: var(--font-sans);
|
|
||||||
font-size: 12px;
|
|
||||||
letter-spacing: var(--tracking-wide);
|
|
||||||
color: var(--on-surface-variant);
|
|
||||||
margin: 0;
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ── Legend ───────────────────────────────────────────────────── */
|
/* ── Legend ───────────────────────────────────────────────────── */
|
||||||
|
|
@ -136,13 +97,13 @@ const items = getAllRoadmapItems()
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Dispatch banner (now below the route) ───────────────────── */
|
||||||
|
.roadmap-page :global(.rr-dispatch) { margin-top: 64px; }
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
.roadmap-page { padding: 0 24px 64px; }
|
.roadmap-page { padding: 0 24px 64px; }
|
||||||
.page-header { padding-top: 24px; margin-bottom: 28px; }
|
.roadmap-header { padding-top: 24px; margin-bottom: 32px; }
|
||||||
.page-title { font-size: 36px; }
|
.roadmap-title { font-size: 36px; }
|
||||||
.roadmap-page :global(.banner),
|
.roadmap-page :global(.rr-dispatch) { margin-top: 48px; }
|
||||||
.roadmap-page :global(.rr-dispatch) { margin-bottom: 40px; }
|
|
||||||
.route-intro { margin-bottom: 22px; }
|
|
||||||
.route-intro-title { font-size: 19px; }
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue