fix(article-detail): sidebar column width + placeholder using new mark
Two pointed bugs on the article detail page: 1) Width alignment. The right-rail Related Articles and Related Forum Posts boxes were free-stretching to the lg:col-span-4 width while the SidebarAdStack below them rendered ads at their natural 300px (items- end, right-aligned). The visual result: boxes overhung the ad column on both edges. Wrapped each sidebar in an inner `w-full lg:w-[300px] lg:ml-auto` div so every block (ads + boxes + newsletter) shares one 300px column on lg+ and stays full-width on mobile. Applied to both article templates (/articles/[slug] and /news/[slug]). 2) Placeholder rendered the old "AV BEAT" wordmark when an article had no featured image. Rebuilt article-placeholder.svg around the new brand mark — the A-monogram tile with the blue gradient (#2563EB→#1E3A8A) that matches AnimatedLogo + the rest of the brand-gradient system. Same 1200×630 dimensions so OG/feed embeds aren't affected. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,20 +1,42 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" preserveAspectRatio="xMidYMid slice">
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" preserveAspectRatio="xMidYMid slice">
|
||||||
<defs>
|
<defs>
|
||||||
<linearGradient id="g" x1="0" y1="0" x2="0" y2="1">
|
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
|
||||||
<stop offset="0%" stop-color="#0F172A"/>
|
<stop offset="0%" stop-color="#0F172A"/>
|
||||||
<stop offset="50%" stop-color="#1E3A8A"/>
|
<stop offset="50%" stop-color="#1E3A8A"/>
|
||||||
<stop offset="100%" stop-color="#0F172A"/>
|
<stop offset="100%" stop-color="#0F172A"/>
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<radialGradient id="r" cx="50%" cy="50%" r="60%">
|
<radialGradient id="glow" cx="50%" cy="50%" r="60%">
|
||||||
<stop offset="0%" stop-color="#1D4ED8" stop-opacity="0.18"/>
|
<stop offset="0%" stop-color="#1D4ED8" stop-opacity="0.18"/>
|
||||||
<stop offset="100%" stop-color="#1D4ED8" stop-opacity="0"/>
|
<stop offset="100%" stop-color="#1D4ED8" stop-opacity="0"/>
|
||||||
</radialGradient>
|
</radialGradient>
|
||||||
|
<linearGradient id="tile" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop offset="0%" stop-color="#2563EB"/>
|
||||||
|
<stop offset="100%" stop-color="#1E3A8A"/>
|
||||||
|
</linearGradient>
|
||||||
</defs>
|
</defs>
|
||||||
<rect width="1200" height="630" fill="url(#g)"/>
|
|
||||||
<rect width="1200" height="630" fill="url(#r)"/>
|
<!-- Background gradient -->
|
||||||
<g transform="translate(600 315)" text-anchor="middle" font-family="system-ui, sans-serif">
|
<rect width="1200" height="630" fill="url(#bg)"/>
|
||||||
<text y="0" font-size="64" font-weight="800" fill="#FFFFFF" letter-spacing="0.04em">AV</text>
|
<rect width="1200" height="630" fill="url(#glow)"/>
|
||||||
<text y="64" font-size="64" font-weight="800" fill="#38BDF8" letter-spacing="0.04em">BEAT</text>
|
|
||||||
<text y="120" font-size="16" font-weight="500" fill="#94A3B8" letter-spacing="0.25em">PRO AV · DISPLAY · LIVE PRODUCTION</text>
|
<!-- Brand-mark tile + A monogram, centered. Same geometry as AnimatedLogo. -->
|
||||||
|
<g transform="translate(420 175)">
|
||||||
|
<!-- Rounded tile (280x280, rx 62) with the brand gradient -->
|
||||||
|
<rect x="0" y="0" width="280" height="280" rx="62" ry="62" fill="url(#tile)"/>
|
||||||
|
<!-- Faint inner ring so the tile reads on dark bg -->
|
||||||
|
<rect x="3" y="3" width="274" height="274" rx="59" ry="59" fill="none" stroke="rgba(255,255,255,0.20)" stroke-width="3"/>
|
||||||
|
<!-- A — two strokes: left+right legs and crossbar. Same path as AnimatedLogo at 4.4x scale. -->
|
||||||
|
<path d="M 62 220 L 140 60 L 218 220"
|
||||||
|
fill="none" stroke="#FFFFFF" stroke-width="22"
|
||||||
|
stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M 92 158 L 188 158"
|
||||||
|
fill="none" stroke="#FFFFFF" stroke-width="18"
|
||||||
|
stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Wordmark + tagline -->
|
||||||
|
<g transform="translate(600 525)" text-anchor="middle" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif">
|
||||||
|
<text y="0" font-size="56" font-weight="700" fill="#FFFFFF" letter-spacing="-0.012em">AV BEAT</text>
|
||||||
|
<text y="34" font-size="14" font-weight="500" fill="#CBD5E1" letter-spacing="0.22em">INSIDE THE FUTURE OF PRO AV</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.1 KiB |
@@ -393,8 +393,11 @@ export default function ArticleDetailClient({ article, relatedArticles, relatedF
|
|||||||
<ArticleComments articleSlug={article.slug} />
|
<ArticleComments articleSlug={article.slug} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Sidebar */}
|
{/* Sidebar — every right-rail block (ads, Related Articles, Related
|
||||||
<aside className="lg:col-span-4 space-y-6">
|
Forum Posts) shares the same 300px column width on lg+ so left +
|
||||||
|
right edges align cleanly with the ad inventory below. */}
|
||||||
|
<aside className="lg:col-span-4">
|
||||||
|
<div className="space-y-6 w-full lg:w-[300px] lg:ml-auto">
|
||||||
{/* Related Articles */}
|
{/* Related Articles */}
|
||||||
{/* DO NOT OVERRIDE — related articles sidebar */}
|
{/* DO NOT OVERRIDE — related articles sidebar */}
|
||||||
<div className="bg-[#111] border border-[#222] p-5">
|
<div className="bg-[#111] border border-[#222] p-5">
|
||||||
@@ -470,6 +473,7 @@ export default function ArticleDetailClient({ article, relatedArticles, relatedF
|
|||||||
|
|
||||||
{/* Sidebar ad stack — 300x600 + 300x250 rotating */}
|
{/* Sidebar ad stack — 300x600 + 300x250 rotating */}
|
||||||
<SidebarAdStack />
|
<SidebarAdStack />
|
||||||
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
|
|||||||
@@ -528,8 +528,13 @@ export default function NewsArticleDetailClient({
|
|||||||
<ArticleComments articleSlug={article.slug} />
|
<ArticleComments articleSlug={article.slug} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Sidebar */}
|
{/* Sidebar — every right-rail block (ads, Related Articles, Related
|
||||||
<aside className="lg:col-span-4 space-y-6">
|
Forum Posts, Newsletter) shares the same 300px column width so
|
||||||
|
their left + right edges align cleanly. Ads are 300×600 / 300×250
|
||||||
|
by definition; the boxes below now collapse to 300px on lg+ to
|
||||||
|
match. On mobile the wrapper is full-width. */}
|
||||||
|
<aside className="lg:col-span-4">
|
||||||
|
<div className="space-y-6 w-full lg:w-[300px] lg:ml-auto">
|
||||||
{/* Blackmagic 300x600 fixed at top + every 300x250 banner stacked */}
|
{/* Blackmagic 300x600 fixed at top + every 300x250 banner stacked */}
|
||||||
<SidebarAdStack />
|
<SidebarAdStack />
|
||||||
|
|
||||||
@@ -619,6 +624,7 @@ export default function NewsArticleDetailClient({
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Ad placeholder */}
|
{/* Ad placeholder */}
|
||||||
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
|
|||||||
Reference in New Issue
Block a user