From c78b134d4dd83f6f531632ef04cfaf51e8ebe0f5 Mon Sep 17 00:00:00 2001 From: Richard R Date: Sun, 31 May 2026 20:48:18 -0600 Subject: [PATCH] phase 3: depth and rhythm polish --- src/app/(app)/epub/[id]/page.tsx | 8 +- src/app/(app)/html/[id]/page.tsx | 6 +- src/app/(app)/pdf/[id]/page.tsx | 32 ++--- src/app/(app)/signin/page.tsx | 20 +-- src/app/(app)/signup/page.tsx | 36 +++--- src/components/AudiobookExportModal.tsx | 122 +++++++++--------- src/components/CodeBlock.tsx | 2 +- src/components/ColorPicker.tsx | 6 +- src/components/ConfirmDialog.tsx | 2 +- src/components/CookieConsentBanner.tsx | 4 +- src/components/Header.tsx | 2 +- src/components/PrivacyModal.tsx | 12 +- src/components/ProgressCard.tsx | 6 +- src/components/ProgressPopup.tsx | 2 +- src/components/SettingsModal.tsx | 122 +++++++++--------- src/components/auth/AuthLoader.tsx | 6 +- src/components/auth/ClaimDataModal.tsx | 16 +-- src/components/auth/RateLimitBanner.tsx | 2 +- src/components/auth/UserMenu.tsx | 14 +- src/components/doclist/CreateFolderDialog.tsx | 6 +- src/components/doclist/DocumentList.tsx | 14 +- .../doclist/DocumentListSkeleton.tsx | 52 ++++---- src/components/doclist/DocumentPreview.tsx | 2 +- src/components/doclist/views/DocumentTile.tsx | 10 +- src/components/doclist/views/GalleryView.tsx | 40 +++--- src/components/doclist/views/ListView.tsx | 22 ++-- .../doclist/window/FinderSidebar.tsx | 30 ++--- .../doclist/window/FinderStatusBar.tsx | 4 +- .../doclist/window/FinderToolbar.tsx | 32 ++--- .../doclist/window/FinderWindow.tsx | 4 +- .../documents/DexieMigrationModal.tsx | 16 +-- .../documents/DocumentHeaderMenu.tsx | 32 ++--- .../documents/DocumentSelectionModal.tsx | 22 ++-- src/components/documents/DocumentUploader.tsx | 16 +-- src/components/documents/ZoomControl.tsx | 2 +- src/components/formPrimitives.tsx | 8 +- src/components/icons/Icons.tsx | 2 +- src/components/player/Navigator.tsx | 12 +- .../player/RateLimitPauseButton.tsx | 2 +- src/components/player/SpeedControl.tsx | 10 +- src/components/player/TTSPlayer.tsx | 8 +- src/components/player/VoicesControlBase.tsx | 16 +-- src/components/reader/ReaderSidebarShell.tsx | 8 +- src/components/reader/SegmentsSidebar.tsx | 64 ++++----- src/components/views/EPUBViewer.tsx | 18 +-- src/components/views/PDFViewer.tsx | 8 +- 46 files changed, 440 insertions(+), 440 deletions(-) diff --git a/src/app/(app)/epub/[id]/page.tsx b/src/app/(app)/epub/[id]/page.tsx index cf89c37..be5bf6d 100644 --- a/src/app/(app)/epub/[id]/page.tsx +++ b/src/app/(app)/epub/[id]/page.tsx @@ -173,9 +173,9 @@ export default function EPUBPage() {

{error}

- + Back to Documents @@ -190,7 +190,7 @@ export default function EPUBPage() { left={ @@ -242,7 +242,7 @@ export default function EPUBPage() { /> )} {isAtLimit ? ( -
+
diff --git a/src/app/(app)/html/[id]/page.tsx b/src/app/(app)/html/[id]/page.tsx index 995142b..2238fc2 100644 --- a/src/app/(app)/html/[id]/page.tsx +++ b/src/app/(app)/html/[id]/page.tsx @@ -160,7 +160,7 @@ export default function HTMLPage() {

{error}

@@ -177,7 +177,7 @@ export default function HTMLPage() { left={ @@ -233,7 +233,7 @@ export default function HTMLPage() { /> )} {isAtLimit ? ( -
+
diff --git a/src/app/(app)/pdf/[id]/page.tsx b/src/app/(app)/pdf/[id]/page.tsx index 6f8e2db..819e641 100644 --- a/src/app/(app)/pdf/[id]/page.tsx +++ b/src/app/(app)/pdf/[id]/page.tsx @@ -255,9 +255,9 @@ export default function PDFViewerPage() { - + Back to Documents @@ -308,34 +308,34 @@ export default function PDFViewerPage() { : (isMerging ? 'Stage: merge' : 'Stage: infer')); return ( -
+
{showDetailedParseLoader ? ( -
+
-
+
- PDF Layout Parse + PDF Layout Parse

{statusText}

-
+

{hasMeasuredProgress ? `Page ${pagesParsed} / ${totalPages}` : 'Awaiting first page'}

-

{stageLabel}

+

{stageLabel}

-
+
-

+

{hasMeasuredProgress ? `${Math.round(progressPercent)}% complete` : statusSubText}

@@ -345,7 +345,7 @@ export default function PDFViewerPage() { @@ -354,14 +354,14 @@ export default function PDFViewerPage() {
) : ( -
+

{compactLabel}

-

{compactSubLabel}

+

{compactSubLabel}

- +
@@ -384,7 +384,7 @@ export default function PDFViewerPage() { @@ -440,7 +440,7 @@ export default function PDFViewerPage() { /> )} {isAtLimit ? ( -
+
diff --git a/src/app/(app)/signin/page.tsx b/src/app/(app)/signin/page.tsx index bd0e93a..a486df1 100644 --- a/src/app/(app)/signin/page.tsx +++ b/src/app/(app)/signin/page.tsx @@ -120,11 +120,11 @@ function SignInContent() { -
+

{sessionExpired ? 'Session Expired' : 'Connect Account'}

-

+

{sessionExpired ? 'Please sign in again to continue' : 'Connect an email account to sync your data across devices'} @@ -154,8 +154,8 @@ function SignInContent() { value={email} onChange={(e) => { setEmail(e.target.value); setError(null); }} placeholder="me@example.com" - className="w-full rounded-lg bg-background py-2 px-3 text-foreground shadow-sm - focus:outline-none focus:ring-2 focus:ring-accent" + className="w-full rounded-lg bg-background py-2 px-3 text-foreground shadow-elev-1 + focus:outline-none focus:ring-2 focus:ring-accent-line" />

@@ -167,8 +167,8 @@ function SignInContent() { value={password} onChange={(e) => { setPassword(e.target.value); setError(null); }} placeholder="Password" - className="w-full rounded-lg bg-background py-2 px-3 text-foreground shadow-sm - focus:outline-none focus:ring-2 focus:ring-accent" + className="w-full rounded-lg bg-background py-2 px-3 text-foreground shadow-elev-1 + focus:outline-none focus:ring-2 focus:ring-accent-line" />
@@ -178,7 +178,7 @@ function SignInContent() { type="checkbox" checked={rememberMe} onChange={(e) => setRememberMe(e.target.checked)} - className="rounded border-muted text-accent focus:ring-accent" + className="rounded border-muted text-accent focus:ring-accent-line" /> Remember me @@ -230,16 +230,16 @@ function SignInContent() {
{/* Footer */} -
+
{enableUserSignups && ( -

+

Don't have an account?{' '} Sign up

)} -

+

By signing in, you agree to our{' '} ) : ( - + )}

{chapter.title}

-

+

{chapter.status !== 'completed' && Missing • }{formatDuration(chapter.duration)}

@@ -782,7 +782,7 @@ export function AudiobookExportModal({ {((onRegenerateChapter && !isGenerating) || chapter.status === 'completed') && ( @@ -799,7 +799,7 @@ export function AudiobookExportModal({ {chapter.status === 'completed' && ( <> @@ -807,7 +807,7 @@ export function AudiobookExportModal({ {({ active }) => (
{bookId && !isGenerating && ( -
+
@@ -938,43 +938,43 @@ export function AudiobookExportModal({ function AudiobookSettingsSkeleton() { return (
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
-
+
+
+
{Array.from({ length: 4 }).map((_, index) => ( -
+
))}
diff --git a/src/components/CodeBlock.tsx b/src/components/CodeBlock.tsx index f6ba950..f8eb86d 100644 --- a/src/components/CodeBlock.tsx +++ b/src/components/CodeBlock.tsx @@ -16,7 +16,7 @@ export function CodeBlock({ children }: { children: string }) { return (
+                      font-mono text-foreground border border-line">
         {children}
       
diff --git a/src/components/ConfirmDialog.tsx b/src/components/ConfirmDialog.tsx index 400961f..40da54b 100644 --- a/src/components/ConfirmDialog.tsx +++ b/src/components/ConfirmDialog.tsx @@ -62,7 +62,7 @@ export function ConfirmDialog({ leaveFrom="opacity-100 scale-100" leaveTo="opacity-0 scale-95" > - + -
+

🍪 We use cookies @@ -70,7 +70,7 @@ export function CookieConsentBanner() { className={buttonClass({ variant: 'primary', size: 'md', - className: 'whitespace-nowrap font-bold shadow-sm', + className: 'whitespace-nowrap font-bold shadow-elev-1', })} > Accept All diff --git a/src/components/Header.tsx b/src/components/Header.tsx index dfd8367..a89ece1 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -10,7 +10,7 @@ export function Header({ right?: ReactNode; }) { return ( -
+
{left} diff --git a/src/components/PrivacyModal.tsx b/src/components/PrivacyModal.tsx index 91c6ca9..43e4073 100644 --- a/src/components/PrivacyModal.tsx +++ b/src/components/PrivacyModal.tsx @@ -20,8 +20,8 @@ interface PrivacyModalProps { function PrivacyModalBody({ origin }: { origin: string }) { return (
-
-
Service Operator
+
+
Service Operator
This instance is hosted at {origin || 'this server'}.
@@ -102,7 +102,7 @@ export function PrivacyModal({ isOpen, onAccept, onDismiss }: PrivacyModalProps) leaveFrom="opacity-100 scale-100" leaveTo="opacity-0 scale-95" > - +
-
+
setAgreed(e.target.checked)} - className="h-4 w-4 rounded border-line text-accent focus:ring-accent bg-base" + className="h-4 w-4 rounded border-line text-accent focus:ring-accent-line bg-surface" />
@@ -216,7 +216,7 @@ export function showPrivacyModal(): void { leaveFrom="opacity-100 scale-100" leaveTo="opacity-0 scale-95" > - + +
{/* Header with operation type and cancel button */}
@@ -57,7 +57,7 @@ export function ProgressCard({ className={buttonClass({ variant: 'ghost', size: 'xs', - className: 'shrink-0 hover:bg-surface-sunken', + className: 'shrink-0 hover:bg-accent-wash', })} onClick={(e) => onCancel(e)} > @@ -74,7 +74,7 @@ export function ProgressCard({
{/* Stats row */} -
+
{completedChapters !== undefined && ( <> {completedChapters} chapters diff --git a/src/components/ProgressPopup.tsx b/src/components/ProgressPopup.tsx index 8a8578c..57afa29 100644 --- a/src/components/ProgressPopup.tsx +++ b/src/components/ProgressPopup.tsx @@ -42,7 +42,7 @@ export function ProgressPopup({
@@ -483,8 +483,8 @@ export function SettingsModal({ setActiveSection(visibleSections[0]?.id ?? 'theme'); }, [activeSection, visibleSections]); - const fieldLabelClass = 'block text-[11px] font-semibold uppercase tracking-wide text-muted'; - const sectionShellClass = 'space-y-2 pb-3 border-b border-offbase px-0.5'; + const fieldLabelClass = 'block text-[11px] font-semibold uppercase tracking-wide text-soft'; + const sectionShellClass = 'space-y-2 pb-3 border-b border-line-soft px-0.5'; const sectionHeadingClass = 'text-sm font-semibold text-foreground'; const effectiveProviderType = resolveEffectiveProviderType({ providerRef: selectedProviderRef, @@ -540,16 +540,16 @@ export function SettingsModal({ leaveFrom="opacity-100 scale-100" leaveTo="opacity-0 scale-95" > - + {/* Header */} -
+
Settings @@ -557,7 +557,7 @@ export function SettingsModal({
@@ -573,7 +573,7 @@ export function SettingsModal({ ) : ( <> {/* Mobile: 2x2 grid nav */} -
+
{visibleSections.map((section) => { const Icon = section.icon; return ( @@ -583,7 +583,7 @@ export function SettingsModal({ className={`flex items-center justify-center gap-1.5 px-2 py-1.5 rounded-lg text-xs font-medium transition-colors ${ activeSection === section.id ? 'bg-accent text-background' - : 'text-foreground hover:bg-offbase hover:text-accent' + : 'text-foreground hover:bg-accent-wash hover:text-accent' }`} > @@ -595,7 +595,7 @@ export function SettingsModal({
{/* Desktop: vertical sidebar */} -