Add testimonial item type with crossfade carousel layout

New `type: "testimonial"` with structured attribution
(quote/name/role/org/url/image/date) plus a `layout: "testimonials"`
section behavior that renders the items as a tasteful crossfade
carousel — one quote at a time, 7s auto-advance, prev/next nav, dot
indicators, swipe support, ←/→ keys, pause on hover/focus, ARIA
live region.

Reduced-motion users automatically get .carousel--stacked: every
testimonial visible at once, controls hidden, no auto-advance. A
single-item section also skips the carousel chrome.

Per-template treatment: editorial uses Fraunces italic for the curly
quote mark and the body, swiss strips uppercase from titles per prior
fix, cosmos glows the mark with the cyan/violet accent stack.

Section auto-detects the layout when the first item is a testimonial,
matching how the clients layout already works.
This commit is contained in:
Joel Brock
2026-05-15 17:12:13 -07:00
parent 1346f7a40c
commit e1b3bc7d43
6 changed files with 393 additions and 14 deletions

View File

@@ -90,6 +90,29 @@
{ "type": "link", "title": "An essay title goes here", "url": "#", "description": "Essay · 8 min read" },
{ "type": "link", "title": "Another piece of writing", "url": "#", "description": "Field notes" }
]
},
{
"id": "praise",
"label": "Testimonials",
"kicker": "What people say",
"layout": "testimonials",
"items": [
{
"type": "testimonial",
"quote": "Ada's notes on the Engine are the most penetrating remarks anyone has yet made on the subject of mechanical computation.",
"name": "Charles Babbage",
"role": "Mathematician",
"org": "Royal Society",
"date": "1843"
},
{
"type": "testimonial",
"quote": "She has thrown her thoughts into the form of a mathematical poem — an analytical instrument set in motion by the human mind.",
"name": "Michael Faraday",
"role": "Natural Philosopher",
"url": "https://example.com/faraday"
}
]
}
],
"social": [