"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 (
{document}
{title}
Open PDF
);
}