mirror of
https://github.com/apophenia-news/apophenia.news.git
synced 2026-08-28 14:55:42 +00:00
Feat: add Pattern Seeker merch CTA block
Co-authored-by: Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@ import { SITE_URL } from "./constants.mjs";
|
|||||||
import { escapeHtml } from "./utils.mjs";
|
import { escapeHtml } from "./utils.mjs";
|
||||||
|
|
||||||
const STORE_URL = "https://store.apophenia.news";
|
const STORE_URL = "https://store.apophenia.news";
|
||||||
|
const PRODUCT_URL = `${STORE_URL}/products/pattern-seeker`;
|
||||||
|
|
||||||
const logo = `
|
const logo = `
|
||||||
<svg class="h-10 w-10 brand-glow" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Apophenia News logo">
|
<svg class="h-10 w-10 brand-glow" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Apophenia News logo">
|
||||||
@@ -36,6 +37,41 @@ const navLinks = (cls = "") =>
|
|||||||
)
|
)
|
||||||
.join("\n ");
|
.join("\n ");
|
||||||
|
|
||||||
|
const merchShots = [
|
||||||
|
{ src: "/merch/apophenia_hoodie_front.avif", alt: "Pattern Seeker zip hoodie — chest mark", origin: "61%_29%", zoom: "2.4" },
|
||||||
|
{ src: "/merch/apophenia_hoodie_back.webp", alt: "Pattern Seeker zip hoodie — constellation back print", origin: "50%_38%", zoom: "2.1" }
|
||||||
|
];
|
||||||
|
|
||||||
|
export const merch = `
|
||||||
|
<section class="mt-10 card overflow-hidden bg-gradient-to-b from-white to-indigo-50/60">
|
||||||
|
<div class="p-6 sm:p-8 grid sm:grid-cols-[1fr,340px] gap-8 items-center">
|
||||||
|
<div>
|
||||||
|
<p class="tag mb-3"><i data-lucide="shopping-bag" class="h-3.5 w-3.5"></i>Merch</p>
|
||||||
|
<h2 class="text-2xl sm:text-3xl font-bold leading-tight">Wear the pattern</h2>
|
||||||
|
<p class="mt-3 text-zinc-700 max-w-md">
|
||||||
|
The <strong>Pattern Seeker</strong> heavy-blend zip hoodie — constellation print across the back, quiet mark on the chest.
|
||||||
|
</p>
|
||||||
|
<a href="${PRODUCT_URL}" target="_blank" rel="noopener"
|
||||||
|
class="mt-5 inline-flex items-center gap-2 rounded-xl bg-accent px-5 py-3 text-sm font-medium text-white transition hover:bg-indigo-700">
|
||||||
|
Shop the hoodie <i data-lucide="arrow-up-right" class="h-4 w-4"></i>
|
||||||
|
</a>
|
||||||
|
<p class="mt-3 text-xs text-zinc-500 hidden sm:block">Hover a shot to zoom the print.</p>
|
||||||
|
</div>
|
||||||
|
<div class="grid grid-cols-2 gap-3">
|
||||||
|
${merchShots
|
||||||
|
.map(
|
||||||
|
(m) => `<a href="${PRODUCT_URL}" target="_blank" rel="noopener" aria-label="${escapeHtml(m.alt)}"
|
||||||
|
class="block overflow-hidden rounded-xl bg-white/40">
|
||||||
|
<img src="${m.src}" alt="${escapeHtml(m.alt)}" loading="lazy" decoding="async"
|
||||||
|
class="w-full origin-[${m.origin}] transition-transform duration-500 ease-out hover:scale-[${m.zoom}]" />
|
||||||
|
</a>`
|
||||||
|
)
|
||||||
|
.join("\n ")}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
`;
|
||||||
|
|
||||||
export const shellHead = ({ title, desc, image, url, type = "website" }) => `<!doctype html>
|
export const shellHead = ({ title, desc, image, url, type = "website" }) => `<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
|
|||||||
Reference in New Issue
Block a user