diff --git a/src/app/globals.css b/src/app/globals.css
index 2d9bcee..7acdc2f 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1383,3 +1383,23 @@ select:-webkit-autofill:focus {
-webkit-backdrop-filter: blur(16px);
border-top: 1px solid rgba(0, 0, 0, 0.05);
}
+
+/* ── Tuxedo storefront: Harvest editorial ambient drift ───────────────
+ * Slow Ken Burns on the harvest packshot. Reads as ambient — the photo
+ * is breathing, not animating. Honors prefers-reduced-motion below. */
+@keyframes harvest-drift {
+ 0% { transform: scale(1.04) translate(0, 0); }
+ 50% { transform: scale(1.07) translate(-0.5%, -0.3%); }
+ 100% { transform: scale(1.10) translate(-1%, -0.6%); }
+}
+.animate-harvest-drift {
+ animation: harvest-drift 30s ease-in-out infinite alternate;
+ will-change: transform;
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .animate-harvest-drift {
+ animation: none !important;
+ transform: none !important;
+ }
+}
diff --git a/src/app/tuxedo/page.tsx b/src/app/tuxedo/page.tsx
index 5c64277..72ec700 100644
--- a/src/app/tuxedo/page.tsx
+++ b/src/app/tuxedo/page.tsx
@@ -152,6 +152,11 @@ const WP_IMAGES = {
/** Single yellow ear with silk and dark green bokeh — the product
* moment in the editorial "Why" replacement. */
earMacro: "https://s3.crispygoat.com/videos/wp-import/images/tuxedo-ear-macro.jpg",
+ /** Packing-shed packshot — dozens of husked cobs piled on the table
+ * the morning of pick. Documentary, not styled; reads like a
+ * magazine harvest spread rather than a styled product photo. Used
+ * as the full-bleed anchor of the "Harvest, by the numbers" section. */
+ piledCobs: "https://s3.crispygoat.com/videos/wp-import/images/corn-field-zane-original.jpg",
} as const;
function reducer(state: State, action: Action): State {
@@ -398,6 +403,172 @@ function FounderStrip() {
);
}
+// ── Harvest editorial — magazine "by the numbers" spread ─────────
+//
+// One packshot + one data strip. The strip is the brand voice — it
+// treats the farm's actual numbers (years, generations, altitude, hands)
+// as magazine sidebar content, not as a feature-card grid. Hairline
+// rules, large tabular numerals, and a single editorial caption beneath.
+// No icons, no boxes, no color highlights. Reads as Cereal magazine
+// did a feature on this farm, not as a farm-stand template.
+function HarvestEditorial() {
+ return (
+
+ Harvest · 2026
+
+ Forty summers of the same seed, the same soil, and the same
+ row. The diurnal swing that loads the kernel with sugar is
+ a property of this valley — not a recipe we can take with us.
+
+ “You can’t replicate the diurnal swing in a
+ greenhouse. You can’t replicate it on a flat field.
+ You can’t replicate it in a hurry.”
+
+ — John Harold, second generation
+
+ The shape of an
+
+ Olathe summer.
+
+
+
+ {/* Editor's caption — italic display serif, the editorial
+ footnote that makes the section feel like a feature story. */}
+
+ {prefix ? ( + {prefix} + ) : null} + + 0 + + {suffix ? ( + {suffix} + ) : null} +
++ {label} +
++ {detail} +
+{eyebrow}
)} - + {/* Altitude ribbon — runs alongside the existing eyebrow with a + hairline divider, like a magazine masthead. Reinforces the + geographic / altitude voice of the brand. */} + ++ 5,360 ft · Uncompahgre Valley +