AV: precise recolor to spec — warm dark backgrounds (#1c1815/#231d18/#26201a/#15110e) + gold #F0A623 / orange #D85A30 accents + warm text (#FBEFE0/#C9BBA8/#8a7e6e). 138 component files + 36 token swaps.

This commit is contained in:
2026-06-02 23:46:00 +00:00
parent 01c1abf99d
commit 2876ac6ecd
141 changed files with 2020 additions and 2020 deletions

View File

@@ -159,7 +159,7 @@ export default async function ManufacturerProfile({
};
return (
<div className="min-h-screen bg-[#0d0d0d]">
<div className="min-h-screen bg-[#1c1815]">
<Header />
<script
type="application/ld+json"
@@ -170,8 +170,8 @@ export default async function ManufacturerProfile({
<BackLink />
</nav>
<header className="flex flex-col sm:flex-row gap-6 mb-8 pb-8 border-b border-[#252525]">
<div className="w-24 h-24 rounded-xl bg-[#1a1a1a] flex items-center justify-center overflow-hidden flex-shrink-0">
<header className="flex flex-col sm:flex-row gap-6 mb-8 pb-8 border-b border-[#3a322b]">
<div className="w-24 h-24 rounded-xl bg-[#231d18] flex items-center justify-center overflow-hidden flex-shrink-0">
{company.logo_url ? (
/* eslint-disable-next-line @next/next/no-img-element */
<img
@@ -206,7 +206,7 @@ export default async function ManufacturerProfile({
</span>
)}
{company.phone && (
<a href={`tel:${company.phone.replace(/[^\d+]/g, '')}`} className="text-[#888] hover:text-[#ffb800]">
<a href={`tel:${company.phone.replace(/[^\d+]/g, '')}`} className="text-[#888] hover:text-[#F0A623]">
{company.phone}
</a>
)}
@@ -217,7 +217,7 @@ export default async function ManufacturerProfile({
href={company.company_website}
target="_blank"
rel="noopener noreferrer"
className="text-[#ffb800] hover:underline"
className="text-[#F0A623] hover:underline"
>
Website
</a>
@@ -227,7 +227,7 @@ export default async function ManufacturerProfile({
href={company.press_url}
target="_blank"
rel="noopener noreferrer"
className="text-[#ffb800] hover:underline"
className="text-[#F0A623] hover:underline"
>
Newsroom
</a>
@@ -237,7 +237,7 @@ export default async function ManufacturerProfile({
href={company.contact_url}
target="_blank"
rel="noopener noreferrer"
className="text-[#ffb800] hover:underline"
className="text-[#F0A623] hover:underline"
>
Contact
</a>
@@ -247,7 +247,7 @@ export default async function ManufacturerProfile({
href={company.linkedin_url}
target="_blank"
rel="noopener noreferrer"
className="text-[#888] hover:text-[#ffb800]"
className="text-[#888] hover:text-[#F0A623]"
>
LinkedIn
</a>
@@ -257,7 +257,7 @@ export default async function ManufacturerProfile({
href={`https://twitter.com/${company.twitter_handle}`}
target="_blank"
rel="noopener noreferrer"
className="text-[#888] hover:text-[#ffb800]"
className="text-[#888] hover:text-[#F0A623]"
>
X / Twitter
</a>
@@ -283,17 +283,17 @@ export default async function ManufacturerProfile({
<h2 className="text-lg font-display font-bold text-[#e0e0e0] mb-4">Executive leadership</h2>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
{executives.map((e: any) => (
<div key={e.id} className="bg-[#111] border border-[#252525] rounded-lg p-4 flex gap-3">
<div key={e.id} className="bg-[#111] border border-[#3a322b] rounded-lg p-4 flex gap-3">
{e.photo_url ? (
/* eslint-disable-next-line @next/next/no-img-element */
<img
src={e.photo_url}
alt={e.name}
className="w-16 h-16 rounded-full object-cover bg-[#1a1a1a] flex-shrink-0"
className="w-16 h-16 rounded-full object-cover bg-[#231d18] flex-shrink-0"
loading="lazy"
/>
) : (
<div className="w-16 h-16 rounded-full bg-[#1a1a1a] flex items-center justify-center text-[#666] font-bold flex-shrink-0">
<div className="w-16 h-16 rounded-full bg-[#231d18] flex items-center justify-center text-[#666] font-bold flex-shrink-0">
{(e.name || "?").trim().charAt(0).toUpperCase()}
</div>
)}
@@ -306,7 +306,7 @@ export default async function ManufacturerProfile({
href={e.linkedin_url}
target="_blank"
rel="noopener noreferrer"
className="text-[11px] text-[#ffb800] hover:underline"
className="text-[11px] text-[#F0A623] hover:underline"
>
LinkedIn
</a>
@@ -328,14 +328,14 @@ export default async function ManufacturerProfile({
)}
{company.phone && (
<div className="mt-1">
<a href={`tel:${company.phone.replace(/[^\d+]/g, '')}`} className="text-[#ffb800] hover:underline">
<a href={`tel:${company.phone.replace(/[^\d+]/g, '')}`} className="text-[#F0A623] hover:underline">
{company.phone}
</a>
</div>
)}
{company.contact_email && (
<div>
<a href={`mailto:${company.contact_email}`} className="text-[#ffb800] hover:underline">
<a href={`mailto:${company.contact_email}`} className="text-[#F0A623] hover:underline">
{company.contact_email}
</a>
</div>
@@ -356,7 +356,7 @@ export default async function ManufacturerProfile({
{cleanCategories.map((c: string) => (
<span
key={c}
className="text-xs bg-[#1a1a1a] text-[#aaa] px-2.5 py-1 rounded-full"
className="text-xs bg-[#231d18] text-[#aaa] px-2.5 py-1 rounded-full"
>
{c}
</span>
@@ -382,7 +382,7 @@ export default async function ManufacturerProfile({
return (
<li
key={`${s.show}-${s.show_year}-${s.booth || "?"}`}
className="bg-[#111] border border-[#252525] rounded-md px-4 py-3 flex items-center justify-between gap-4"
className="bg-[#111] border border-[#3a322b] rounded-md px-4 py-3 flex items-center justify-between gap-4"
>
<div className="min-w-0">
<span className="font-semibold text-[#e0e0e0]">{label}</span>
@@ -401,7 +401,7 @@ export default async function ManufacturerProfile({
<section className="mb-10">
<header className="flex items-baseline justify-between mb-3">
<h2 className="text-lg font-display font-bold text-[#e0e0e0]">Recent coverage</h2>
<Link href={`/news?search=${encodeURIComponent(company.company_name)}`} className="text-xs text-[#ffb800] hover:underline">
<Link href={`/news?search=${encodeURIComponent(company.company_name)}`} className="text-xs text-[#F0A623] hover:underline">
All stories
</Link>
</header>
@@ -410,7 +410,7 @@ export default async function ManufacturerProfile({
<Link
key={r.wp_slug}
href={`/news/${r.wp_slug}`}
className="group bg-[#0d0d0d] border border-[#252525] rounded-md p-3 hover:border-[#ffb800] hover:shadow-sm transition-all flex gap-3"
className="group bg-[#1c1815] border border-[#3a322b] rounded-md p-3 hover:border-[#F0A623] hover:shadow-sm transition-all flex gap-3"
>
{/* Image fallback cascade — Ryan rule: never show an empty
gray box on a coverage card. Falls through:
@@ -419,11 +419,11 @@ export default async function ManufacturerProfile({
<img
src={r.featured_image || company.logo_url || '/assets/images/article-placeholder.svg'}
alt=""
className="w-20 h-14 rounded object-cover bg-[#1a1a1a] flex-shrink-0"
className="w-20 h-14 rounded object-cover bg-[#231d18] flex-shrink-0"
loading="lazy"
/>
<div className="min-w-0">
<h3 className="text-xs font-semibold text-[#e0e0e0] leading-snug group-hover:text-[#ffb800] line-clamp-3">
<h3 className="text-xs font-semibold text-[#e0e0e0] leading-snug group-hover:text-[#F0A623] line-clamp-3">
{r.title}
</h3>
{r.wp_published_at && (
@@ -447,7 +447,7 @@ export default async function ManufacturerProfile({
{p.slug ? (
<Link
href={`/news/${p.slug}`}
className="text-[#ffb800] hover:underline"
className="text-[#F0A623] hover:underline"
>
{p.title}
</Link>
@@ -465,7 +465,7 @@ export default async function ManufacturerProfile({
</section>
)}
<footer className="text-xs text-[#666] mt-12 pt-6 border-t border-[#252525]">
<footer className="text-xs text-[#666] mt-12 pt-6 border-t border-[#3a322b]">
Listing maintained by AV Beat editorial.
{company.last_mentioned && (
<> Last mentioned in coverage on {new Date(company.last_mentioned).toISOString().slice(0, 10)}.</>