From e43d8737cfd7d54088d03f70195569caa21acfdd Mon Sep 17 00:00:00 2001 From: ops-bot Date: Thu, 4 Jun 2026 16:15:01 +0000 Subject: [PATCH] feat(brand): wire AnimatedLogo into Header + Footer - Header: replaces AvBeatLogo across all 3 breakpoints (full / no-tagline / iconOnly). - Footer: replaces AvBeatLogo full variant. - AnimatedLogo: new iconOnly prop hides the wordmark+tagline span entirely for the mobile breakpoint. Existing AvBeatLogo file kept on disk for now (unimported, can be deleted later) so we have a quick rollback target if anyone wants the static A+V monogram back. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/components/AnimatedLogo.tsx | 6 ++++++ src/components/Footer.tsx | 4 ++-- src/components/Header.tsx | 8 ++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/components/AnimatedLogo.tsx b/src/components/AnimatedLogo.tsx index 8166604..dfbb78a 100644 --- a/src/components/AnimatedLogo.tsx +++ b/src/components/AnimatedLogo.tsx @@ -38,6 +38,9 @@ interface Props { size?: number; variant?: AnimatedLogoVariant; showTagline?: boolean; + /** If true, emblem only — wordmark + tagline hidden. Use on mobile + * breakpoints where horizontal space is tight. */ + iconOnly?: boolean; className?: string; } @@ -45,6 +48,7 @@ export default function AnimatedLogo({ size = 64, variant = 'onLight', showTagline = true, + iconOnly = false, className = '', }: Props) { // useId for stable, SSR-safe unique IDs (the page can render two of @@ -162,6 +166,7 @@ export default function AnimatedLogo({ {/* ── WORDMARK + TAGLINE ───────────────────────────────────── */} + {!iconOnly && ( )} + )} {/* Component-scoped CSS. Keeping it inline (style jsx-free) so the diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 34bd254..692a06f 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,7 +1,7 @@ import React from "react"; import Link from "next/link"; import AppImage from "@/components/ui/AppImage"; -import AvBeatLogo from "@/components/AvBeatLogo"; +import AnimatedLogo from "@/components/AnimatedLogo"; import { LinkedInIcon, InstagramIcon, @@ -112,7 +112,7 @@ export default function Footer() { href="/home-page" aria-label="AV Beat — home" className="flex-shrink-0 opacity-90 hover:opacity-100 transition-opacity"> - +
diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 149dfe4..6f8c66b 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -18,7 +18,7 @@ import LanguageSwitcher from "@/components/LanguageSwitcher"; import AdImage from "@/components/AdImage"; import EventsDropdown from "@/components/EventsDropdown"; import AboutDropdown from "@/components/AboutDropdown"; -import AvBeatLogo from "@/components/AvBeatLogo"; +import AnimatedLogo from "@/components/AnimatedLogo"; import { pickAds } from "@/lib/ads"; interface NavItem { @@ -269,9 +269,9 @@ export default function Header() { aria-label="AV Beat — homepage" className="flex-shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--brand-blue)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--brand-bg)] rounded-md" > - - - + + + {/* Header 728x90 banner — centered between logo and right side */}