From 9e4ecd3ee078880b12a63ebf12130cfeb375ade1 Mon Sep 17 00:00:00 2001 From: Martin Dvorak Date: Wed, 7 Oct 2026 09:06:18 +0000 Subject: [PATCH] Deck chrome: neutral surfaces, borders and text (no navy leftovers) - The study feed's progress header and bottom pager no longer use the old navy glass: new .study-chrome class uses the neutral surface token (same gray as the cards, #2f2f2f in dark), the neutral border (8% white in dark, #e5e5e5 in light) and a neutral shadow. - Close tile, streak pill and XP pill now use --surface-sunken / --text-muted, matching the app's other buttons and chips; the close glyph is the shared XIcon. - Bottom pager: counter in --text, arrows in --text-muted. - .glass (mobile header) no longer has the hardcoded #101720 navy; it is now color-mix of the surface token. Removed the unused --color-night-* tokens and the last night- usage (create screen sticky bar). - Hidden the 'Swipe up' hint on desktop, where it collided with the bottom pager. New deck-chrome suite: 15/15 (computed surfaces/borders/text in both themes, no navy); pwa 16/16, final-ux 12/12, security 8/8, contrast 20/20. --- app/globals.css | 21 ++++++++++++--------- components/StudyFeed.tsx | 20 ++++++++++---------- components/UploadScreen.tsx | 2 +- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/app/globals.css b/app/globals.css index 08736b5..7315bcb 100644 --- a/app/globals.css +++ b/app/globals.css @@ -35,12 +35,6 @@ --color-aurora-lilac: #c3b6f0; --color-aurora-peach: #f6cdb4; - --color-night-50: #f6f9fc; - --color-night-700: #1d2733; - --color-night-800: #151d27; - --color-night-900: #101720; - --color-night-950: #0a1017; - --font-sans: -apple-system, BlinkMacSystemFont, ui-sans-serif, system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji"; @@ -302,11 +296,20 @@ body { /* Tailwind emits both the prefixed and standard properties; hand-written backdrop-filter gets minified down to -webkit- only, which paints nothing. */ @apply backdrop-blur-xl backdrop-saturate-150; - background: color-mix(in oklab, white 68%, transparent); + background: color-mix(in oklab, var(--surface) 70%, transparent); border-bottom: 1px solid var(--hairline); } -.dark .glass { - background: color-mix(in oklab, #101720 70%, transparent); + +/* Study-feed chrome (progress header + bottom pager): the same neutral + surface as the cards, with a neutral border and shadow. */ +.study-chrome { + @apply backdrop-blur-xl backdrop-saturate-150; + background: color-mix(in oklab, var(--surface) 88%, transparent); + border: 1px solid var(--hairline); + box-shadow: var(--shadow-card); +} +.dark .study-chrome { + border-color: var(--hairline-soft); } .card { diff --git a/components/StudyFeed.tsx b/components/StudyFeed.tsx index cf5aed7..d0970c8 100644 --- a/components/StudyFeed.tsx +++ b/components/StudyFeed.tsx @@ -9,7 +9,7 @@ import { celebrate } from "@/lib/confetti"; import type { Activity, Deck } from "@/lib/schemas"; import { recordAttempt } from "@/lib/storage"; import { cn } from "@/lib/utils"; -import { BoltIcon, FlameIcon } from "@/components/icons"; +import { BoltIcon, FlameIcon, XIcon } from "@/components/icons"; import { Button, ProgressBar } from "@/components/ui"; import { ResultsScreen } from "./ResultsScreen"; @@ -147,14 +147,14 @@ export function StudyFeed({ deck }: { deck: Deck }) {
{/* Chrome ---------------------------------------------------- */}
-
+
- โœ• +
= 3 ? "tint-peach" - : "glass-chip text-frost-600 dark:text-frost-200", + : "bg-[var(--surface-sunken)] text-[var(--text-muted)]", )} title={`Answer streak: ${streak}`} aria-label={`Answer streak: ${streak}`} @@ -178,7 +178,7 @@ export function StudyFeed({ deck }: { deck: Deck }) { {streak} @@ -187,7 +187,7 @@ export function StudyFeed({ deck }: { deck: Deck }) {
-
+
{deck.title} {retryMode ? "Retry ยท " : ""} @@ -250,7 +250,7 @@ export function StudyFeed({ deck }: { deck: Deck }) { initial={{ opacity: 0, y: 12 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0 }} - className="pointer-events-none absolute inset-x-0 bottom-6 z-20 flex justify-center" + className="pointer-events-none absolute inset-x-0 bottom-6 z-20 flex justify-center sm:hidden" > Swipe up for the next activity โ†‘ @@ -261,11 +261,11 @@ export function StudyFeed({ deck }: { deck: Deck }) { {/* Desktop next/prev buttons --------------------------------- */}
-
+
- + {index + 1} / {slideCount}
-
+

{documentsBusy