diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0f949be2..03ee0db9 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -5,6 +5,7 @@ import "./globals.css"; import { ThemeProvider } from "@/components/ThemeProvider"; import { ThemeToggle } from "@/components/ThemeToggle"; import ScrollToTop from "@/components/ScrollToTop"; +import BrandLogo from "@/components/BrandLogo"; export const metadata: Metadata = { title: "Reframe — Resize, trim, and export videos in your browser", @@ -90,7 +91,10 @@ export default function RootLayout({ role="banner" className="sticky top-0 z-50 flex items-center justify-between px-6 py-3 border-b border-[var(--border)] bg-[var(--bg)]" > -

Reframe

+
+ +

Reframe

+
diff --git a/src/components/BrandLogo.tsx b/src/components/BrandLogo.tsx new file mode 100644 index 00000000..06d17492 --- /dev/null +++ b/src/components/BrandLogo.tsx @@ -0,0 +1,29 @@ +import { cn } from "@/lib/utils"; + +interface BrandLogoProps { + className?: string; + size?: number; +} + +export default function BrandLogo({ className, size = 32 }: BrandLogoProps) { + return ( + + + + {/* Notches */} + + + + + + + + ); +} diff --git a/src/components/DownloadResult.tsx b/src/components/DownloadResult.tsx index 35bb9460..320968f2 100644 --- a/src/components/DownloadResult.tsx +++ b/src/components/DownloadResult.tsx @@ -101,10 +101,10 @@ export default function DownloadResult({ result, onReset, soundOnCompletion }: P href={isValid ? result.blobUrl : undefined} download={isValid ? filename : undefined} className={cn( - "flex-1 min-w-[10rem] flex items-center justify-center gap-2 py-3 text-white text-sm font-heading font-bold uppercase tracking-wide rounded-lg transition-all", - isValid - ? "bg-film-600 hover:bg-film-700 hover:scale-[1.01] active:scale-[0.99] cursor-pointer" - : "bg-film-600/50 cursor-not-allowed" + "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(--border)] text-[var(--muted)] cursor-not-allowed" )} onClick={(e) => { if (!isValid) e.preventDefault(); diff --git a/src/components/VideoEditor.tsx b/src/components/VideoEditor.tsx index 6e297539..1f477bdc 100644 --- a/src/components/VideoEditor.tsx +++ b/src/components/VideoEditor.tsx @@ -16,6 +16,7 @@ import ExportSettings from "./ExportSettings"; import ExportOverlay from "./ExportOverlay"; import DownloadResult from "./DownloadResult"; import ImageOverlay from "./ImageOverlay" + import { cn } from "@/lib/utils"; import { Layers, Crop, Scissors, RotateCw, Volume2, @@ -243,6 +244,7 @@ export default function VideoEditor() {
} title="Audio & Speed" delay={150}> +
updateRecipe({ brightness: Number(e.target.value) })} aria-label="Adjust brightness" - className="w-full" + className="w-full accent-film-600" />
{/* Contrast */} @@ -298,7 +300,7 @@ export default function VideoEditor() { value={recipe.contrast} onChange={(e) => updateRecipe({ contrast: Number(e.target.value) })} aria-label="Adjust contrast" - className="w-full" + className="w-full accent-film-600" /> {/* Saturation */} @@ -323,7 +325,7 @@ export default function VideoEditor() { value={recipe.saturation} onChange={(e) => updateRecipe({ saturation: Number(e.target.value) })} aria-label="Adjust saturation" - className="w-full" + className="w-full accent-film-600" /> @@ -445,7 +447,7 @@ export default function VideoEditor() { "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(--border)] text-[var(--muted)] opacity-40 cursor-not-allowed" + : "bg-[var(--border)] text-[var(--muted)] cursor-not-allowed" )} >