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) <noreply@anthropic.com>
This commit is contained in:
ops-bot
2026-06-04 16:15:01 +00:00
parent 6b1a5c281a
commit e43d8737cf
3 changed files with 12 additions and 6 deletions

View File

@@ -38,6 +38,9 @@ interface Props {
size?: number; size?: number;
variant?: AnimatedLogoVariant; variant?: AnimatedLogoVariant;
showTagline?: boolean; showTagline?: boolean;
/** If true, emblem only — wordmark + tagline hidden. Use on mobile
* breakpoints where horizontal space is tight. */
iconOnly?: boolean;
className?: string; className?: string;
} }
@@ -45,6 +48,7 @@ export default function AnimatedLogo({
size = 64, size = 64,
variant = 'onLight', variant = 'onLight',
showTagline = true, showTagline = true,
iconOnly = false,
className = '', className = '',
}: Props) { }: Props) {
// useId for stable, SSR-safe unique IDs (the page can render two of // useId for stable, SSR-safe unique IDs (the page can render two of
@@ -162,6 +166,7 @@ export default function AnimatedLogo({
</svg> </svg>
{/* ── WORDMARK + TAGLINE ───────────────────────────────────── */} {/* ── WORDMARK + TAGLINE ───────────────────────────────────── */}
{!iconOnly && (
<span <span
className="al-text" className="al-text"
style={{ display: 'inline-flex', flexDirection: 'column', gap: Math.round(size * 0.08), minWidth: 0 }} style={{ display: 'inline-flex', flexDirection: 'column', gap: Math.round(size * 0.08), minWidth: 0 }}
@@ -210,6 +215,7 @@ export default function AnimatedLogo({
</span> </span>
)} )}
</span> </span>
)}
{/* {/*
Component-scoped CSS. Keeping it inline (style jsx-free) so the Component-scoped CSS. Keeping it inline (style jsx-free) so the

View File

@@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import Link from "next/link"; import Link from "next/link";
import AppImage from "@/components/ui/AppImage"; import AppImage from "@/components/ui/AppImage";
import AvBeatLogo from "@/components/AvBeatLogo"; import AnimatedLogo from "@/components/AnimatedLogo";
import { import {
LinkedInIcon, LinkedInIcon,
InstagramIcon, InstagramIcon,
@@ -112,7 +112,7 @@ export default function Footer() {
href="/home-page" href="/home-page"
aria-label="AV Beat — home" aria-label="AV Beat — home"
className="flex-shrink-0 opacity-90 hover:opacity-100 transition-opacity"> className="flex-shrink-0 opacity-90 hover:opacity-100 transition-opacity">
<AvBeatLogo variant="full" emblemSize={36} /> <AnimatedLogo size={36} variant="onLight" />
</Link> </Link>
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">

View File

@@ -18,7 +18,7 @@ import LanguageSwitcher from "@/components/LanguageSwitcher";
import AdImage from "@/components/AdImage"; import AdImage from "@/components/AdImage";
import EventsDropdown from "@/components/EventsDropdown"; import EventsDropdown from "@/components/EventsDropdown";
import AboutDropdown from "@/components/AboutDropdown"; import AboutDropdown from "@/components/AboutDropdown";
import AvBeatLogo from "@/components/AvBeatLogo"; import AnimatedLogo from "@/components/AnimatedLogo";
import { pickAds } from "@/lib/ads"; import { pickAds } from "@/lib/ads";
interface NavItem { interface NavItem {
@@ -269,9 +269,9 @@ export default function Header() {
aria-label="AV Beat — homepage" 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" 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"
> >
<span className="hidden lg:inline-flex"><AvBeatLogo variant="full" emblemSize={44} /></span> <span className="hidden lg:inline-flex"><AnimatedLogo size={44} variant="onLight" /></span>
<span className="hidden md:inline-flex lg:hidden"><AvBeatLogo variant="wordmark" emblemSize={40} /></span> <span className="hidden md:inline-flex lg:hidden"><AnimatedLogo size={40} variant="onLight" showTagline={false} /></span>
<span className="inline-flex md:hidden"><AvBeatLogo variant="icon" emblemSize={36} /></span> <span className="inline-flex md:hidden"><AnimatedLogo size={36} variant="onLight" iconOnly /></span>
</Link> </Link>
{/* Header 728x90 banner — centered between logo and right side */} {/* Header 728x90 banner — centered between logo and right side */}