diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx index 224ae2f1..13b04261 100644 --- a/src/app/contact/page.tsx +++ b/src/app/contact/page.tsx @@ -6,11 +6,11 @@ export const metadata: Metadata = { }; export default function ContactPage() { return ( -
+
← Back to Reframe @@ -27,11 +27,11 @@ export default function ContactPage() { href="https://github.com/magic-peach/reframe/issues" target="_blank" rel="noopener noreferrer" - className="text-lg font-semibold underline hover:opacity-80 transition-opacity" + className="text-lg font-semibold text-[var(--accent)] underline hover:text-[var(--accent-hover)] transition-colors" > GitHub Issues -

For bug reports and feature requests.

+

For bug reports and feature requests.

@@ -39,11 +39,11 @@ export default function ContactPage() { href="https://github.com/magic-peach/reframe/discussions" target="_blank" rel="noopener noreferrer" - className="text-lg font-semibold underline hover:opacity-80 transition-opacity" + className="text-lg font-semibold text-[var(--accent)] underline hover:text-[var(--accent-hover)] transition-colors" > GitHub Discussions -

For questions, ideas, and general help.

+

For questions, ideas, and general help.

diff --git a/src/app/globals.css b/src/app/globals.css index 0bab4371..408e2d8e 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -11,6 +11,9 @@ --muted: #64748b; --accent: #3b82f6; --accent-hover: #1d4ed8; + --accent-muted: rgba(59, 130, 246, 0.12); + --radius: 10px; + --shadow: 0 2px 12px rgba(15, 23, 42, 0.12); --film-600: #e63946; --film-400: #ff6b6b; --warning: #f59e0b; @@ -22,13 +25,16 @@ /* ── Dark mode tokens ── */ .dark { - --bg: #0f172a; - --surface: #1e293b; - --border: #334155; - --text: #f1f5f9; - --muted: #94a3b8; - --accent: #3b82f6; - --accent-hover: #2563eb; + --bg: #0f1117; + --surface: #1a1d27; + --border: #2e3147; + --text: #f0f0f5; + --muted: #8b8fa8; + --accent: #4f6ef7; + --accent-hover: #3a57d4; + --accent-muted: rgba(79, 110, 247, 0.12); + --radius: 10px; + --shadow: 0 2px 12px rgba(0, 0, 0, 0.3); --warning: #fbbf24; --error: #f87171; --error-bg: #7f1d1d; @@ -47,6 +53,9 @@ --accent: #FFFF00; --accent-hover: #FFFF00; + --accent-muted: rgba(255, 255, 0, 0.22); + --radius: 10px; + --shadow: none; --error: #FF6666; --success: #66FF66; @@ -82,9 +91,45 @@ body { background-color: var(--bg); color: var(--text); + line-height: 1.6; transition: background-color 0.3s ease, color 0.3s ease; } +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--text); + font-weight: 700; +} + +p, +li { + color: color-mix(in srgb, var(--text) 95%, transparent); +} + +button { + transition: all 0.2s ease; +} + +input, +select, +textarea { + background: var(--bg); + border: 1px solid var(--border); + color: var(--text); +} + +input:focus, +select:focus, +textarea:focus { + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-muted); + outline: none; +} + /* Smooth transitions for all themed elements */ *, *::before, @@ -95,7 +140,7 @@ body { } :focus-visible { - outline: 2px solid var(--accent); - outline-offset: 2px; - border-radius: 4px; + outline: 0; + box-shadow: 0 0 0 3px var(--accent-muted); + border-radius: var(--radius); } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 593f68c8..129528b2 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -70,7 +70,7 @@ export default function RootLayout({ Skip to main content @@ -78,7 +78,7 @@ export default function RootLayout({
diff --git a/src/app/page.tsx b/src/app/page.tsx index 5245ade9..381fbd80 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -8,7 +8,7 @@ export default function Home() { href="https://github.com/magic-peach/reframe" target="_blank" rel="noopener noreferrer" - className="hidden min-[300px]:flex fixed top-4 right-16 z-50 items-center gap-1.5 px-3 py-1.5 rounded-lg border border-[var(--border)] bg-[var(--surface)] text-[10px] font-heading font-semibold uppercase tracking-wider transition-all duration-200 ease-in-out hover:scale-105 hover:shadow-[0_0_10px_rgba(255,255,255,0.15)] hover:bg-white/10" + className="hidden min-[300px]:flex fixed top-4 right-16 z-50 items-center gap-1.5 px-3 py-1.5 rounded-lg border border-[var(--border)] bg-[var(--surface)] text-[10px] font-heading font-semibold uppercase tracking-wider transition-all duration-200 ease-in-out hover:scale-105 hover:border-[var(--accent)] hover:bg-[var(--accent-muted)] hover:shadow-[var(--shadow)]" > ⭐ Star on GitHub diff --git a/src/components/AudioSpeedControl.tsx b/src/components/AudioSpeedControl.tsx index bbeb93c8..dd6c6007 100644 --- a/src/components/AudioSpeedControl.tsx +++ b/src/components/AudioSpeedControl.tsx @@ -146,7 +146,7 @@ export default function AudioSpeedControl({ recipe, onChange }: Props) { )} {recipe.keepAudio && (recipe.trimStart !== 0 || recipe.trimEnd !== null) && ( -
+
); -} \ No newline at end of file +} diff --git a/src/components/DownloadResult.tsx b/src/components/DownloadResult.tsx index 1f61081c..bfc039ff 100644 --- a/src/components/DownloadResult.tsx +++ b/src/components/DownloadResult.tsx @@ -80,7 +80,7 @@ export default function DownloadResult({ result, onReset, soundOnCompletion, onT - = 100 ? "text-red-500 font-medium" : "text-[var(--muted)]")}> + = 100 ? "text-[var(--error)] font-medium" : "text-[var(--muted)]")}> {100 - name.length} chars remaining
@@ -93,7 +93,7 @@ export default function DownloadResult({ result, onReset, soundOnCompletion, onT maxLength={100} className={cn( "flex-1 px-3 py-2.5 bg-[var(--bg)] border rounded-lg text-sm transition-colors text-[var(--text)] placeholder:text-[var(--muted)]", - !isValid && name.length > 0 ? "border-red-500 focus:outline-red-500 focus:ring-1 focus:ring-red-500" : "border-[var(--border)] focus:outline-film-500" + !isValid && name.length > 0 ? "border-[var(--error)] focus:outline-[var(--error)] focus:ring-1 focus:ring-[var(--error)]" : "border-[var(--border)] focus:outline-[var(--accent)]" )} placeholder="Enter filename" /> @@ -102,7 +102,7 @@ export default function DownloadResult({ result, onReset, soundOnCompletion, onT
{!isValid && name.length > 0 && ( -

+

Filename contains invalid characters (\ / : * ? " < > |)

@@ -116,7 +116,7 @@ export default function DownloadResult({ result, onReset, soundOnCompletion, onT className={cn( "flex-1 min-w-[10rem] flex items-center justify-center gap-2 py-3 text-sm font-heading font-bold uppercase tracking-wide rounded-lg transition-all", isValid - ? "bg-film-600 text-white hover:bg-film-700 hover:scale-[1.01] active:scale-[0.99] cursor-pointer" + ? "bg-[var(--accent)] text-white hover:bg-[var(--accent-hover)] hover:scale-[1.02] active:scale-[0.99] cursor-pointer" : "bg-[var(--border)] text-[var(--muted)] cursor-not-allowed" )} onClick={(e) => { @@ -136,7 +136,7 @@ export default function DownloadResult({ result, onReset, soundOnCompletion, onT target="_blank" rel="noopener noreferrer" aria-label="Preview video in new tab" - className="flex items-center justify-center gap-2 px-4 py-3 border border-[var(--border)] text-[var(--muted)] text-sm rounded-lg hover:bg-[var(--bg)] transition-colors" + className="flex items-center justify-center gap-2 px-4 py-3 border border-[var(--border)] text-[var(--muted)] text-sm rounded-lg hover:border-[var(--accent)] hover:bg-[var(--accent-muted)] hover:text-[var(--text)] transition-colors" > Preview @@ -145,7 +145,7 @@ export default function DownloadResult({ result, onReset, soundOnCompletion, onT title="Reset and upload a new video" aria-label="Upload a new video" onClick={handleReset} - className="flex items-center gap-2 px-4 py-3 border border-[var(--border)] text-[var(--muted)] text-sm rounded-lg hover:bg-[var(--bg)] transition-colors" + className="flex items-center gap-2 px-4 py-3 border border-[var(--border)] text-[var(--muted)] text-sm rounded-lg hover:border-[var(--accent)] hover:bg-[var(--accent-muted)] hover:text-[var(--text)] transition-colors" >
@@ -605,7 +605,7 @@ export default function VideoEditor() { (isProcessing || !file) && "pointer-events-none opacity-50" )}> {!file && ( -
+

Getting Started

@@ -669,7 +669,7 @@ export default function VideoEditor() { "w-full flex items-center justify-center gap-3 py-5 min-h-[44px] rounded-xl", "font-display text-2xl tracking-widest transition-all duration-200", file && !isProcessing - ? "bg-film-600 hover:bg-film-700 hover:scale-[1.01] text-white shadow-lg shadow-film-200 active:scale-[0.98] cursor-pointer" + ? "bg-[var(--accent)] hover:bg-[var(--accent-hover)] hover:scale-[1.02] text-white shadow-[var(--shadow)] active:scale-[0.98] cursor-pointer" : "bg-[var(--border)] text-[var(--muted)] cursor-not-allowed" )} > @@ -687,4 +687,4 @@ export default function VideoEditor() {
); -} \ No newline at end of file +} diff --git a/src/components/VideoPreview.tsx b/src/components/VideoPreview.tsx index 0f20882c..d684c1e5 100644 --- a/src/components/VideoPreview.tsx +++ b/src/components/VideoPreview.tsx @@ -217,14 +217,14 @@ export default function VideoPreview({
{isLoading && (
)} @@ -246,18 +246,18 @@ export default function VideoPreview({ {overlay.mode === "fit" ? ( // Letterbox: semi-transparent bars outside the content area <> -
-
-
-
+
+
+
+
) : ( // Fill/crop: dashed border around the surviving area, dimmed outside <> -
-
-
-
+
+
+
+
setShowOverlay((v) => !v)} className={`absolute top-2 left-2 px-2 py-1 text-[10px] font-heading font-bold uppercase tracking-wider rounded transition-colors z-10 pointer-events-auto ${ showOverlay - ? "bg-film-600 text-white" - : "bg-black/60 text-white/70 hover:bg-black/80" + ? "bg-[var(--accent)] text-white" + : "bg-[var(--surface)] text-[var(--muted)] hover:bg-[var(--accent-muted)] hover:text-[var(--text)]" }`} aria-pressed={showOverlay} aria-label={showOverlay ? "Hide framing overlay" : "Show framing overlay"} @@ -309,8 +309,8 @@ export default function VideoPreview({ onClick={() => setShowComparison((v) => !v)} className={`absolute top-2 right-32 px-2 py-1 text-[10px] font-heading font-bold uppercase tracking-wider rounded transition-colors z-10 pointer-events-auto ${ showComparison - ? "bg-film-600 text-white" - : "bg-black/60 text-white/70 hover:bg-black/80" + ? "bg-[var(--accent)] text-white" + : "bg-[var(--surface)] text-[var(--muted)] hover:bg-[var(--accent-muted)] hover:text-[var(--text)]" }`} aria-pressed={showComparison} aria-label={showComparison ? "Hide comparison preview" : "Show comparison preview"} @@ -325,7 +325,7 @@ export default function VideoPreview({