From 8042024c4ae713c9d72877264a3861d26629c98b Mon Sep 17 00:00:00 2001 From: Local Administrator Date: Wed, 3 Jun 2026 12:07:18 +0000 Subject: [PATCH] =?UTF-8?q?feat(brand):=20AV=20BEAT=202026=20rebrand=20?= =?UTF-8?q?=E2=80=94=20blue/navy/white=20identity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New AvBeatLogo inline-SVG component (rounded-square emblem with forward-leaning AV monogram + horizontal beam detail) at src/components/AvBeatLogo.tsx, three variants (full/wordmark/icon). - Header.tsx now uses the responsive AV BEAT logo lockup in the top-left, links to /, full lockup on desktop (emblem+wordmark+tagline), emblem+wordmark on tablet, emblem-only on mobile. - Removed DualSpeedTicker (the 'RECENT FORUM POSTS' ticker strip); the news ticker / glow chrome does not match the new aesthetic and the forum row was the explicit removal target. - Tailwind theme + globals.css now expose the AV BEAT 2026 palette as semantic tokens: --brand-blue (#1D4ED8), --brand-blue-bright (#38BDF8), --brand-navy (#0F172A), --brand-bg (#F8FAFC), --brand-surface, --brand-border, --brand-text, --brand-text-muted. Legacy --color-* aliases re-point to the new tokens so any inline-styled component re-themes for free. - Site-wide hex sweep migrates 2,769 hardcoded color literals across 144 files from the old dark-broadcast palette to the new tokens (orange -> blue, dark-brown -> white surface / navy text, cream -> navy). - Layout body class flipped from 'bb-neon' to 'bg-brand-bg text-brand-text' so the dark glow chrome no longer leaks through the new light theme. --- src/app/about/contact/page.tsx | 4 +- src/app/about/page.tsx | 4 +- src/app/about/team/page.tsx | 14 +- src/app/account/page.tsx | 136 ++++++------- src/app/admin/accounting/clients/page.tsx | 30 +-- src/app/admin/accounting/commissions/page.tsx | 20 +- src/app/admin/accounting/documents/page.tsx | 36 ++-- src/app/admin/accounting/expenses/page.tsx | 30 +-- src/app/admin/accounting/invoices/page.tsx | 30 +-- src/app/admin/accounting/orders/page.tsx | 54 ++--- src/app/admin/accounting/page.tsx | 32 +-- .../admin/accounting/reconciliation/page.tsx | 10 +- src/app/admin/accounting/reports/page.tsx | 40 ++-- src/app/admin/accounting/staff/page.tsx | 28 +-- src/app/admin/adops/ios/page.tsx | 54 ++--- src/app/admin/adops/notifications/page.tsx | 10 +- src/app/admin/adops/page.tsx | 32 +-- src/app/admin/adops/products/page.tsx | 34 ++-- src/app/admin/analytics/page.tsx | 36 ++-- src/app/admin/articles/page.tsx | 132 ++++++------ src/app/admin/audit-log/page.tsx | 50 ++--- src/app/admin/banned-terms/page.tsx | 48 ++--- src/app/admin/banners/BannerRows.tsx | 16 +- .../[id]/analytics/AnalyticsCharts.tsx | 4 +- src/app/admin/banners/[id]/analytics/page.tsx | 4 +- src/app/admin/banners/page.tsx | 2 +- src/app/admin/company-coverage/page.tsx | 36 ++-- src/app/admin/company-tracker/page.tsx | 84 ++++---- src/app/admin/content-status/page.tsx | 22 +- src/app/admin/email-analytics/page.tsx | 52 ++--- src/app/admin/email/domains/page.tsx | 42 ++-- src/app/admin/email/page.tsx | 12 +- src/app/admin/email/send-log/page.tsx | 14 +- src/app/admin/email/suppressions/page.tsx | 60 +++--- src/app/admin/forum-dashboard/page.tsx | 58 +++--- src/app/admin/forum-moderation/page.tsx | 56 +++--- src/app/admin/forum-seed/page.tsx | 36 ++-- src/app/admin/import/page.tsx | 60 +++--- src/app/admin/newsletter/analytics/page.tsx | 30 +-- .../admin/newsletter/campaign-editor/page.tsx | 48 ++--- src/app/admin/newsletter/page.tsx | 78 +++---- src/app/admin/newsletter/templates/page.tsx | 72 +++---- src/app/admin/notifications/page.tsx | 18 +- src/app/admin/page.tsx | 40 ++-- .../admin/review-queue/[id]/ReviewActions.tsx | 2 +- src/app/admin/review-queue/[id]/page.tsx | 4 +- src/app/admin/review-queue/page.tsx | 6 +- src/app/admin/rmp/page.tsx | 10 +- src/app/admin/roles/page.tsx | 60 +++--- src/app/admin/suspensions/page.tsx | 22 +- src/app/admin/users/page.tsx | 52 ++--- src/app/admin/wp-users/page.tsx | 2 +- src/app/advertise/page.tsx | 44 ++-- .../admin/company-coverage-reminder/route.ts | 6 +- src/app/api/news/share-email/route.ts | 8 +- src/app/api/newsletter/subscribe/route.ts | 20 +- src/app/api/newsletter/subscribers/route.ts | 20 +- src/app/api/newsletter/templates/route.ts | 2 +- .../articles/[slug]/ArticleDetailClient.tsx | 48 ++--- .../[slug]/components/CommentsSection.tsx | 24 +-- src/app/auth-debug/ClientReadout.tsx | 2 +- src/app/authors/[slug]/page.tsx | 42 ++-- src/app/contributor/page.tsx | 6 +- src/app/dashboard/ai-console/page.tsx | 70 +++---- .../dashboard/ai-console/settings/page.tsx | 38 ++-- .../billing/components/OverviewTab.tsx | 4 +- src/app/dashboard/editorial/page.tsx | 24 +-- src/app/dashboard/show-calendar/page.tsx | 64 +++--- src/app/error.tsx | 6 +- src/app/forum/[slug]/page.tsx | 58 +++--- src/app/forum/forgot-password/page.tsx | 16 +- src/app/forum/login/page.tsx | 18 +- src/app/forum/page.tsx | 82 ++++---- src/app/forum/profile/edit/page.tsx | 30 +-- src/app/forum/register/page.tsx | 32 +-- src/app/forum/reset-password/page.tsx | 18 +- src/app/forum/thread/[id]/page.tsx | 76 +++---- src/app/forum/user/[username]/page.tsx | 40 ++-- src/app/gear/page.tsx | 10 +- src/app/global-error.tsx | 4 +- src/app/home-page/components/ArticleFeed.tsx | 86 ++++---- .../home-page/components/FeaturedBento.tsx | 16 +- src/app/home-page/components/NewsTicker.tsx | 2 +- .../home-page/components/NewsletterSignup.tsx | 18 +- .../components/SpotlightCarousel.tsx | 16 +- src/app/home-page/page.tsx | 6 +- src/app/layout.tsx | 4 +- src/app/login/page.tsx | 14 +- src/app/manufacturers/DirectoryClient.tsx | 22 +- src/app/manufacturers/[slug]/BackLink.tsx | 2 +- src/app/manufacturers/[slug]/page.tsx | 46 ++--- src/app/manufacturers/page.tsx | 6 +- src/app/marketplace/account/billing/page.tsx | 6 +- src/app/marketplace/account/page.tsx | 54 ++--- src/app/marketplace/admin/queue/page.tsx | 12 +- src/app/marketplace/gigs/[id]/page.tsx | 10 +- src/app/marketplace/gigs/page.tsx | 8 +- src/app/marketplace/jobs/[id]/page.tsx | 8 +- src/app/marketplace/jobs/page.tsx | 8 +- src/app/marketplace/join/page.tsx | 40 ++-- src/app/marketplace/page.tsx | 8 +- src/app/marketplace/profile/[slug]/page.tsx | 8 +- src/app/marketplace/search/page.tsx | 24 +-- src/app/nab-2026/page.tsx | 24 +-- src/app/news/NewsPageClient.tsx | 32 +-- .../news/[slug]/NewsArticleDetailClient.tsx | 82 ++++---- src/app/newsletter/archive/page.tsx | 48 ++--- src/app/privacy/page.tsx | 10 +- src/app/profile/[userId]/page.tsx | 110 +++++----- src/app/reading-list/page.tsx | 46 ++--- src/app/register/page.tsx | 32 +-- src/app/search/page.tsx | 8 +- src/app/show-coverage/[slug]/page.tsx | 4 +- src/app/show-coverage/page.tsx | 2 +- src/app/technology/page.tsx | 28 +-- src/app/terms/page.tsx | 2 +- src/components/AISuggestedArticles.tsx | 48 ++--- src/components/AboutDropdown.tsx | 6 +- src/components/AdSlot.tsx | 2 +- src/components/ArticleComments.tsx | 28 +-- src/components/AskBBAI.tsx | 12 +- src/components/AvBeatLogo.tsx | 111 ++++++++++ src/components/CompaniesInThisStory.tsx | 6 +- src/components/CompanyMentionsHover.tsx | 12 +- src/components/CookieConsent.tsx | 6 +- src/components/DualSpeedTicker.tsx | 2 +- src/components/EventsDropdown.tsx | 6 +- src/components/FeaturedBentoFromDb.tsx | 8 +- src/components/FeaturedCarousel.tsx | 6 +- src/components/Footer.tsx | 22 +- src/components/Header.tsx | 114 ++++++----- src/components/LanguageSwitcher.tsx | 8 +- src/components/LiveWireTicker.tsx | 2 +- src/components/NotificationCenter.tsx | 24 +-- src/components/RichTextEditor.tsx | 12 +- src/components/SponsorLogoStrip.tsx | 8 +- src/components/SystemStatusBar.tsx | 2 +- src/components/admin/RmpAdminNav.tsx | 14 +- src/components/adops/RoleGate.tsx | 2 +- src/components/auth/SocialAuthButtons.tsx | 12 +- src/components/crew-lounge/CreditsDisplay.tsx | 2 +- src/components/forum/ImageAttachButton.tsx | 2 +- src/components/forum/RichBody.tsx | 2 +- src/styles/redesign-tokens.css | 18 +- src/styles/tailwind.css | 190 ++++++++++-------- tailwind.config.js | 83 ++++---- 146 files changed, 2219 insertions(+), 2081 deletions(-) create mode 100644 src/components/AvBeatLogo.tsx diff --git a/src/app/about/contact/page.tsx b/src/app/about/contact/page.tsx index e0f022a..80b5b1c 100644 --- a/src/app/about/contact/page.tsx +++ b/src/app/about/contact/page.tsx @@ -51,7 +51,7 @@ export default function ContactPage() {
-
+
AV Beat
@@ -63,7 +63,7 @@ export default function ContactPage() {
    {CONTACTS.map((c) => ( -
  • +
  • {c.title}
    diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index 798091c..1afcc17 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -14,7 +14,7 @@ export default function AboutPage() {
    -
    +
    AV Beat
    @@ -79,7 +79,7 @@ export default function AboutPage() { function Stat({ label, value }: { label: string; value: string }) { return ( -
    +
    {value}
    {label} diff --git a/src/app/about/team/page.tsx b/src/app/about/team/page.tsx index 4042285..648edc5 100644 --- a/src/app/about/team/page.tsx +++ b/src/app/about/team/page.tsx @@ -101,7 +101,7 @@ export default async function TeamPage() {
    - + AV Beat · editorial

    @@ -129,10 +129,10 @@ export default async function TeamPage() { return (
  • {/* Top accent */} -
    +
    {p.avatar_url ? ( @@ -142,7 +142,7 @@ export default async function TeamPage() { alt={p.name} width={96} height={96} - className="w-24 h-24 rounded-full border-2 border-[#1a1f2a] group-hover:border-[#D85A30]/40 transition-colors object-cover" + className="w-24 h-24 rounded-full border-2 border-[#1a1f2a] group-hover:border-[#1D4ED8]/40 transition-colors object-cover" /> ) : ( @@ -155,7 +155,7 @@ export default async function TeamPage() {

    {p.name}

    {(p.beat || p.slug === "ryan-salazar") && ( -
    +
    {displayBeat(p)}
    )} @@ -209,7 +209,7 @@ export default async function TeamPage() { {ops.map((p) => (
  • {p.avatar_url ? (

    {p.display_name}

    -
    +
    {p.role}
    diff --git a/src/app/account/page.tsx b/src/app/account/page.tsx index 7a6e511..1af9d35 100644 --- a/src/app/account/page.tsx +++ b/src/app/account/page.tsx @@ -284,7 +284,7 @@ export default function AccountPage() { if (loading) { return ( -
    +
    @@ -298,21 +298,21 @@ export default function AccountPage() { } return ( -
    +
    {/* Toast */} {toast && (
    {toast.type === "success" ? ( -
    +
    @@ -336,25 +336,25 @@ export default function AccountPage() { {/* Page Header */}
    -

    Account Settings

    +

    Account Settings

    {user?.email}

    {/* Tabs */} -
    +
    {tabs.map((tab) => (
    -
    -

    +
    +

    Account Info

    @@ -435,7 +435,7 @@ export default function AccountPage() { type="email" value={user?.email || ""} disabled - className="w-full bg-[#1c1815] border border-[#222] text-[#555] font-body text-sm px-3 py-2.5 rounded-sm cursor-not-allowed" + className="w-full bg-[#F8FAFC] border border-[#222] text-[#555] font-body text-sm px-3 py-2.5 rounded-sm cursor-not-allowed" />

    Email cannot be changed here.

    @@ -445,7 +445,7 @@ export default function AccountPage() {
    @@ -456,8 +456,8 @@ export default function AccountPage() { {activeTab === "security" && (
    -
    -

    +
    +

    Change Password

    @@ -471,7 +471,7 @@ export default function AccountPage() { onChange={(e) => setNewPassword(e.target.value)} placeholder="Enter new password" minLength={6} - className="w-full bg-[#1c1815] border border-[#3a322b] text-[#e0e0e0] font-body text-sm px-3 py-2.5 rounded-sm focus:outline-none focus:border-[#F0A623] focus:ring-1 focus:ring-[#F0A623] transition-colors placeholder-[#444]" + className="w-full bg-[#F8FAFC] border border-[#DCE6F2] text-[#e0e0e0] font-body text-sm px-3 py-2.5 rounded-sm focus:outline-none focus:border-[#1D4ED8] focus:ring-1 focus:ring-[#1D4ED8] transition-colors placeholder-[#444]" />
    @@ -484,7 +484,7 @@ export default function AccountPage() { onChange={(e) => setConfirmPassword(e.target.value)} placeholder="Confirm new password" minLength={6} - className="w-full bg-[#1c1815] border border-[#3a322b] text-[#e0e0e0] font-body text-sm px-3 py-2.5 rounded-sm focus:outline-none focus:border-[#F0A623] focus:ring-1 focus:ring-[#F0A623] transition-colors placeholder-[#444]" + className="w-full bg-[#F8FAFC] border border-[#DCE6F2] text-[#e0e0e0] font-body text-sm px-3 py-2.5 rounded-sm focus:outline-none focus:border-[#1D4ED8] focus:ring-1 focus:ring-[#1D4ED8] transition-colors placeholder-[#444]" />
    @@ -492,7 +492,7 @@ export default function AccountPage() {

    @@ -506,7 +506,7 @@ export default function AccountPage() {

    @@ -520,12 +520,12 @@ export default function AccountPage() {

    Saved Articles {bookmarks.length > 0 && ( - + {bookmarks.length} )}

    - + Full List →
    @@ -533,37 +533,37 @@ export default function AccountPage() { {bookmarksLoading ? (
    {[1, 2, 3].map((i) => ( -
    +
    -
    +
    -
    -
    +
    +
    ))}
    ) : bookmarks.length === 0 ? ( -
    +

    No saved articles yet.

    - + Browse News →
    ) : (
    {bookmarks.map((item) => ( -
    +
    {item.article_image ? ( ) : ( -
    +
    @@ -572,10 +572,10 @@ export default function AccountPage() {
    {item.article_category && ( - {item.article_category} + {item.article_category} )} -

    +

    {item.article_title}

    @@ -605,7 +605,7 @@ export default function AccountPage() {

    Reading History {history.length > 0 && ( - + {history.length} )} @@ -622,37 +622,37 @@ export default function AccountPage() { {historyLoading ? (
    {[1, 2, 3].map((i) => ( -
    +
    -
    +
    -
    -
    +
    +
    ))}
    ) : history.length === 0 ? ( -
    +

    No reading history yet.

    - + Browse News →
    ) : (
    {history.map((item) => ( -
    +
    {item.article_image ? ( ) : ( -
    +
    @@ -661,10 +661,10 @@ export default function AccountPage() {
    {item.article_category && ( - {item.article_category} + {item.article_category} )} -

    +

    {item.article_title}

    @@ -693,17 +693,17 @@ export default function AccountPage() { {topicsLoading ? (
    {[1, 2, 3, 4, 5, 6].map((i) => ( -
    +
    ))}
    ) : topics.length === 0 ? ( -
    +

    No topic preferences tracked yet.

    Read articles to build your interest profile.

    - + Browse News →
    @@ -714,18 +714,18 @@ export default function AccountPage() { const maxCount = topics[0]?.view_count || 1; const pct = Math.round((t.view_count / maxCount) * 100); return ( -
    +
    {t.topic} - + {t.view_count}×
    -
    +
    @@ -744,13 +744,13 @@ export default function AccountPage() { {/* Preferences Tab */} {activeTab === "preferences" && (
    -
    -

    +
    +

    Forum Reputation

    -
    - +
    + {profile?.reputation ?? 0} Points @@ -759,15 +759,15 @@ export default function AccountPage() {

    Earn reputation by posting helpful threads and replies in the community forum.

    - + Go to Forum →
    -
    -

    +
    +

    Reading Preferences

    @@ -778,7 +778,7 @@ export default function AccountPage() {
    + className="font-body text-xs font-bold uppercase tracking-wide text-[#1D4ED8] hover:text-[#1E3A8A] transition-colors"> Manage →
    @@ -789,7 +789,7 @@ export default function AccountPage() {

    + className="font-body text-xs font-bold uppercase tracking-wide text-[#1D4ED8] hover:text-[#1E3A8A] transition-colors"> View List →
    @@ -808,8 +808,8 @@ export default function AccountPage() { onClick={() => handleToggleDigest(!weeklyDigest)} aria-pressed={weeklyDigest} aria-label="Toggle weekly digest email" - className={`relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 transition-colors duration-200 ease-in-out focus:outline-none focus-visible:ring-2 focus-visible:ring-[#F0A623] disabled:opacity-50 ${ - weeklyDigest ? "bg-[#F0A623] border-[#F0A623]" : "bg-[#3a322b] border-[#333]" + className={`relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 transition-colors duration-200 ease-in-out focus:outline-none focus-visible:ring-2 focus-visible:ring-[#1D4ED8] disabled:opacity-50 ${ + weeklyDigest ? "bg-[#1D4ED8] border-[#1D4ED8]" : "bg-[#DCE6F2] border-[#333]" }`}>
    ; + if (loading) return
    ; if (!user) return null; return ( @@ -102,7 +102,7 @@ export default function ClientsPage() {

    Clients

    ← Accounting
    - +

    {/* Success Toast */} @@ -116,14 +116,14 @@ export default function ClientsPage() { {/* Filters */}
    {['active','inactive','all'].map(s => ( - + ))} - setSearch(e.target.value)} placeholder="Search clients…" className="ml-auto px-3 py-1 bg-[#111] border border-[#3a322b] rounded text-xs text-white placeholder-[#555] focus:outline-none focus:border-[#F0A623]" /> + setSearch(e.target.value)} placeholder="Search clients…" className="ml-auto px-3 py-1 bg-[#111] border border-[#DCE6F2] rounded text-xs text-white placeholder-[#555] focus:outline-none focus:border-[#1D4ED8]" />
    {/* New Client Form */} {showForm && ( - +

    New Client

    {errors._form && ( @@ -148,7 +148,7 @@ export default function ClientsPage() { type={f.key === 'contact_email' ? 'email' : 'text'} value={(form as any)[f.key]} onChange={e => handleChange(f.key, e.target.value)} - className={`w-full px-2 py-1.5 bg-[#0a0a0a] border rounded text-xs text-white focus:outline-none focus:border-[#F0A623] ${errors[f.key] ? 'border-red-500/60' : 'border-[#3a322b]'}`} + className={`w-full px-2 py-1.5 bg-[#0a0a0a] border rounded text-xs text-white focus:outline-none focus:border-[#1D4ED8] ${errors[f.key] ? 'border-red-500/60' : 'border-[#DCE6F2]'}`} /> {errors[f.key] &&

    {errors[f.key]}

    }
    @@ -156,26 +156,26 @@ export default function ClientsPage() {
    handleChange('billing_address', e.target.value)} - className="w-full px-2 py-1.5 bg-[#0a0a0a] border border-[#3a322b] rounded text-xs text-white focus:outline-none focus:border-[#F0A623]" /> + className="w-full px-2 py-1.5 bg-[#0a0a0a] border border-[#DCE6F2] rounded text-xs text-white focus:outline-none focus:border-[#1D4ED8]" />