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:
@@ -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
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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 */}
|
||||||
|
|||||||
Reference in New Issue
Block a user