Skip to content

Commit 0739ead

Browse files
committed
fix(home): single-column hero, monochrome action icons, drop countdown
Tim 2026-06-14 hotfix on the home page that shipped 3 commits ago: The quick-actions row was pinned into the narrow right-column 'ctas' grid area on desktop (240-280px wide). On mobile that column got squished into the right half of the viewport, the 4 buttons stacked weirdly, and the headline collapsed because the parent two-column grid had nowhere to put it. Emoji icons (🏟️📅👥📊) rendered as colourful native emoji on iOS/Android which clashed with the rest of the app's monochrome visual language. Fix: - Hero grid simplified to single-column at >=880px. Headline, lede, then the actions row stack full-width. No more 'headline | ctas' two-column layout that pushed the actions into a sidebar. - Quick-actions row spans the full hero width: grid-column: 1 / -1, 2x2 on mobile, 4-up at >=720px. - Emoji icons swapped for the monochrome SVG icons we already use in the slide-out drawer and bottom dock (PredictIcon, CalendarIcon, GroupsIcon, BarChartIcon). Same visual language end-to-end. - Removed the gold 'primary' tone on My picks. All four buttons render with the same neutral glass treatment per Tim's 'not colourful'. - Countdown timer block removed: tournament is in flight, the 00:00:00:00 readout was just visual noise. Going straight to main since this is a regression on a live surface that just shipped. Signed-off-by: Tim Thomas <0800tim@gmail.com>
1 parent 2a1c65b commit 0739ead

2 files changed

Lines changed: 70 additions & 60 deletions

File tree

apps/web/app/home.css

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,18 @@
157157

158158
@media (min-width: 880px) {
159159
.vt-home-hero-top {
160-
grid-template-columns: minmax(0, 1.5fr) minmax(240px, 280px);
160+
/* Tim 2026-06-14: single column on desktop now. The 4-button
161+
* quick-actions row replaces the right-column ctas, so the
162+
* headline + lede stack full-width and actions sit beneath
163+
* them as a clean strip. Drops the old two-column hero grid. */
164+
grid-template-columns: 1fr;
161165
grid-template-areas:
162-
"headline ctas"
163-
"lede lede";
164-
column-gap: clamp(32px, 5vw, 64px);
166+
"headline"
167+
"lede"
168+
"actions";
165169
row-gap: 24px;
166170
}
167171
.vt-home-headline { grid-area: headline; }
168-
.vt-home-hero-ctas { grid-area: ctas; align-self: end; padding-bottom: 6px; }
169172
/* Tim 2026-05-29: the lede slot is now a wrapper around two <p>s so
170173
* both paragraphs (intro + immutability) share one grid cell and
171174
* stack as normal block flow instead of colliding in the same cell. */
@@ -1664,72 +1667,67 @@
16641667
* marketing-era 3-CTA row now that players need the daily
16651668
* destinations front + centre. Sits in the same `ctas` grid area
16661669
* on the desktop hero. */
1670+
/* Tim 2026-06-14 v2: pull the actions out of the narrow `ctas`
1671+
* grid column. They now span the full hero width as a single row
1672+
* of buttons (2x2 on mobile, 4-up at ≥720px). Monochrome icons
1673+
* from the drawer/dock; no gold primary tile — Tim's "not
1674+
* colourful" + match the burger menu visual language. */
16671675
.vt-home-hero-actions {
1676+
/* Span every column of the hero's grid so it doesn't get pinned
1677+
* into the narrow right-hand ctas slot. */
1678+
grid-column: 1 / -1;
1679+
grid-area: actions;
1680+
align-self: end;
16681681
display: grid;
16691682
grid-template-columns: repeat(2, 1fr);
16701683
gap: 10px;
16711684
width: 100%;
1685+
margin-top: 18px;
16721686
}
16731687
@media (min-width: 720px) {
16741688
.vt-home-hero-actions {
16751689
grid-template-columns: repeat(4, 1fr);
16761690
gap: 12px;
16771691
}
16781692
}
1679-
@media (min-width: 960px) {
1680-
/* On desktop the actions sit in the hero's right column (grid-area
1681-
* "ctas"). Stay 2x2 there because the column is narrow; revert to
1682-
* the 4-col row at large width only via the parent's media query. */
1683-
.vt-home-hero-actions {
1684-
grid-template-columns: repeat(2, 1fr);
1685-
}
1686-
}
1687-
@media (min-width: 1200px) {
1688-
.vt-home-hero-actions {
1689-
grid-template-columns: repeat(4, 1fr);
1690-
}
1691-
}
1692-
1693-
.vt-home-hero-actions { grid-area: ctas; align-self: end; padding-bottom: 6px; }
16941693

16951694
.vt-home-action-btn {
16961695
display: flex;
16971696
flex-direction: column;
16981697
align-items: center;
16991698
justify-content: center;
17001699
gap: 6px;
1701-
padding: 14px 8px;
1702-
min-height: 78px;
1703-
border-radius: 14px;
1704-
background: rgba(255, 255, 255, 0.06);
1700+
padding: 12px 8px;
1701+
min-height: 68px;
1702+
border-radius: 12px;
1703+
background: rgba(255, 255, 255, 0.05);
17051704
border: 1px solid rgba(255, 255, 255, 0.10);
1706-
color: #fff;
1705+
color: rgba(231, 234, 243, 0.94);
17071706
text-decoration: none;
1708-
font: 700 0.92rem/1.1 "Inter", -apple-system, system-ui, sans-serif;
1707+
font: 700 0.86rem/1.1 "Inter", -apple-system, system-ui, sans-serif;
17091708
text-align: center;
17101709
transition: transform 0.08s ease, background 0.12s ease, border-color 0.12s ease;
17111710
}
17121711
.vt-home-action-btn:hover {
1713-
background: rgba(255, 255, 255, 0.10);
1712+
background: rgba(255, 255, 255, 0.08);
17141713
border-color: rgba(255, 255, 255, 0.22);
17151714
}
17161715
.vt-home-action-btn:active {
17171716
transform: scale(0.98);
17181717
}
1719-
.vt-home-action-btn[data-tone="primary"] {
1720-
background: linear-gradient(180deg, #fbbf24, #f59e0b);
1721-
border-color: #fcd34d;
1722-
color: #1a1206;
1723-
box-shadow: 0 6px 18px rgba(251, 191, 36, 0.30);
1724-
}
1725-
.vt-home-action-btn[data-tone="primary"]:hover {
1726-
background: linear-gradient(180deg, #fcd34d, #fbbf24);
1727-
}
17281718
.vt-home-action-icon {
1729-
font-size: 1.6rem;
1730-
line-height: 1;
1719+
display: inline-flex;
1720+
align-items: center;
1721+
justify-content: center;
1722+
width: 22px;
1723+
height: 22px;
1724+
color: rgba(231, 234, 243, 0.94);
1725+
}
1726+
.vt-home-action-icon svg {
1727+
width: 100%;
1728+
height: 100%;
17311729
}
17321730
.vt-home-action-label {
1733-
font-weight: 800;
1731+
font-weight: 700;
17341732
letter-spacing: 0.01em;
17351733
}

apps/web/app/page.tsx

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ import { getTranslations } from "next-intl/server";
2525
import { AppShell } from "@/components/shell";
2626
import { RevealOnScroll } from "@/components/motion/RevealOnScroll";
2727
import { CountdownBanner } from "@/components/ui";
28+
import {
29+
PredictIcon,
30+
CalendarIcon,
31+
GroupsIcon,
32+
BarChartIcon,
33+
} from "@/components/shell/icons";
2834

2935
import "./home.css";
3036

@@ -208,30 +214,40 @@ export default async function HomePage(): Promise<JSX.Element> {
208214
<span className="vt-home-hero-line">{headlineC}</span>
209215
</h1>
210216

211-
{/* Tim 2026-06-13: tournament-in-flight quick actions.
212-
* Replaces the previous 3-CTA marketing row (predict /
213-
* pool / bot-arena) with the four daily destinations
214-
* players need now the WC has kicked off: their picks,
215-
* the pickable schedule, pools, and the leaderboard.
216-
* Layout: 2x2 grid on mobile, single row on desktop. */}
217-
<div className="vt-home-hero-actions" data-count="4">
218-
<Link href="/world-cup-2026" className="vt-home-action-btn" data-tone="primary">
219-
<span className="vt-home-action-icon" aria-hidden="true">🏟️</span>
217+
{/* Tim 2026-06-14: tournament-in-flight quick actions.
218+
* Overlaid on the hero banner full-width; 2x2 grid on
219+
* mobile, single row on desktop. Monochrome icons match
220+
* the drawer + dock so the visual language is consistent.
221+
* Not colourful per Tim. */}
222+
<nav
223+
className="vt-home-hero-actions"
224+
aria-label="Quick actions"
225+
>
226+
<Link href="/world-cup-2026" className="vt-home-action-btn">
227+
<span className="vt-home-action-icon" aria-hidden="true">
228+
<PredictIcon />
229+
</span>
220230
<span className="vt-home-action-label">{actionMyPicks}</span>
221231
</Link>
222232
<Link href="/world-cup-2026/calendar" className="vt-home-action-btn">
223-
<span className="vt-home-action-icon" aria-hidden="true">📅</span>
233+
<span className="vt-home-action-icon" aria-hidden="true">
234+
<CalendarIcon />
235+
</span>
224236
<span className="vt-home-action-label">{actionSchedule}</span>
225237
</Link>
226238
<Link href="/pools" className="vt-home-action-btn">
227-
<span className="vt-home-action-icon" aria-hidden="true">👥</span>
239+
<span className="vt-home-action-icon" aria-hidden="true">
240+
<GroupsIcon />
241+
</span>
228242
<span className="vt-home-action-label">{actionPools}</span>
229243
</Link>
230244
<Link href="/leaderboard" className="vt-home-action-btn">
231-
<span className="vt-home-action-icon" aria-hidden="true">📊</span>
245+
<span className="vt-home-action-icon" aria-hidden="true">
246+
<BarChartIcon />
247+
</span>
232248
<span className="vt-home-action-label">{actionLeaderboard}</span>
233249
</Link>
234-
</div>
250+
</nav>
235251

236252
{/* Tim 2026-06-05: single lede paragraph replaces the
237253
* previous "Nobody will correctly predict..." + global
@@ -266,14 +282,10 @@ export default async function HomePage(): Promise<JSX.Element> {
266282
<span className="vt-home-stat-label">{statClaimToGlory}</span>
267283
</li>
268284
</ul>
269-
<div className="vt-home-stats-countdown">
270-
<CountdownBanner
271-
targetUtc={WC_2026_KICKOFF_UTC}
272-
eyebrow={countdownEyebrow}
273-
title={countdownTitle}
274-
compact
275-
/>
276-
</div>
285+
{/* Tim 2026-06-14: countdown removed now that the
286+
* tournament is in flight. The stat-strip alone reads
287+
* cleanly. CountdownBanner import kept for the other
288+
* surfaces that still use it. */}
277289
</div>
278290
</div>
279291
</section>

0 commit comments

Comments
 (0)