diff --git a/src/components/CommandPalette.tsx b/src/components/CommandPalette.tsx index 4255499..fd6fde3 100644 --- a/src/components/CommandPalette.tsx +++ b/src/components/CommandPalette.tsx @@ -483,7 +483,6 @@ const styles: Record = { fontWeight: 700, letterSpacing: "0.08em", color: "var(--color-text-muted)", - textTransform: "uppercase", }, row: { display: "flex", diff --git a/src/components/CompletionFlourish.tsx b/src/components/CompletionFlourish.tsx index db3f52e..08a24b2 100644 --- a/src/components/CompletionFlourish.tsx +++ b/src/components/CompletionFlourish.tsx @@ -241,7 +241,6 @@ const styles: Record = { fontSize: 11, color: "var(--color-text-muted)", letterSpacing: "0.12em", - textTransform: "uppercase", opacity: 0.7, }, }; diff --git a/src/components/DcaSchedulesPanel.tsx b/src/components/DcaSchedulesPanel.tsx index 6153e13..3ac85d6 100644 --- a/src/components/DcaSchedulesPanel.tsx +++ b/src/components/DcaSchedulesPanel.tsx @@ -155,7 +155,6 @@ const styles: Record = { fontSize: 10, fontWeight: 600, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.14em", }, headerCount: { diff --git a/src/components/ExecutionPanel.tsx b/src/components/ExecutionPanel.tsx index f56b3f4..984890b 100644 --- a/src/components/ExecutionPanel.tsx +++ b/src/components/ExecutionPanel.tsx @@ -1636,7 +1636,6 @@ const VerifiedMark: FC<{ verified: boolean }> = ({ verified }) => ( fontSize: 9, fontWeight: 700, letterSpacing: "0.04em", - textTransform: "uppercase", color: verified ? "var(--color-success)" : "var(--color-warn)", background: verified ? "rgba(34, 197, 94, 0.12)" @@ -2258,7 +2257,6 @@ const styles: Record = { fontVariantNumeric: "tabular-nums", marginLeft: "auto", letterSpacing: "0.04em", - textTransform: "uppercase", }, formCardBody: { display: "flex", @@ -2271,7 +2269,6 @@ const styles: Record = { fontWeight: 600, color: THEME.textMuted, letterSpacing: "0.08em", - textTransform: "uppercase", marginTop: 4, }, formCardFootnote: { @@ -2912,7 +2909,6 @@ const styles: Record = { fontWeight: 600, color: THEME.textMuted, letterSpacing: "0.05em", - textTransform: "uppercase", marginTop: 4, }, heroStatHint: { diff --git a/src/components/ExecutionReplay.tsx b/src/components/ExecutionReplay.tsx index 35da9fc..e7c5e1e 100644 --- a/src/components/ExecutionReplay.tsx +++ b/src/components/ExecutionReplay.tsx @@ -404,7 +404,6 @@ const styles: Record = { fontSize: 11, fontWeight: 700, color: "var(--color-5-strong)", - textTransform: "uppercase", letterSpacing: "0.1em", }, title: { @@ -450,7 +449,6 @@ const styles: Record = { fontFamily: MONO, fontSize: 11, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.04em", }, tickerValue: { diff --git a/src/components/ExecutionStack.tsx b/src/components/ExecutionStack.tsx index 5495bfe..5f5b480 100644 --- a/src/components/ExecutionStack.tsx +++ b/src/components/ExecutionStack.tsx @@ -339,7 +339,6 @@ const styles: Record = { fontSize: 13, fontWeight: 700, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.08em", }, titleHint: { @@ -354,7 +353,6 @@ const styles: Record = { fontSize: 11, fontWeight: 700, letterSpacing: "0.1em", - textTransform: "uppercase", padding: "2px 7px", borderRadius: 999, background: "var(--color-accent-bg-soft)", @@ -440,7 +438,6 @@ const styles: Record = { fontSize: 12, fontWeight: 600, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.05em", }, tally: { @@ -452,7 +449,6 @@ const styles: Record = { fontFamily: MONO, fontSize: 13, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.05em", }, tallyValue: { diff --git a/src/components/ExecutionTimeline.tsx b/src/components/ExecutionTimeline.tsx index 0bab57b..1d069df 100644 --- a/src/components/ExecutionTimeline.tsx +++ b/src/components/ExecutionTimeline.tsx @@ -769,7 +769,6 @@ const styles: Record = { color: "var(--color-text-muted)", width: 64, flexShrink: 0, - textTransform: "uppercase", letterSpacing: "0.04em", fontSize: 12, }, diff --git a/src/components/HeaderBar.tsx b/src/components/HeaderBar.tsx index 7e82342..a9d1cdc 100644 --- a/src/components/HeaderBar.tsx +++ b/src/components/HeaderBar.tsx @@ -614,7 +614,7 @@ const MevPopover: FC<{ strategy: ReturnType }> = ({ fontSize: 12, }} > - · {layer.active ? "ACTIVE" : "READY"} + · {layer.active ? "Active" : "Ready"}
{layer.description}
diff --git a/src/components/LeaderboardTab.tsx b/src/components/LeaderboardTab.tsx index 0a1b2a4..4bb9192 100644 --- a/src/components/LeaderboardTab.tsx +++ b/src/components/LeaderboardTab.tsx @@ -301,7 +301,6 @@ const styles: Record = { fontSize: 12, fontWeight: 700, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.06em", }, yourCardRank: { @@ -333,7 +332,6 @@ const styles: Record = { fontFamily: MONO, fontSize: 11, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.04em", }, emptyState: { @@ -353,7 +351,6 @@ const styles: Record = { fontSize: 12, fontWeight: 700, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.06em", }, boardHint: { @@ -406,7 +403,6 @@ const styles: Record = { fontSize: 9, fontWeight: 700, letterSpacing: "0.06em", - textTransform: "uppercase", border: "1px solid", borderRadius: 4, }, diff --git a/src/components/PairQueuePanel.tsx b/src/components/PairQueuePanel.tsx index 83555c4..cb7980a 100644 --- a/src/components/PairQueuePanel.tsx +++ b/src/components/PairQueuePanel.tsx @@ -239,7 +239,6 @@ const styles: Record = { fontSize: 13, fontWeight: 700, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.06em", }, headerIcon: { fontSize: 14 }, @@ -302,7 +301,6 @@ const styles: Record = { fontSize: 10, fontWeight: 700, letterSpacing: "0.05em", - textTransform: "uppercase", border: "1px solid", borderRadius: 999, fontFamily: MONO, diff --git a/src/components/ProfileSetup.tsx b/src/components/ProfileSetup.tsx index 579a67c..497c21b 100644 --- a/src/components/ProfileSetup.tsx +++ b/src/components/ProfileSetup.tsx @@ -343,7 +343,6 @@ const styles: Record = { letterSpacing: "0.12em", fontWeight: 700, color: "var(--color-5-strong)", - textTransform: "uppercase", }, title: { fontFamily: SANS, @@ -388,7 +387,6 @@ const styles: Record = { fontSize: 13, fontWeight: 600, letterSpacing: "0.12em", - textTransform: "uppercase", color: "var(--color-text-muted)", animation: "liminal-fade-in 200ms var(--ease-out, ease)", }, diff --git a/src/components/ProgressRingsCard.tsx b/src/components/ProgressRingsCard.tsx index 0c407ca..404210b 100644 --- a/src/components/ProgressRingsCard.tsx +++ b/src/components/ProgressRingsCard.tsx @@ -206,7 +206,6 @@ const styles: Record = { fontSize: 13, fontWeight: 700, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.08em", }, body: { @@ -236,7 +235,6 @@ const styles: Record = { fontWeight: 600, color: "var(--color-text-muted)", letterSpacing: "0.04em", - textTransform: "uppercase", }, legendValue: { fontFamily: SANS, diff --git a/src/components/RiskAdvisor.tsx b/src/components/RiskAdvisor.tsx index d319c10..4729c33 100644 --- a/src/components/RiskAdvisor.tsx +++ b/src/components/RiskAdvisor.tsx @@ -162,7 +162,6 @@ const styles: Record = { fontSize: 13, fontWeight: 700, color: "var(--color-text-muted)", - textTransform: "uppercase", letterSpacing: "0.06em", }, headerIcon: { diff --git a/src/components/Tutorial.tsx b/src/components/Tutorial.tsx index 77aeb77..8ddb720 100644 --- a/src/components/Tutorial.tsx +++ b/src/components/Tutorial.tsx @@ -329,7 +329,6 @@ const styles: Record = { fontSize: 11, letterSpacing: "0.1em", fontWeight: 700, - textTransform: "uppercase", color: "var(--color-5-strong)", marginBottom: 6, }, diff --git a/src/pages/AnalyticsPage.tsx b/src/pages/AnalyticsPage.tsx index 7f45093..6788430 100644 --- a/src/pages/AnalyticsPage.tsx +++ b/src/pages/AnalyticsPage.tsx @@ -192,7 +192,6 @@ const styles: Record = { fontFamily: MONO, fontSize: 11, letterSpacing: "0.14em", - textTransform: "uppercase", color: "var(--color-text-muted)", }, heroTitle: { @@ -229,7 +228,6 @@ const styles: Record = { fontFamily: MONO, fontSize: 10, letterSpacing: "0.12em", - textTransform: "uppercase", color: "var(--color-text-muted)", }, statValue: { diff --git a/src/pages/WalletPage.tsx b/src/pages/WalletPage.tsx index f6f0df3..baa0d80 100644 --- a/src/pages/WalletPage.tsx +++ b/src/pages/WalletPage.tsx @@ -230,7 +230,6 @@ const styles: Record = { fontFamily: MONO, fontSize: 11, letterSpacing: "0.14em", - textTransform: "uppercase", color: "var(--color-text-muted)", marginBottom: 4, }, @@ -269,7 +268,6 @@ const styles: Record = { fontFamily: MONO, fontSize: 10, letterSpacing: "0.12em", - textTransform: "uppercase", color: "var(--color-text-muted)", }, statValue: { diff --git a/src/services/serviceWorker.ts b/src/services/serviceWorker.ts index 46d3b9d..1bcd650 100644 --- a/src/services/serviceWorker.ts +++ b/src/services/serviceWorker.ts @@ -1,53 +1,39 @@ /** * LIMINAL — Service Worker registration * - * Wraps the navigator.serviceWorker.register() call with the guards - * we need: - * - Skipped in dev (import.meta.env.DEV) so HMR isn't intercepted - * - Skipped when the browser doesn't support service workers (older - * Safari, file:// origin, etc.) - * - Logs the result via console.warn on failure but never throws — - * a missing offline shell is not a fatal error - * - Listens for `controllerchange` (new SW activated) and reloads - * once so users always run the freshest deploy + * Disabled for hackathon submission. Previous SW versions kept caching + * stale bundles on the production domain, masking new deploys until + * users manually cleared storage. To prevent that footgun during demo + * + judging, we: * - * The actual SW lives in `public/sw.js` so Vite copies it verbatim - * to the build output. We don't bundle it through the JS pipeline - * because workers are loaded by URL, not module-graph. + * 1. No longer register a service worker. + * 2. Actively unregister any SW that a previous visit installed. + * 3. Clear every cache the previous SW seeded (CacheStorage entries). + * + * Effect: every page load fetches the freshest bundle from Vercel. + * Slightly higher network use, much better deploy-to-user latency. + * Re-enable after submission once the cadence settles and we want + * offline support back. */ -const SW_PATH = "/sw.js"; - -let reloaded = false; - export async function registerServiceWorker(): Promise { if (typeof window === "undefined") return; - // Vite injects DEV at build time; on production builds it's false. - if (import.meta.env.DEV) return; if (!("serviceWorker" in navigator)) return; try { - const reg = await navigator.serviceWorker.register(SW_PATH, { - scope: "/", - }); - // When a new SW activates, the browser is ready to use it but the - // current page still runs the old one. Reload exactly once so the - // user immediately sees the new deploy. - navigator.serviceWorker.addEventListener("controllerchange", () => { - if (reloaded) return; - reloaded = true; - window.location.reload(); - }); - if (reg.waiting) { - // A SW is already waiting on first load — likely an update from - // a previous session. Tell it to take over now. - reg.waiting.postMessage({ type: "SKIP_WAITING" }); + const regs = await navigator.serviceWorker.getRegistrations(); + for (const reg of regs) { + await reg.unregister(); + } + if (typeof caches !== "undefined") { + const keys = await caches.keys(); + for (const key of keys) { + await caches.delete(key); + } } } catch (err) { - // Don't toast / Sentry — service worker absence is benign. Just - // a console warn so devs can see if registration fails. console.warn( - `[LIMINAL/sw] register failed: ${err instanceof Error ? err.message : String(err)}`, + `[LIMINAL/sw] cleanup failed: ${err instanceof Error ? err.message : String(err)}`, ); } }