"use client"; /** * 4-image certificate gallery — each tile links to a PDF in a new tab. * * Expected data shape: * export type CertPage = { * src: string; // /images/certifications/page.jpg * alt: string; * title: string; // ISCC Certificate 2025 * page: string; // Page 1 · Annex * document: string; // ISCC Certificate * href: string; // /documents/certifications/iscc.pdf OR upstream URL * }; * export const certificatePages: CertPage[] = [ ... ]; */ import Image from "next/image"; import { ArrowUpRight, FileText } from "lucide-react"; import { motion, type Variants } from "framer-motion"; export type CertPage = { src: string; alt: string; title: string; page: string; document: string; href: string; }; const grid: Variants = { hidden: {}, visible: { transition: { staggerChildren: 0.08, delayChildren: 0.15 } }, }; const cell: Variants = { hidden: { opacity: 0, y: 24, filter: "blur(6px)" }, visible: { opacity: 1, y: 0, filter: "blur(0px)", transition: { duration: 0.8, ease: [0.16, 1, 0.3, 1] }, }, }; export function CertificateGallery({ pages }: { pages: CertPage[] }) { return ( {pages.map((p) => ( ))} ); } function CertCard({ src, alt, title, page, document, href }: CertPage) { return (
{alt}
{page}
{document}

{title}

Open PDF
); }