--- /** * /store/deck-boxes — 3D-printed deck boxes & counters product line * --------------------------------------------------------------------------- * Order: back-link + title → live slot tracker → image carousel → specs → * pricing → key requirements → CTA. * * The carousel images + labels are managed server-side in store-products.ts * (deckBoxProduct.images). The specs block is image-free now; examples live in * the carousel only. */ import StoreLayout from "@layouts/StoreLayout.astro"; import Reveal from "@components/motion/Reveal.astro"; import SectionHeader from "@components/layout/SectionHeader.astro"; import Icon from "@components/Icon.astro"; import Carousel from "@components/store/Carousel.tsx"; import ProductCard from "@components/store/ProductCard.astro"; import PricingTable from "@components/store/PricingTable.astro"; import SlotMeter from "@components/store/SlotMeter.astro"; import ColorGrid from "@components/store/ColorGrid.astro"; import RequirementList from "@components/store/RequirementList.astro"; import { deckBoxProduct, requirements } from "@data/store-products"; import { storeAvailability } from "@data/store-availability"; const av = storeAvailability; const slot = av.slots[deckBoxProduct.slotKey]; const keyReqs = requirements.filter( (r) => r.title.toLowerCase().includes("final") || r.title.toLowerCase().includes("capacity") || r.title.toLowerCase().includes("affiliation"), ); ---
{/* Header */}
Back to store
{/* Live slot tracker for this product line (top of content). */}
{/* Image carousel (server-driven, swipeable). */}
{/* Specifications (no image — examples live in the carousel). */}
{/* Pricing */}
{/* Available print colors (filament). Managed in store-products.ts. */}
{/* Key requirements */}
{/* CTA */}