Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 13 additions & 48 deletions app/redesign-calculator.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
"use client"

import Link from "next/link"
import DashboardTiers from "@/components/arcade/dashboard-tiers"
import GuestDashboard from "@/components/arcade/guest-dashboard"
import PreviewModeToolbar from "@/components/arcade/preview-mode-toolbar"
import { readStoredDashboard, type DashboardViewMode } from "@/components/arcade/dashboard-state"
import { SlotChangeBadge, TierSlotHistoryPanel, useTierSlotHistory } from "@/components/arcade/tier-slot-history"
import { useTierSlotHistory } from "@/components/arcade/tier-slot-history"
import {
getWebsiteLocale,
getWebsiteLocaleFromPathname,
Expand Down Expand Up @@ -731,9 +732,9 @@ export default function RedesignCalculator({
<span aria-hidden="true">🎃</span>
{activeHistoryLanguage.catalog.messages.halloweenEdition}
</span>
<h1>{viewMode === "guest" ? activeHistoryLanguage.catalog.messages.guestHeroTop : heroCopy?.top ?? "CHECK YOUR"}<br /><span>{viewMode === "guest" ? activeHistoryLanguage.catalog.messages.guestHeroBottom : heroCopy?.bottom ?? "ARCADE SCORE"}</span></h1>
<h1>{heroCopy?.top ?? activeHistoryLanguage.catalog.messages.heroTitleTop}<br /><span>{heroCopy?.bottom ?? activeHistoryLanguage.catalog.messages.heroTitleBottom}</span></h1>
<p className="hero-description">
{viewMode === "guest" ? activeHistoryLanguage.catalog.messages.guestHeroDescription : heroCopy?.description ?? "Analyze your public profile, inspect earned badges and check which 2026 reward tier your score qualifies for."}
{heroCopy?.description ?? activeHistoryLanguage.catalog.messages.heroDescription}
</p>
<div className="trust-pills">
<span><ShieldCheck /> Public profile data only</span>
Expand Down Expand Up @@ -781,7 +782,7 @@ export default function RedesignCalculator({
{/* Stable portal anchor: keeps countdown placement identical for every locale. */}
<div className="program-countdown-host" data-home-order="program-countdown" />

{showProfileDashboard && extensionStrip}
{extensionStrip}



Expand Down Expand Up @@ -968,49 +969,14 @@ export default function RedesignCalculator({
)}
</article>

<aside id="tiers" className="dashboard-panel tier-list-panel">
<div className="panel-title-row">
<PanelTitle>Arcade 2026 tiers</PanelTitle>
<span className={milestonesLive ? "tier-help is-live" : "tier-help"}>
{milestonesLive ? "Live slot data" : "Total slots only"}
</span>
</div>
<div className="tier-list">
{[...milestones].reverse().map((tier) => {
const active = qualifiedMilestone?.points === tier.points
return (
<div className={`tier-list-row tier-${tier.points}${active ? " is-current" : ""}`} key={tier.points}>
<span className="tier-list-icon"><Trophy /></span>
<div><strong>{tier.league.replace("Arcade ", "")}</strong><span>{tierRangeLabel(tier)}</span></div>
<div className="tier-slot-count">
<b>{tier.spotsLeft === null ? "—" : formatInteger(tier.spotsLeft)}</b>
<small>
{tier.spotsLeft === null
? formatInteger(tier.slots) + " total slots"
: "left of " + formatInteger(tier.slots)}
</small>
<SlotChangeBadge
feed={slotHistory.feed}
points={tier.points}
currentSpotsLeft={tier.spotsLeft}
catalog={activeHistoryLanguage.catalog}
locale={activeHistoryLanguage.locale}
/>
</div>
</div>
)
})}
</div>
<p className="tier-note">
Total and remaining spots are refreshed automatically every 6 hours. Your personal queue position is not included in the public data.
</p>
<TierSlotHistoryPanel
{...slotHistory}
milestones={milestones}
catalog={activeHistoryLanguage.catalog}
locale={activeHistoryLanguage.locale}
/>
</aside>
<DashboardTiers
milestones={milestones}
milestonesLive={milestonesLive}
slotHistory={slotHistory}
catalog={activeHistoryLanguage.catalog}
locale={activeHistoryLanguage.locale}
activeTierPoints={qualifiedMilestone?.points}
/>
</div>

<div id="monthly-games" className="monthly-games-host" data-home-order="monthly-labs" />
Expand Down Expand Up @@ -1089,7 +1055,6 @@ export default function RedesignCalculator({
)}


{!showProfileDashboard && extensionStrip}

{footerContent}

Expand Down
129 changes: 33 additions & 96 deletions app/styles/guest-discovery.css
Original file line number Diff line number Diff line change
@@ -1,102 +1,39 @@
/* Guest discovery: public labs first, rewards beside them. Profile layout is separate. */
.arcade-dashboard-v2[data-dashboard-view="guest"] .arcade-hero {
grid-template-columns: minmax(0, 1fr) minmax(320px, 430px);
gap: 36px;
padding: 28px 0 22px;
}
.arcade-dashboard-v2[data-dashboard-view="guest"] .hero-heading h1 {
margin: 16px 0 12px;
max-width: 100%;
font-size: clamp(1.7rem, 2.6vw, 2.6rem);
line-height: 1.45;
overflow-wrap: anywhere;
}
.arcade-dashboard-v2[data-dashboard-view="guest"] .hero-description {
max-width: 540px;
font-size: 0.86rem;
line-height: 1.65;
}
.arcade-dashboard-v2[data-dashboard-view="guest"] .pixel-kicker {
max-width: 100%;
border: 0;
padding: 0;
background: transparent;
font-size: 0.66rem;
flex-wrap: wrap;
/* Public tiers retain the shared Profile component in a compact overview. */
.guest-dashboard > .tier-list-panel { margin-bottom: 24px; }
.guest-dashboard .tier-list {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 12px;
}
.arcade-dashboard-v2[data-dashboard-view="guest"] .trust-pills { margin-top: 14px; gap: 8px; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .profile-analyzer-card { padding: 20px; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .profile-input { min-height: 48px; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .analyze-button { min-height: 44px; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .analyzer-help-row { margin-top: 12px; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .fresh-score-cache-note { display: none; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .program-countdown-host { margin-bottom: 18px; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .program-countdown-card { padding: 12px 14px; min-height: 0; }

.guest-discovery-grid {
.guest-dashboard .tier-list-row {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(290px, 340px);
align-items: start;
gap: 20px;
width: min(var(--v2-shell, 1200px), calc(100% - 48px));
margin: 0 auto 24px;
grid-template-columns: 32px minmax(0, 1fr);
align-items: center;
gap: 10px;
padding: 14px;
min-width: 0;
}
.guest-dashboard .tier-list-icon { width: 32px; height: 32px; min-width: 32px; }
.guest-dashboard .tier-list-row > div:nth-child(2) { min-width: 0; }
.guest-dashboard .tier-list-row > div:nth-child(2) strong {
white-space: normal;
overflow: visible;
text-overflow: clip;
overflow-wrap: anywhere;
}
.guest-discovery-grid > * { min-width: 0; }
.guest-discovery-grid .guest-labs-host { width: 100%; margin: 0; }
.guest-discovery-grid .monthly-games-panel { margin: 0; padding: 18px; }
.guest-discovery-grid .monthly-games-heading { align-items: start; gap: 12px; margin-bottom: 16px; }
.guest-discovery-grid .monthly-games-heading h2 { font-size: 1.2rem; }
.guest-discovery-grid .monthly-progress-summary { flex: 0 0 auto; width: auto; min-width: 64px; padding: 8px 10px; display: grid; grid-template-columns: 1fr; text-align: center; }
.guest-discovery-grid .monthly-progress-summary strong { font-size: 1.15rem; }
.guest-discovery-grid .monthly-games-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.guest-discovery-grid .monthly-game-art { height: 116px; min-height: 0; }
.guest-discovery-grid .monthly-game-art-image { max-height: 98px !important; max-width: 70% !important; }
.guest-discovery-grid .monthly-game-body { padding: 12px; gap: 10px; }
.guest-discovery-grid .monthly-game-body h3 { font-size: 0.8rem; line-height: 1.5; }
.guest-discovery-grid .monthly-game-description { -webkit-line-clamp: 2; font-size: 0.7rem; }
.guest-discovery-grid .monthly-access-row { grid-template-columns: minmax(0, 1fr) auto; }
.guest-discovery-grid .monthly-game-facts { flex-wrap: wrap; }
.guest-discovery-grid .monthly-games-coming-soon { min-height: 180px; }
.guest-discovery-grid .shared-tier-panel { padding: 18px; }
.guest-discovery-grid .guest-tier-card { grid-template-columns: 32px minmax(0, 1fr) auto; gap: 8px; padding: 10px 8px; }
.guest-discovery-grid .guest-tier-icon { width: 30px; height: 30px; }
.guest-discovery-grid .guest-tier-progress { display: none; }
.guest-discovery-grid .guest-tier-availability { min-width: 0; }
.guest-discovery-grid .guest-tier-availability small { font-size: 0.6rem; }
.guest-discovery-grid .tier-note { font-size: 0.67rem; line-height: 1.55; }
.guest-discovery-grid .swag-drops-preview > a { grid-template-columns: 72px minmax(0, 1fr); }
.guest-discovery-grid .swag-drops-preview > a > div:first-child { min-height: 90px; padding: 8px; }
.guest-discovery-grid .swag-drops-preview img { height: 68px; }
.guest-discovery-grid .swag-drops-preview strong { white-space: normal; font-size: 0.8rem; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .extension-strip { margin-bottom: 24px; }

@media (max-width: 1000px) {
.guest-discovery-grid { grid-template-columns: minmax(0, 1fr); }
.guest-discovery-grid .empty-tier-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.guest-discovery-grid .swag-drops-preview > a { grid-template-columns: 90px minmax(0, 1fr); }
.guest-dashboard .tier-slot-count {
grid-column: 1 / -1;
text-align: start;
padding-top: 10px;
border-top: 1px solid var(--arcade-border-soft);
}
@media (max-width: 720px) {
.arcade-dashboard-v2[data-dashboard-view="guest"] .arcade-hero { grid-template-columns: minmax(0, 1fr); gap: 20px; padding: 24px 0 18px; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .hero-heading h1 { font-size: clamp(1.55rem, 6vw, 2.2rem); line-height: 1.4; }
.arcade-dashboard-v2[data-dashboard-view="guest"] .profile-analyzer-card { padding: 16px; }
.guest-discovery-grid { width: calc(100% - 32px); gap: 16px; }
.guest-discovery-grid .monthly-games-panel, .guest-discovery-grid .shared-tier-panel { padding: 14px; }
.guest-dashboard .tier-slot-count b { font-size: 1.25rem; }
@media (max-width: 1100px) {
.guest-dashboard .tier-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 560px) {
.guest-discovery-grid .monthly-games-grid, .guest-discovery-grid .empty-tier-grid { grid-template-columns: minmax(0, 1fr); }
.guest-discovery-grid .monthly-game-card { display: grid; grid-template-columns: 90px minmax(0, 1fr); align-items: start; }
.guest-discovery-grid .monthly-game-art { height: 108px; border: 0; border-radius: 10px; margin: 12px 0 0 10px; }
.guest-discovery-grid .monthly-game-art-image { max-width: 90% !important; max-height: 92px !important; }
.guest-discovery-grid .monthly-game-description { display: none; }
.guest-discovery-grid .monthly-game-body { padding: 12px 10px; }
.guest-discovery-grid .monthly-game-body h3 { margin: 0; }
.guest-discovery-grid .monthly-access-row { grid-template-columns: minmax(0, 1fr) 34px; }
.guest-discovery-grid .monthly-copy-button { min-width: 34px; padding: 7px; }
.guest-discovery-grid .monthly-copy-button > span { display: none; }
.guest-discovery-grid .monthly-game-facts { font-size: 0.6rem; }
.guest-discovery-grid .monthly-game-deadline { flex-wrap: wrap; gap: 4px; }
@media (max-width: 600px) {
.guest-dashboard .tier-list { grid-template-columns: 1fr; gap: 8px; }
.guest-dashboard .tier-list-row { grid-template-columns: 32px minmax(0, 1fr) minmax(72px, auto); padding: 12px; }
.guest-dashboard .tier-slot-count { grid-column: auto; padding: 0; border: 0; text-align: end; }
.guest-dashboard .tier-slot-count b { font-size: 1rem; }
}

.arcade-dashboard-v2[data-dashboard-view="guest"] [data-fresh-score-note] { display: none; }
.monthly-games-load-error { display: grid; gap: 12px; min-height: 180px; align-content: center; color: var(--arcade-muted); }
.monthly-games-load-error button { justify-self: start; padding: 9px 14px; border: 1px solid var(--arcade-border); border-radius: 8px; background: var(--arcade-panel-soft); color: var(--arcade-text); cursor: pointer; }
Loading
Loading