// Castelverdi — Homepage & Shop const Crest = ({ size = 80 }) => (
{/* Lemon at top */} {/* Leaves */} {/* CV monogram */} CV
); const OrnateRule = () => (
); const Home = ({ go, addToCart }) => { useReveal(); const featured = PRODUCTS.slice(0, 4); const hero = PRODUCTS[0]; return (
{/* HERO */}
{/* Floating lemon */}
Casablanca · Costiera Amalfitana
Fondata MMXXIV

Ceramiche
dipinte
a mano.

Estate MMXXVI — Collezione Limoni

Hand-painted ceramics in the Mediterranean tradition — pitchers, bowls, platters, vases. Every piece drawn freehand in cobalt and lemon, glazed and fired in our atelier. No two alike.

MMXXIV
Established
XLVII
Pieces in rotation
100%
Painted by hand
{/* Hero display panel */}
{/* Scattered decorative lemons & leaves */}
{/* Central hero product */}
{/* Feature card */}
№{hero.id.slice(1)} The featured piece
{hero.name}
Amalfitan form · {hero.edition}
{formatMAD(hero.price)}
🍋 Collezione Limoni 🍋
{/* Marquee */}
Hand-painted ceramics Cast and glazed in Casablanca Italian Mediterranean tradition No two pieces alike Shipped worldwide Hand-painted ceramics Cast and glazed in Casablanca Italian Mediterranean tradition
{/* Featured */}
La Selezione · Estate MMXXVI

A small selection
from the kiln this week.

{featured.map((p, i) => (
go('product', p.id)}>
№{p.id.slice(1)}
{p.name}
{p.cat} · {p.year}
{formatMAD(p.price)}
))}
{/* Heritage split */}
{/* Scattered lemons watermark */}
✦ Heritage

Ogni pezzo,
una storia
dipinta a mano.

Our pieces draw on the hand-painted pottery of the Mediterranean — the cobalt-and-lemon vessels of Amalfi, the flowered platters of Deruta, the simple forms of a Calabrian trattoria.

We draw freehand, we glaze, we fire. No decals, no transfers, no two pieces alike.

{/* Categories */}
✦ Categorie ✦

Browse by form.

{[ { name: 'Caraffe', en: 'Pitchers & jugs', icon: 'pitcher', n: 'I' }, { name: 'Vasi', en: 'Vases', icon: 'vase-tall', n: 'II' }, { name: 'Ciotole', en: 'Bowls', icon: 'bowl', n: 'III' }, { name: 'Piatti', en: 'Plates & platters', icon: 'platter', n: 'IV' }, ].map((c, i) => (
go('shop')} style={{ cursor: 'pointer', border: '2px solid var(--ink)', background: 'var(--bg)', padding: 24, transition: 'all 300ms', position: 'relative' }} onMouseEnter={e => { e.currentTarget.style.boxShadow = '10px 10px 0 var(--lemon)'; e.currentTarget.style.transform = 'translate(-4px, -4px)'; }} onMouseLeave={e => { e.currentTarget.style.boxShadow = 'none'; e.currentTarget.style.transform = 'none'; }}>
{c.n}
{c.name}
{c.en}
))}
{/* Craft teaser */}
✦ Il Savoir-Faire ✦

From clay
to kiln, in
five stages.

Throw, dry, paint, glaze, fire. Three to five weeks per piece.

{/* Newsletter */}
La Corrispondenza

Quiet letters, twice a season.

New pieces, studio notes, and private previews before each firing.

e.preventDefault()} style={{ display: 'flex', gap: 0, maxWidth: 480, margin: '0 auto', border: '2px solid var(--ink)' }}>
); }; const Shop = ({ go }) => { useReveal(); const [cat, setCat] = React.useState('All'); const cats = ['All', ...new Set(PRODUCTS.map(p => p.cat))]; const [sort, setSort] = React.useState('Featured'); let list = cat === 'All' ? PRODUCTS : PRODUCTS.filter(p => p.cat === cat); if (sort === 'Price ↑') list = [...list].sort((a,b) => a.price - b.price); if (sort === 'Price ↓') list = [...list].sort((a,b) => b.price - a.price); return (
La Collezione · {list.length} pieces

The collection,
in full.

Each piece is thrown, painted, glazed and fired by hand. Editions are small and slow — what leaves the kiln is what there is.

{cats.map(c => ( ))}
Sort
{list.map((p, i) => (
go('product', p.id)}>
{(p.edition.includes('15') || p.edition.includes('10')) && (
✦ Rare
)}
№{p.id.slice(1)}
{p.name}
{p.cat} · {p.year}
{formatMAD(p.price)}
))}
); }; Object.assign(window, { Home, Shop, Crest, OrnateRule });