diff --git a/assets/base.css b/assets/base.css
index c8c0d4cbde1..499690842d5 100644
--- a/assets/base.css
+++ b/assets/base.css
@@ -3595,3 +3595,186 @@ details-disclosure > details {
transform: translateX(100%) scaleX(0);
}
}
+
+/* ============================================================
+ GK MOLTEN BUTTONS - site-wide premium restyle (v2)
+ Root cause of v1 defects: Dawn draws the button border via
+ .button::after, its hover shadow via .button::before, and the
+ label color via the --color-button-text variable. v2 explicitly
+ neutralizes those pseudo-elements and forces the dark label,
+ then repurposes ::before as the shimmer sheen so it does not
+ fight Dawn. Tertiary (icon/link/close) buttons are left alone.
+ All Dawn classes, data-attrs, ARIA and checkout JS are untouched.
+ ============================================================ */
+
+/* -- DEFECT 2: kill Dawn's ::after border ring on skinned buttons -- */
+.button:not(.button--tertiary)::after,
+.shopify-challenge__button::after,
+.customer button:not(.button--tertiary)::after,
+button.shopify-payment-button__button--unbranded::after {
+ content: none !important;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+/* -- DEFECT 3 + shimmer: reset Dawn's ::before shadow, repurpose as sheen -- */
+.button:not(.button--tertiary)::before,
+.shopify-challenge__button::before,
+.customer button:not(.button--tertiary)::before,
+button.shopify-payment-button__button--unbranded::before {
+ content: '' !important;
+ box-shadow: none !important;
+ top: 0 !important;
+ right: auto !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ width: 32% !important;
+ height: 100% !important;
+ z-index: 0 !important;
+ border-radius: 0 !important;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.55), transparent) !important;
+ transform: translateX(-150%) skewX(-20deg);
+ opacity: 0;
+ pointer-events: none !important;
+}
+
+/* -- Shared: positioning + clip so the sheen stays inside the button -- */
+.button:not(.button--tertiary),
+.shopify-challenge__button,
+.customer button:not(.button--tertiary),
+button.shopify-payment-button__button--unbranded {
+ position: relative;
+ overflow: hidden;
+ border: none !important;
+ border-radius: 10px;
+ padding: 15px 32px;
+ font-weight: 800;
+ letter-spacing: 2.5px;
+ text-transform: uppercase;
+ transition: transform 0.15s ease, filter 0.25s ease;
+}
+
+/* keep any wrapped label above the sheen layer */
+.button:not(.button--tertiary) > *,
+.shopify-challenge__button > *,
+.customer button:not(.button--tertiary) > *,
+button.shopify-payment-button__button--unbranded > * {
+ position: relative;
+ z-index: 1;
+}
+
+/* -- PRIMARY - molten orange body + DEFECT 1 dark label -- */
+.button:not(.button--tertiary):not(.button--secondary),
+.shopify-challenge__button,
+.customer button:not(.button--tertiary):not(.button--secondary),
+button.shopify-payment-button__button--unbranded {
+ color: #1f0f02 !important;
+ background: linear-gradient(180deg, #ffc879 0%, #e8893a 50%, #c8601a 100%) !important;
+ box-shadow:
+ 0 1px 0 rgba(255, 240, 220, 0.7) inset,
+ 0 -4px 10px rgba(120, 48, 0, 0.55) inset,
+ 0 0 0 1px rgba(255, 180, 110, 0.35),
+ 0 12px 28px -8px rgba(232, 137, 58, 0.55),
+ 0 3px 6px rgba(0, 0, 0, 0.6) !important;
+}
+
+/* force dark label on any inner span / label node (DEFECT 1) */
+.button:not(.button--tertiary):not(.button--secondary) span,
+.button:not(.button--tertiary):not(.button--secondary) .button-label,
+.shopify-challenge__button span,
+.customer button:not(.button--tertiary):not(.button--secondary) span,
+button.shopify-payment-button__button--unbranded span {
+ color: #1f0f02 !important;
+}
+
+/* -- Hover / active / focus (primary + payment) -- */
+.button:not(.button--tertiary):not(.button--secondary):hover,
+.shopify-challenge__button:hover,
+.customer button:not(.button--tertiary):not(.button--secondary):hover,
+button.shopify-payment-button__button--unbranded:hover {
+ transform: translateY(-2px);
+ filter: brightness(1.05);
+}
+
+.button:not(.button--tertiary):active,
+.shopify-challenge__button:active,
+.customer button:not(.button--tertiary):active,
+button.shopify-payment-button__button--unbranded:active {
+ transform: translateY(1px);
+ filter: brightness(0.97);
+}
+
+.button:not(.button--tertiary):focus-visible,
+.shopify-challenge__button:focus-visible,
+.customer button:not(.button--tertiary):focus-visible,
+button.shopify-payment-button__button--unbranded:focus-visible {
+ outline: 2px solid #f0a060 !important;
+ outline-offset: 3px;
+}
+
+/* trigger the sheen sweep on hover */
+.button:not(.button--tertiary):hover::before,
+.shopify-challenge__button:hover::before,
+.customer button:not(.button--tertiary):hover::before,
+button.shopify-payment-button__button--unbranded:hover::before {
+ opacity: 1;
+ animation: gkShimmer 1.15s ease-out;
+}
+
+/* -- SECONDARY - dark glass, white label -- */
+.button--secondary {
+ color: #fff !important;
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.02)) !important;
+ border: 1px solid rgba(200, 96, 26, 0.5) !important;
+ box-shadow:
+ 0 1px 0 rgba(255, 255, 255, 0.12) inset,
+ 0 8px 20px -8px rgba(0, 0, 0, 0.8) !important;
+ filter: none;
+}
+
+.button--secondary span,
+.button--secondary .button-label {
+ color: #fff !important;
+}
+
+.button--secondary:hover {
+ border-color: #C8601A !important;
+ background: linear-gradient(180deg, rgba(200, 96, 26, 0.18), rgba(200, 96, 26, 0.04)) !important;
+ transform: translateY(-2px);
+ filter: none;
+}
+
+/* -- Disabled - keep Dawn opacity, kill motion -- */
+.button:disabled,
+.button[aria-disabled='true'],
+.button.disabled,
+.customer button:disabled,
+.customer button[aria-disabled='true'],
+button.shopify-payment-button__button--unbranded:disabled {
+ transform: none !important;
+ filter: none !important;
+}
+
+/* -- Shimmer keyframe -- */
+@keyframes gkShimmer {
+ 0% { transform: translateX(-150%) skewX(-20deg); }
+ 55%, 100% { transform: translateX(280%) skewX(-20deg); }
+}
+
+/* -- Reduced motion -- */
+@media (prefers-reduced-motion: reduce) {
+ .button:not(.button--tertiary)::before,
+ .shopify-challenge__button::before,
+ .customer button:not(.button--tertiary)::before,
+ button.shopify-payment-button__button--unbranded::before {
+ display: none !important;
+ }
+ .button:not(.button--tertiary):hover,
+ .button--secondary:hover,
+ .shopify-challenge__button:hover,
+ .customer button:not(.button--tertiary):hover,
+ button.shopify-payment-button__button--unbranded:hover {
+ transform: none;
+ }
+}
+/* -- End GK Molten Buttons v2 -- */
diff --git a/assets/custom-greg-koch.css b/assets/custom-greg-koch.css
new file mode 100644
index 00000000000..149a640f66b
--- /dev/null
+++ b/assets/custom-greg-koch.css
@@ -0,0 +1,469 @@
+/* ============================================
+ GREG KOCH - CUSTOM DESIGN SYSTEM
+ ============================================
+ Colors:
+ Background: #0D0D0D
+ Cards/surfaces: #141414
+ Borders: #272727
+ Primary accent: #E8690A (orange)
+ Body text: #E8E8E8
+ Muted text: #777777
+ Fonts:
+ Headlines: Bebas Neue
+ Body: DM Sans
+ Labels/eyebrow: DM Mono
+ ============================================ */
+
+/* --- CSS Custom Properties --- */
+:root {
+ --gk-bg: #0D0D0D;
+ --gk-card: #141414;
+ --gk-border: #272727;
+ --gk-accent: #E8690A;
+ --gk-text: #E8E8E8;
+ --gk-muted: #777777;
+ --gk-white: #FFFFFF;
+ --gk-font-heading: 'Bebas Neue', sans-serif;
+ --gk-font-body: 'DM Sans', sans-serif;
+ --gk-font-label: 'DM Mono', monospace;
+}
+
+/* --- Global Font Overrides --- */
+body,
+.shopify-section,
+input,
+textarea,
+select {
+ font-family: var(--gk-font-body) !important;
+ color: var(--gk-text);
+}
+
+h1, h2, h3, h4, h5, h6,
+.h0, .h1, .h2, .h3, .h4, .h5,
+.hN,
+[class*="heading"],
+.banner__heading,
+.title,
+.featured-collection__title,
+.rich-text__heading {
+ font-family: var(--gk-font-heading) !important;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ color: var(--gk-text);
+}
+
+/* Eyebrow / Label text */
+.gk-eyebrow,
+.gk-label,
+.caption,
+.caption-with-letter-spacing {
+ font-family: var(--gk-font-label) !important;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.75rem;
+ color: var(--gk-accent);
+}
+
+/* --- Background Overrides --- */
+body,
+body.gradient {
+ background-color: var(--gk-bg) !important;
+ color: var(--gk-text) !important;
+}
+
+/* Override Dawn color scheme backgrounds */
+.color-scheme-1,
+.color-scheme--scheme-1,
+[class*="color-scheme-1"] {
+ background-color: var(--gk-bg) !important;
+ color: var(--gk-text) !important;
+}
+
+/* --- Button Overrides --- */
+.button,
+.shopify-challenge__button,
+.customer button,
+button.button,
+a.button,
+.btn,
+.shopify-payment-button .shopify-payment-button__button--unbranded {
+ font-family: var(--gk-font-body) !important;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ border-radius: 0 !important;
+ font-weight: 500;
+ font-size: 0.85rem;
+ padding: 12px 32px;
+ transition: all 0.3s ease;
+ cursor: pointer;
+}
+
+/* Primary Button */
+.button--primary,
+.button:not(.button--secondary):not(.button--tertiary),
+.shopify-payment-button .shopify-payment-button__button--unbranded {
+ background-color: var(--gk-accent) !important;
+ color: var(--gk-white) !important;
+ border: 2px solid var(--gk-accent) !important;
+}
+
+.button--primary:hover,
+.button:not(.button--secondary):not(.button--tertiary):hover,
+.shopify-payment-button .shopify-payment-button__button--unbranded:hover {
+ background-color: transparent !important;
+ color: var(--gk-accent) !important;
+ border-color: var(--gk-accent) !important;
+}
+
+/* Secondary Button */
+.button--secondary {
+ background-color: transparent !important;
+ color: var(--gk-accent) !important;
+ border: 2px solid var(--gk-accent) !important;
+}
+
+.button--secondary:hover {
+ background-color: var(--gk-accent) !important;
+ color: var(--gk-white) !important;
+}
+
+/* Tertiary / Text Button */
+.button--tertiary {
+ color: var(--gk-accent) !important;
+ text-decoration-color: var(--gk-accent) !important;
+ padding: 0;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ font-family: var(--gk-font-body) !important;
+}
+
+/* Remove Dawn's default button border-radius */
+.button,
+.button::after,
+.button::before {
+ border-radius: 0 !important;
+}
+
+/* --- Card Styles --- */
+.card,
+.card-wrapper,
+.product-card-wrapper .card,
+.card--card,
+.card--standard {
+ background-color: var(--gk-card) !important;
+ border: 1px solid var(--gk-border) !important;
+ border-radius: 0 !important;
+}
+
+.card__content,
+.card__information {
+ color: var(--gk-text);
+}
+
+.card__heading,
+.card__heading a {
+ color: var(--gk-text) !important;
+ font-family: var(--gk-font-heading) !important;
+}
+
+/* Product prices in Bebas Neue orange */
+.price-item,
+.price-item--regular,
+.price-item--sale,
+.price .money,
+.card .price {
+ font-family: var(--gk-font-heading) !important;
+ color: var(--gk-accent) !important;
+ font-size: 1.2rem;
+}
+
+/* --- Header Styles --- */
+.section-header,
+.header-wrapper,
+.header {
+ background-color: var(--gk-bg) !important;
+ border-bottom: 1px solid var(--gk-border) !important;
+}
+
+.header__heading-link,
+.header__heading a {
+ color: var(--gk-text) !important;
+}
+
+/* Navigation links */
+.header__menu-item,
+.header__menu-item span,
+.list-menu__item--link,
+.header__active-menu-item {
+ font-family: var(--gk-font-body) !important;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.8rem;
+ font-weight: 500;
+ color: var(--gk-text) !important;
+ transition: color 0.3s ease;
+}
+
+.header__menu-item:hover,
+.header__menu-item:hover span,
+.list-menu__item--link:hover {
+ color: var(--gk-accent) !important;
+}
+
+/* Header icons */
+.header__icon,
+.header__icon svg,
+.header__icon path {
+ color: var(--gk-text) !important;
+}
+
+.header__icon:hover {
+ color: var(--gk-accent) !important;
+}
+
+/* Mobile menu drawer */
+.menu-drawer,
+.menu-drawer__inner-container {
+ background-color: var(--gk-bg) !important;
+ color: var(--gk-text) !important;
+}
+
+.menu-drawer__menu-item,
+.menu-drawer__menu-item span {
+ color: var(--gk-text) !important;
+ font-family: var(--gk-font-body) !important;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+}
+
+/* --- Footer Styles --- */
+.footer,
+.section-footer,
+.footer-block {
+ background-color: var(--gk-bg) !important;
+ border-top: 1px solid var(--gk-border) !important;
+ color: var(--gk-text) !important;
+}
+
+.footer-block__heading,
+.footer__content-top {
+ color: var(--gk-text) !important;
+ font-family: var(--gk-font-heading) !important;
+}
+
+.footer a,
+.footer-block a {
+ color: var(--gk-muted) !important;
+ transition: color 0.3s ease;
+}
+
+.footer a:hover,
+.footer-block a:hover {
+ color: var(--gk-accent) !important;
+}
+
+/* Footer newsletter input */
+.footer .newsletter-form__field-wrapper input,
+.footer .field__input {
+ background-color: var(--gk-card) !important;
+ border: 1px solid var(--gk-border) !important;
+ color: var(--gk-text) !important;
+ border-radius: 0 !important;
+}
+
+.footer .newsletter-form__button,
+.footer .field__button {
+ background-color: var(--gk-accent) !important;
+ color: var(--gk-white) !important;
+ border-radius: 0 !important;
+}
+
+/* --- Announcement Bar --- */
+.announcement-bar {
+ background-color: var(--gk-accent) !important;
+ color: var(--gk-white) !important;
+}
+
+.announcement-bar__message,
+.announcement-bar__link {
+ color: var(--gk-white) !important;
+ font-family: var(--gk-font-label) !important;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ font-size: 0.75rem;
+}
+
+/* --- Form Inputs --- */
+input[type="text"],
+input[type="email"],
+input[type="tel"],
+input[type="password"],
+input[type="number"],
+input[type="search"],
+textarea,
+select,
+.field__input {
+ background-color: var(--gk-card) !important;
+ border: 1px solid var(--gk-border) !important;
+ color: var(--gk-text) !important;
+ border-radius: 0 !important;
+ font-family: var(--gk-font-body) !important;
+}
+
+input::placeholder,
+textarea::placeholder,
+.field__input::placeholder {
+ color: var(--gk-muted) !important;
+}
+
+.field__label {
+ color: var(--gk-muted) !important;
+}
+
+/* --- Image Banner / Hero Overrides --- */
+.banner {
+ background-color: var(--gk-bg);
+}
+
+.banner__heading {
+ font-family: var(--gk-font-heading) !important;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+}
+
+.banner__text {
+ color: var(--gk-text);
+}
+
+/* --- Collection / Product Grid --- */
+.collection {
+ background-color: var(--gk-bg);
+}
+
+.collection__title {
+ font-family: var(--gk-font-heading) !important;
+ color: var(--gk-text) !important;
+}
+
+/* --- Rich Text Sections --- */
+.rich-text-wrapper,
+.rich-text {
+ background-color: var(--gk-bg);
+ color: var(--gk-text);
+}
+
+/* --- Muted Text --- */
+.gk-muted,
+.subtitle,
+.rte p,
+small {
+ color: var(--gk-muted);
+}
+
+/* --- Link Styles --- */
+a {
+ color: var(--gk-accent);
+ transition: color 0.3s ease;
+}
+
+a:hover {
+ color: var(--gk-text);
+}
+
+/* --- Scrollbar --- */
+::-webkit-scrollbar {
+ width: 6px;
+}
+
+::-webkit-scrollbar-track {
+ background: var(--gk-bg);
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--gk-border);
+ border-radius: 0;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: var(--gk-accent);
+}
+
+/* --- Cart Drawer --- */
+.cart-drawer,
+.drawer {
+ background-color: var(--gk-bg) !important;
+ color: var(--gk-text) !important;
+ border-left: 1px solid var(--gk-border) !important;
+}
+
+/* --- Predictive Search --- */
+.predictive-search,
+.predictive-search__results-groups-wrapper {
+ background-color: var(--gk-card) !important;
+ border: 1px solid var(--gk-border) !important;
+ color: var(--gk-text) !important;
+}
+
+/* --- Badge Overrides --- */
+.badge {
+ background-color: var(--gk-accent) !important;
+ color: var(--gk-white) !important;
+ border-radius: 0 !important;
+ font-family: var(--gk-font-label) !important;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+}
+
+/* --- Selection / Highlight --- */
+::selection {
+ background-color: var(--gk-accent);
+ color: var(--gk-white);
+}
+
+/* --- Global Section Spacing --- */
+.section-padding {
+ padding-top: 48px;
+ padding-bottom: 48px;
+}
+
+/* --- Responsive --- */
+@media screen and (max-width: 749px) {
+ .button,
+ .shopify-challenge__button {
+ padding: 10px 24px;
+ font-size: 0.8rem;
+ }
+
+ h1, .h0, .h1 {
+ font-size: 2.5rem;
+ }
+}
+
+/* --- Utility Classes --- */
+.gk-bg-accent {
+ background-color: var(--gk-accent) !important;
+}
+
+.gk-bg-card {
+ background-color: var(--gk-card) !important;
+}
+
+.gk-text-accent {
+ color: var(--gk-accent) !important;
+}
+
+.gk-text-muted {
+ color: var(--gk-muted) !important;
+}
+
+.gk-border {
+ border: 1px solid var(--gk-border) !important;
+}
+
+.gk-font-heading {
+ font-family: var(--gk-font-heading) !important;
+}
+
+.gk-font-label {
+ font-family: var(--gk-font-label) !important;
+}
diff --git a/assets/gristle-vault.css b/assets/gristle-vault.css
new file mode 100644
index 00000000000..8653525e619
--- /dev/null
+++ b/assets/gristle-vault.css
@@ -0,0 +1,599 @@
+/* ============================================================
+ THE GRISTLE VAULT — scoped to .gristle-vault
+ Naked page: dark medieval stone, drifting smoke,
+ swing-open vault door intro, two-column video sessions.
+ ============================================================ */
+
+.gv-body { background: #0b0907; }
+
+.gristle-vault {
+ --gv-orange: #e8690a;
+ --gv-font-heading: "Bebas Neue", sans-serif;
+ --gv-font-body: "DM Sans", sans-serif;
+ --gv-stone-dark: #0e0b08;
+ --gv-mortar: #1c1510;
+ --gv-text: #e8e8e8;
+ --gv-muted: #8a8178;
+ position: relative;
+ min-height: 100vh;
+ overflow: hidden;
+ color: var(--gv-text);
+ font-family: var(--gv-font-body);
+ /* Dark ashlar stone wall — staggered blocks, rough mortar */
+ background-color: var(--gv-stone-dark);
+ background-image:
+ radial-gradient(circle at 30% 20%, rgba(40, 30, 20, 0.18), transparent 60%),
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='120'%3E%3Crect width='160' height='120' fill='%230e0b08'/%3E%3Cg fill='none' stroke='%231c1510' stroke-width='2'%3E%3Crect x='1' y='1' width='96' height='38'/%3E%3Crect x='99' y='1' width='60' height='38'/%3E%3Crect x='1' y='41' width='52' height='38'/%3E%3Crect x='55' y='41' width='104' height='38'/%3E%3Crect x='1' y='81' width='96' height='38'/%3E%3Crect x='99' y='81' width='60' height='38'/%3E%3C/g%3E%3Cg fill='%23120e0a'%3E%3Crect x='3' y='3' width='92' height='34'/%3E%3Crect x='101' y='3' width='56' height='34'/%3E%3Crect x='3' y='43' width='48' height='34'/%3E%3Crect x='57' y='43' width='100' height='34'/%3E%3Crect x='3' y='83' width='92' height='34'/%3E%3Crect x='101' y='83' width='56' height='34'/%3E%3C/g%3E%3Cg fill='%23161009'%3E%3Crect x='101' y='3' width='56' height='34'/%3E%3Crect x='3' y='43' width='48' height='34'/%3E%3Crect x='3' y='83' width='92' height='34'/%3E%3C/g%3E%3C/svg%3E");
+ background-size: auto, 320px 240px;
+}
+
+/* Vignette to keep edges dark and deep */
+.gristle-vault::after {
+ content: "";
+ position: fixed;
+ inset: 0;
+ pointer-events: none;
+ z-index: 2;
+ background: radial-gradient(ellipse at 50% 35%, transparent 40%, rgba(0, 0, 0, 0.55) 100%);
+}
+
+/* ——— Atmosphere: smoke + torchlight ——— */
+.gv-atmosphere {
+ position: fixed;
+ inset: 0;
+ pointer-events: none;
+ z-index: 1;
+ overflow: hidden;
+}
+
+.gv-torchlight {
+ position: absolute;
+ top: -10%;
+ left: 50%;
+ width: 900px;
+ height: 700px;
+ transform: translateX(-50%);
+ background: radial-gradient(ellipse at center, rgba(232, 105, 10, 0.10) 0%, rgba(232, 105, 10, 0.03) 35%, transparent 70%);
+ animation: gvFlicker 6s ease-in-out infinite;
+}
+
+@keyframes gvFlicker {
+ 0%, 100% { opacity: 0.85; }
+ 45% { opacity: 1; }
+ 60% { opacity: 0.7; }
+ 75% { opacity: 0.95; }
+}
+
+.gv-smoke {
+ position: absolute;
+ bottom: -25%;
+ width: 60vw;
+ height: 60vw;
+ max-width: 720px;
+ max-height: 720px;
+ border-radius: 50%;
+ filter: blur(60px);
+ opacity: 0;
+ background: radial-gradient(circle, rgba(60, 48, 38, 0.45) 0%, rgba(20, 16, 12, 0.2) 45%, transparent 70%);
+}
+
+.gv-smoke--1 { left: 8%; animation: gvDrift 26s ease-in-out infinite; }
+.gv-smoke--2 { left: 42%; width: 75vw; animation: gvDrift 34s ease-in-out 6s infinite; }
+.gv-smoke--3 { left: 70%; animation: gvDrift 30s ease-in-out 12s infinite; }
+
+@keyframes gvDrift {
+ 0% { transform: translateY(0) scale(1); opacity: 0; }
+ 20% { opacity: 0.5; }
+ 80% { opacity: 0.35; }
+ 100% { transform: translateY(-120vh) scale(1.6); opacity: 0; }
+}
+
+/* ——— Embers rising slowly ——— */
+.gv-ember {
+ position: absolute;
+ bottom: -20px;
+ width: 4px;
+ height: 4px;
+ border-radius: 50%;
+ background: #e8690a;
+ box-shadow: 0 0 8px 2px rgba(232, 105, 10, 0.6);
+ opacity: 0;
+}
+.gv-ember--1 { left: 18%; animation: gvEmber 11s ease-in 0s infinite; }
+.gv-ember--2 { left: 34%; animation: gvEmber 14s ease-in 2.5s infinite; }
+.gv-ember--3 { left: 50%; animation: gvEmber 12s ease-in 5s infinite; }
+.gv-ember--4 { left: 63%; animation: gvEmber 15s ease-in 1.5s infinite; }
+.gv-ember--5 { left: 78%; animation: gvEmber 13s ease-in 4s infinite; }
+.gv-ember--6 { left: 88%; animation: gvEmber 16s ease-in 6.5s infinite; }
+
+@keyframes gvEmber {
+ 0% { transform: translate(0, 0) scale(1); opacity: 0; }
+ 10% { opacity: 0.9; }
+ 70% { opacity: 0.7; }
+ 100% { transform: translate(24px, -88vh) scale(0.4); opacity: 0; }
+}
+
+/* ============================================================
+ VAULT DOOR INTRO
+ ============================================================ */
+.gv-vault-intro {
+ position: fixed;
+ inset: 0;
+ z-index: 100;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ pointer-events: none;
+ background:
+ radial-gradient(ellipse at 50% 40%, rgba(232, 105, 10, 0.1), transparent 55%),
+ #040302;
+ animation: gvIntroExit 0.9s ease 3.6s forwards;
+}
+
+@keyframes gvIntroExit {
+ to { opacity: 0; visibility: hidden; }
+}
+
+.gv-vault-frame {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ perspective: 1600px;
+ perspective-origin: 50% 45%;
+}
+
+/* iron door halves */
+.gv-door {
+ position: absolute;
+ top: 0;
+ width: 50%;
+ height: 100%;
+ background:
+ linear-gradient(180deg, rgba(255,255,255,0.05), transparent 12%),
+ repeating-linear-gradient(0deg, #1a1510, #1a1510 38px, #221a12 39px, #1a1510 40px),
+ #15110c;
+ box-shadow:
+ inset 0 0 160px rgba(0, 0, 0, 0.92),
+ 0 0 40px rgba(0, 0, 0, 0.9);
+}
+
+.gv-door--left {
+ left: 0;
+ transform-origin: left center;
+ border-right: 2px solid #07050300;
+ animation: gvOpenLeft 2s cubic-bezier(0.45, 0, 0.2, 1) 1.5s forwards;
+}
+
+.gv-door--right {
+ right: 0;
+ transform-origin: right center;
+ animation: gvOpenRight 2s cubic-bezier(0.45, 0, 0.2, 1) 1.5s forwards;
+}
+
+@keyframes gvOpenLeft {
+ from { transform: rotateY(0deg); }
+ to { transform: rotateY(-115deg); }
+}
+@keyframes gvOpenRight {
+ from { transform: rotateY(0deg); }
+ to { transform: rotateY(115deg); }
+}
+
+/* inset panel border on each door */
+.gv-door::before {
+ content: "";
+ position: absolute;
+ inset: 28px;
+ border: 2px solid #2a1e12;
+ box-shadow: inset 0 0 60px rgba(0, 0, 0, 0.6);
+}
+
+.gv-door-seam {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ width: 6px;
+ background: linear-gradient(90deg, transparent, rgba(0,0,0,0.7), transparent);
+}
+.gv-door--left .gv-door-seam { right: -3px; }
+.gv-door--right .gv-door-seam { left: -3px; }
+
+/* rivets */
+.gv-rivet {
+ position: absolute;
+ width: 16px;
+ height: 16px;
+ border-radius: 50%;
+ background: radial-gradient(circle at 35% 30%, #5a4632, #1a120c 70%);
+ box-shadow: 0 1px 2px rgba(0,0,0,0.8);
+}
+.gv-rivet--1 { top: 44px; left: 44px; }
+.gv-rivet--2 { top: 44px; right: 44px; }
+.gv-rivet--3 { bottom: 44px; left: 44px; }
+.gv-rivet--4 { bottom: 44px; right: 44px; }
+
+/* central locking wheel */
+.gv-wheel {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 150px;
+ height: 150px;
+ margin: -75px 0 0 -75px;
+ border-radius: 50%;
+ border: 10px solid #241a10;
+ background: radial-gradient(circle at 40% 35%, #2c2014, #14100a 75%);
+ box-shadow: 0 0 0 6px #0f0b07, inset 0 0 30px rgba(0,0,0,0.8);
+ z-index: 3;
+ animation:
+ gvWheelSpin 1.2s cubic-bezier(0.5, 0, 0.2, 1) 0.6s forwards,
+ gvWheelFade 0.6s ease 1.6s forwards;
+}
+
+@keyframes gvWheelSpin { to { transform: rotate(160deg); } }
+@keyframes gvWheelFade { to { opacity: 0; } }
+
+.gv-wheel-spoke {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 168px;
+ height: 12px;
+ margin: -6px 0 0 -84px;
+ background: linear-gradient(90deg, #2c2014, #3a2a18, #2c2014);
+ border-radius: 6px;
+}
+.gv-wheel-spoke:nth-child(1) { transform: rotate(0deg); }
+.gv-wheel-spoke:nth-child(2) { transform: rotate(60deg); }
+.gv-wheel-spoke:nth-child(3) { transform: rotate(120deg); }
+.gv-wheel-hub {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 44px;
+ height: 44px;
+ margin: -22px 0 0 -22px;
+ border-radius: 50%;
+ background: radial-gradient(circle at 40% 35%, #3a2a18, #100b07);
+ box-shadow: inset 0 0 12px rgba(0,0,0,0.9);
+}
+
+/* emblem mounted above the wheel */
+.gv-emblem {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ margin-top: -150px;
+ z-index: 4;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+ opacity: 0;
+ animation:
+ gvEmblemIn 0.8s ease 0.2s forwards,
+ gvEmblemOut 0.6s ease 1.7s forwards;
+}
+
+@keyframes gvEmblemIn { from { opacity: 0; transform: translate(-50%, -42%); } to { opacity: 1; transform: translate(-50%, -50%); } }
+@keyframes gvEmblemOut { to { opacity: 0; transform: translate(-50%, -58%) scale(1.06); } }
+
+.gv-emblem-eyebrow {
+ font-family: var(--gv-font-body);
+ font-size: 12px;
+ letter-spacing: 0.5em;
+ text-transform: uppercase;
+ color: var(--gv-muted);
+ margin-bottom: 4px;
+ padding-left: 0.5em;
+}
+.gv-emblem-title {
+ font-family: var(--gv-font-heading);
+ font-size: clamp(3.5rem, 13vw, 9rem);
+ line-height: 0.86;
+ letter-spacing: 0.04em;
+ color: var(--gv-text);
+ text-shadow: 0 2px 30px rgba(232, 105, 10, 0.25);
+}
+.gv-emblem-title--accent {
+ color: var(--gv-orange);
+ text-shadow: 0 0 40px rgba(232, 105, 10, 0.55);
+}
+.gv-emblem-rule {
+ width: 120px;
+ height: 2px;
+ margin-top: 18px;
+ background: linear-gradient(90deg, transparent, var(--gv-orange), transparent);
+}
+
+/* ============================================================
+ CONTENT
+ ============================================================ */
+.gv-inner {
+ position: relative;
+ z-index: 3;
+ max-width: 1080px;
+ margin: 0 auto;
+ padding: 0 24px 120px;
+}
+
+.gv-eyebrow {
+ font-family: var(--gv-font-body);
+ font-size: 13px;
+ letter-spacing: 0.28em;
+ text-transform: uppercase;
+ color: var(--gv-orange);
+ margin: 0;
+}
+
+/* ——— Hero ——— */
+.gv-hero {
+ position: relative;
+ text-align: center;
+ padding: 13vh 0 9vh;
+ opacity: 0;
+ animation: gvRise 0.9s ease 3s forwards;
+}
+
+/* warm glow + fog focused right behind the logo */
+.gv-hero::before {
+ content: "";
+ position: absolute;
+ top: 38%;
+ left: 50%;
+ width: min(900px, 86vw);
+ height: 420px;
+ transform: translate(-50%, -50%);
+ background: radial-gradient(ellipse at center, rgba(232, 105, 10, 0.18) 0%, rgba(232, 105, 10, 0.06) 40%, transparent 72%);
+ filter: blur(8px);
+ z-index: 0;
+ pointer-events: none;
+}
+.gv-hero > * { position: relative; z-index: 1; }
+
+@keyframes gvRise {
+ from { opacity: 0; transform: translateY(20px); }
+ to { opacity: 1; transform: translateY(0); }
+}
+
+/* ——— Logo ——— */
+.gv-hero-logo {
+ display: block;
+ width: 78vw;
+ max-width: 1000px;
+ height: auto;
+ margin: 18px auto 0;
+ /* straight-on, no transforms, no crop */
+ opacity: 0;
+ transform: scale(0.98);
+ animation: gvLogoIn 0.9s cubic-bezier(0.22, 0.61, 0.36, 1) 3.05s forwards;
+ filter: drop-shadow(0 6px 40px rgba(232, 105, 10, 0.22));
+}
+@keyframes gvLogoIn {
+ from { opacity: 0; transform: scale(0.98); }
+ to { opacity: 1; transform: scale(1); }
+}
+
+.gv-hero-sub {
+ font-family: var(--gv-font-heading);
+ font-size: clamp(1.3rem, 3.5vw, 2rem);
+ letter-spacing: 0.22em;
+ text-transform: uppercase;
+ color: var(--gv-orange);
+ margin: 24px 0 0;
+}
+.gv-hero-body {
+ max-width: 680px;
+ margin: 22px auto 0;
+ font-size: 1.35rem;
+ line-height: 1.75;
+ color: var(--gv-text);
+ opacity: 0.85;
+}
+
+.gv-scroll-cue {
+ display: block;
+ width: 1px;
+ height: 44px;
+ margin: 40px auto 0;
+ background: linear-gradient(180deg, var(--gv-orange), transparent);
+ animation: gvCue 2s ease-in-out infinite;
+}
+@keyframes gvCue { 0%,100% { opacity: 0.3; transform: scaleY(0.7); } 50% { opacity: 1; transform: scaleY(1); } }
+
+/* ——— Sessions (two-column rows) ——— */
+.gv-sessions {
+ display: flex;
+ flex-direction: column;
+ gap: 88px;
+}
+
+.gv-session {
+ display: grid;
+ grid-template-columns: 1.15fr 1fr;
+ gap: 48px;
+ align-items: center;
+}
+.gv-session:nth-child(even) .gv-session-media { order: 2; }
+
+.gv-session-media { position: relative; }
+
+.gv-session-no {
+ position: absolute;
+ top: -38px;
+ left: -10px;
+ font-family: var(--gv-font-heading);
+ font-size: 5.5rem;
+ line-height: 1;
+ color: rgba(232, 105, 10, 0.14);
+ z-index: 0;
+ pointer-events: none;
+}
+
+.gv-embed {
+ position: relative;
+ z-index: 1;
+ padding-top: 56.25%;
+ background: #000;
+ border: 1px solid rgba(232, 105, 10, 0.18);
+ box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
+ transition: border-color 0.25s ease, box-shadow 0.25s ease;
+}
+.gv-session:hover .gv-embed {
+ border-color: rgba(232, 105, 10, 0.5);
+ box-shadow: 0 24px 70px rgba(232, 105, 10, 0.12);
+}
+.gv-embed iframe,
+.gv-embed-empty {
+ position: absolute;
+ inset: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+.gv-embed-empty {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--gv-muted);
+ font-size: 0.85rem;
+ text-align: center;
+ padding: 20px;
+}
+
+.gv-session-tag { margin-bottom: 14px; }
+.gv-session-label {
+ display: block;
+ font-family: var(--gv-font-body);
+ font-size: 13px;
+ letter-spacing: 0.24em;
+ text-transform: uppercase;
+ color: var(--gv-orange);
+ margin-bottom: 8px;
+}
+.gv-session-title {
+ font-family: var(--gv-font-heading);
+ font-weight: var(--font-heading-weight, 400);
+ font-size: clamp(1.8rem, 4vw, 2.8rem);
+ line-height: 1.02;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ color: var(--gv-text);
+ margin: 0 0 16px;
+}
+.gv-session-desc {
+ font-size: 1.35rem;
+ line-height: 1.8;
+ color: #d8d4cf;
+ margin: 0;
+}
+
+/* ——— PDF Guide ——— */
+.gv-guide {
+ margin-top: 110px;
+ padding: 56px 48px;
+ background: linear-gradient(180deg, #100c08, #0a0806);
+ border: 1px solid rgba(232, 105, 10, 0.22);
+ border-top: 2px solid var(--gv-orange);
+ display: flex;
+ align-items: center;
+ gap: 32px;
+ box-shadow: 0 30px 80px rgba(0, 0, 0, 0.6);
+}
+.gv-guide-scroll { flex-shrink: 0; }
+.gv-guide-copy { flex: 1; min-width: 0; }
+.gv-guide-copy .gv-eyebrow { margin-bottom: 12px; }
+.gv-guide-title {
+ font-family: var(--gv-font-heading);
+ font-weight: var(--font-heading-weight, 400);
+ font-size: clamp(2.4rem, 5vw, 3.4rem);
+ letter-spacing: 0.06em;
+ text-transform: uppercase;
+ color: var(--gv-text);
+ margin: 0 0 14px;
+}
+.gv-guide-desc {
+ font-size: 1.5rem;
+ line-height: 1.7;
+ color: #d8d4cf;
+ margin: 0;
+ max-width: 600px;
+}
+
+/* CTA: arrow pointing at the download button */
+.gv-guide-cta {
+ flex-shrink: 0;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+.gv-guide-arrow {
+ flex-shrink: 0;
+ animation: gvNudge 1.4s ease-in-out infinite;
+}
+@keyframes gvNudge {
+ 0%, 100% { transform: translateX(0); opacity: 0.7; }
+ 50% { transform: translateX(8px); opacity: 1; }
+}
+.gv-guide-btn {
+ flex-shrink: 0;
+ white-space: nowrap;
+ font-size: 1.15rem;
+ padding: 1.4rem 2.4rem;
+}
+
+/* Belt-and-suspenders: hide store-wide signup popups on the Vault page */
+.klaviyo-form,
+[class*="kl-private"],
+[class*="klaviyo"],
+[data-testid="POPUP"],
+.newsletter-popup,
+.pop-up,
+.popup,
+#PopupModal {
+ display: none !important;
+}
+
+/* ============================================================
+ RESPONSIVE
+ ============================================================ */
+/* Tablet logo width */
+@media screen and (min-width: 750px) and (max-width: 989px) {
+ .gv-hero-logo { width: 86vw; }
+}
+
+@media screen and (max-width: 749px) {
+ .gv-inner { padding: 0 18px 80px; }
+ .gv-hero { padding: 11vh 0 7vh; }
+ .gv-hero-logo { width: 94vw; margin-top: 14px; }
+
+ .gv-sessions { gap: 64px; }
+ .gv-session {
+ grid-template-columns: 1fr;
+ gap: 22px;
+ }
+ .gv-session:nth-child(even) .gv-session-media { order: 0; }
+ .gv-session-no { top: -30px; font-size: 4rem; }
+
+ .gv-guide {
+ flex-direction: column;
+ text-align: center;
+ padding: 40px 24px;
+ gap: 22px;
+ }
+ .gv-guide-desc { margin: 0 auto; }
+
+ .gv-wheel { width: 110px; height: 110px; margin: -55px 0 0 -55px; }
+ .gv-wheel-spoke { width: 124px; margin-left: -62px; }
+ .gv-emblem { margin-top: -120px; }
+}
+
+/* Accessibility: respect reduced motion — skip the theatrics */
+@media (prefers-reduced-motion: reduce) {
+ .gv-vault-intro { display: none; }
+ .gv-smoke, .gv-torchlight, .gv-scroll-cue, .gv-ember { animation: none; }
+ .gv-ember { opacity: 0; }
+ .gv-hero { opacity: 1; animation: none; }
+ .gv-hero-logo { opacity: 1; transform: none; animation: none; }
+}
diff --git a/assets/vault-optin.css b/assets/vault-optin.css
new file mode 100644
index 00000000000..8e0e1c1c968
--- /dev/null
+++ b/assets/vault-optin.css
@@ -0,0 +1,1176 @@
+/* ============================================================
+ Gristle Vault opt-in page — shared styles
+ Premium private-archive aesthetic: charcoal metal, warm
+ tube-amp orange glow, collectible lesson emblems. Loaded once
+ by layout/vault-optin.liquid; every vault-* section renders
+ inside the .vopt wrapper and inherits these tokens.
+
+ Layout rule: ONE centered wrapper width for every major
+ section so the whole page shares a single visual center.
+ ============================================================ */
+
+.vopt {
+ --vopt-bg: #0d0d0d;
+ --vopt-card: #161616;
+ --vopt-card-border: #242424;
+ --vopt-card-dark: #181818;
+ --vopt-card-dark-border: #2a2a2a;
+ --vopt-accent: #c8601a;
+ --vopt-accent-bright: #e8853a;
+ --vopt-head: #f4efe6;
+ --vopt-text: #e8e2d9;
+ --vopt-muted: #a89e90;
+ --vopt-dim: #6a6358;
+ --vopt-vdim: #4a4540;
+ --vopt-display: "Bebas Neue", "Inter", sans-serif;
+ --vopt-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
+ --vopt-w: 1180px;
+ --vopt-wave: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='24' viewBox='0 0 160 24'%3E%3Cg fill='%23c8601a'%3E%3Crect x='2' y='9' width='2' height='6' rx='1'/%3E%3Crect x='8' y='6' width='2' height='12' rx='1'/%3E%3Crect x='14' y='3' width='2' height='18' rx='1'/%3E%3Crect x='20' y='8' width='2' height='8' rx='1'/%3E%3Crect x='26' y='5' width='2' height='14' rx='1'/%3E%3Crect x='32' y='10' width='2' height='4' rx='1'/%3E%3Crect x='38' y='7' width='2' height='10' rx='1'/%3E%3Crect x='44' y='2' width='2' height='20' rx='1'/%3E%3Crect x='50' y='8' width='2' height='8' rx='1'/%3E%3Crect x='56' y='5' width='2' height='14' rx='1'/%3E%3Crect x='62' y='9' width='2' height='6' rx='1'/%3E%3Crect x='68' y='6' width='2' height='12' rx='1'/%3E%3Crect x='74' y='4' width='2' height='16' rx='1'/%3E%3Crect x='80' y='9' width='2' height='6' rx='1'/%3E%3Crect x='86' y='6' width='2' height='12' rx='1'/%3E%3Crect x='92' y='3' width='2' height='18' rx='1'/%3E%3Crect x='98' y='8' width='2' height='8' rx='1'/%3E%3Crect x='104' y='5' width='2' height='14' rx='1'/%3E%3Crect x='110' y='10' width='2' height='4' rx='1'/%3E%3Crect x='116' y='7' width='2' height='10' rx='1'/%3E%3Crect x='122' y='4' width='2' height='16' rx='1'/%3E%3Crect x='128' y='8' width='2' height='8' rx='1'/%3E%3Crect x='134' y='6' width='2' height='12' rx='1'/%3E%3Crect x='140' y='9' width='2' height='6' rx='1'/%3E%3Crect x='146' y='5' width='2' height='14' rx='1'/%3E%3Crect x='152' y='8' width='2' height='8' rx='1'/%3E%3C/g%3E%3C/svg%3E");
+
+ width: 100%;
+ color: var(--vopt-text);
+ font-family: var(--vopt-body);
+ font-size: 16px;
+ line-height: 1.6;
+ overflow-x: hidden;
+ background-color: var(--vopt-bg);
+ background-image:
+ radial-gradient(1100px 620px at 82% -8%, rgba(200, 96, 26, 0.12), transparent 60%),
+ radial-gradient(820px 620px at -8% 22%, rgba(200, 96, 26, 0.06), transparent 55%),
+ radial-gradient(900px 700px at 60% 108%, rgba(200, 96, 26, 0.05), transparent 60%);
+}
+
+.vopt *,
+.vopt *::before,
+.vopt *::after { box-sizing: border-box; }
+
+.vopt img { max-width: 100%; height: auto; display: block; }
+
+/* ——— ONE centered wrapper for every section ——— */
+.vopt-wrap,
+.vopt-wrap--wide {
+ width: min(100% - 32px, var(--vopt-w));
+ margin-inline: auto;
+}
+
+.vopt-eyebrow {
+ margin: 0;
+ font-family: var(--vopt-body);
+ font-size: 11px;
+ font-weight: 600;
+ letter-spacing: 0.2em;
+ text-transform: uppercase;
+ color: var(--vopt-accent-bright);
+}
+
+.vopt-accent-text { color: var(--vopt-accent); }
+
+.vopt-h2 {
+ margin: 12px 0 0;
+ font-family: var(--vopt-display);
+ font-weight: 400;
+ font-size: 46px;
+ line-height: 0.95;
+ letter-spacing: 0.01em;
+ text-transform: uppercase;
+ color: var(--vopt-head);
+}
+
+/* ——— Buttons (pill CTA) ——— */
+.vopt-btn {
+ display: block;
+ width: 100%;
+ border: 0;
+ border-radius: 40px;
+ background: linear-gradient(180deg, #d4701f 0%, #c8601a 55%, #b3530f 100%);
+ color: #ffffff;
+ font-family: var(--vopt-display);
+ font-weight: 400;
+ font-size: 23px;
+ line-height: 1;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+ padding: 18px 26px;
+ cursor: pointer;
+ text-align: center;
+ text-decoration: none;
+ box-shadow: 0 8px 26px rgba(200, 96, 26, 0.32), inset 0 1px 0 rgba(255, 255, 255, 0.18);
+ -webkit-appearance: none;
+ appearance: none;
+ transition: transform 0.15s ease, box-shadow 0.15s ease, filter 0.15s ease;
+}
+
+.vopt-btn:hover { transform: translateY(-1px); filter: brightness(1.05); box-shadow: 0 12px 34px rgba(200, 96, 26, 0.42), inset 0 1px 0 rgba(255, 255, 255, 0.2); }
+.vopt-btn:focus-visible { outline: 2px solid #f4efe6; outline-offset: 3px; }
+
+.vopt-btn--inline { display: inline-flex; align-items: center; justify-content: center; gap: 10px; width: auto; padding: 18px 38px; }
+
+/* ——— Lesson emblems ——— */
+.vopt-emblem { display: inline-flex; }
+.vopt-emblem svg {
+ width: 54px;
+ height: 54px;
+ display: block;
+ filter: drop-shadow(0 0 8px rgba(200, 96, 26, 0.4));
+}
+
+/* ——— Vault-seam dividers (amp panel line) ——— */
+.vopt-divider {
+ position: relative;
+ width: min(100% - 32px, var(--vopt-w));
+ margin-inline: auto;
+}
+
+.vopt-divider hr {
+ border: 0;
+ height: 2px;
+ margin: 0;
+ background:
+ linear-gradient(90deg, transparent, rgba(42, 42, 42, 0.95) 12%, rgba(42, 42, 42, 0.95) 88%, transparent),
+ linear-gradient(180deg, rgba(0, 0, 0, 0.6), rgba(255, 255, 255, 0.04));
+}
+
+.vopt-divider::after {
+ content: "";
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ width: 7px;
+ height: 7px;
+ transform: translate(-50%, -50%) rotate(45deg);
+ background: var(--vopt-accent);
+ box-shadow: 0 0 12px rgba(200, 96, 26, 0.6);
+}
+
+/* ===========================================================
+ 1. HERO — cinematic, balanced two column
+ =========================================================== */
+.vopt-hero { padding-block: 64px 48px; }
+
+.vopt-hero-grid {
+ display: grid;
+ grid-template-columns: 1.02fr 0.98fr;
+ gap: 48px;
+ align-items: center;
+}
+
+.vopt-hero-copy { min-width: 0; }
+
+.vopt-kicker {
+ margin: 0;
+ font-family: var(--vopt-body);
+ font-size: 12px;
+ font-weight: 600;
+ letter-spacing: 0.22em;
+ line-height: 1.5;
+ text-transform: uppercase;
+ color: var(--vopt-accent-bright);
+}
+
+.vopt-h1 {
+ margin: 16px 0 0;
+ font-family: var(--vopt-display);
+ font-weight: 400;
+ font-size: clamp(54px, 6.4vw, 90px);
+ line-height: 0.85;
+ letter-spacing: 0.005em;
+ text-transform: uppercase;
+ color: var(--vopt-head);
+}
+
+.vopt-hero-value {
+ margin: 20px 0 0;
+ font-family: var(--vopt-display);
+ font-size: 26px;
+ letter-spacing: 0.04em;
+ line-height: 1.1;
+ text-transform: uppercase;
+ color: var(--vopt-head);
+}
+
+.vopt-hero-value .vopt-accent-text { color: var(--vopt-accent-bright); }
+
+.vopt-hero-lead {
+ margin: 22px 0 0;
+ max-width: 540px;
+ font-size: 17px;
+ font-weight: 600;
+ line-height: 1.45;
+ color: var(--vopt-head);
+}
+
+.vopt-hero-pain {
+ margin: 12px 0 0;
+ max-width: 540px;
+ font-size: 15px;
+ line-height: 1.65;
+ color: var(--vopt-muted);
+}
+
+.vopt-hero-cta { margin: 30px 0 0; }
+
+.vopt-hero-micro {
+ margin: 13px 0 0;
+ font-size: 11px;
+ letter-spacing: 0.06em;
+ text-transform: uppercase;
+ color: var(--vopt-dim);
+}
+
+/* ——— Hero vault-preview: contained display panel ——— */
+.vopt-hero-visual {
+ position: relative;
+ min-height: 430px;
+ border-radius: 18px;
+ border: 1px solid #2a2018;
+ background: linear-gradient(180deg, #181818 0%, #101010 100%);
+ box-shadow: 0 26px 60px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.03);
+ overflow: hidden;
+}
+
+.vopt-hero-glow {
+ position: absolute;
+ top: -25%;
+ left: -10%;
+ right: -10%;
+ height: 70%;
+ background: radial-gradient(closest-side, rgba(200, 96, 26, 0.32), transparent 72%);
+ pointer-events: none;
+}
+
+.vopt-vault { position: absolute; inset: 0; }
+
+.vopt-vault-tile {
+ position: absolute;
+ width: 232px;
+ border-radius: 14px;
+ background: linear-gradient(158deg, #1f1f1f 0%, #161616 58%, #121212 100%);
+ border: 1px solid #2f2f2f;
+ box-shadow: 0 16px 38px rgba(0, 0, 0, 0.55);
+ overflow: hidden;
+}
+
+.vopt-vault-tile--back1 { top: 8%; left: 6%; transform: rotate(-7deg); opacity: 0.8; }
+.vopt-vault-tile--back2 { top: 5%; right: 6%; transform: rotate(6deg); opacity: 0.78; }
+.vopt-vault-tile--front { bottom: 7%; left: 50%; transform: translateX(-50%); z-index: 2; box-shadow: 0 24px 56px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(200, 96, 26, 0.18); }
+
+.vopt-tile-thumb {
+ position: relative;
+ height: 124px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background:
+ radial-gradient(circle at 50% 44%, rgba(200, 96, 26, 0.18), transparent 66%),
+ repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.025) 0 1px, transparent 1px 26px),
+ #131313;
+}
+
+.vopt-tile-tag {
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ font-family: var(--vopt-display);
+ font-size: 13px;
+ letter-spacing: 0.06em;
+ color: var(--vopt-accent-bright);
+ background: rgba(20, 11, 4, 0.85);
+ border: 1px solid #3a2410;
+ border-radius: 5px;
+ padding: 2px 8px;
+}
+
+.vopt-tile-meta {
+ font-family: var(--vopt-display);
+ font-size: 17px;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ color: var(--vopt-text);
+ padding: 11px 14px;
+ border-top: 1px solid #242424;
+}
+
+/* glowing play marker (hero tiles only) */
+.vopt-play {
+ position: relative;
+ width: 50px;
+ height: 50px;
+ border-radius: 50%;
+ background: radial-gradient(circle at 50% 34%, #ec8a3a, #b8540e);
+ box-shadow: 0 0 0 6px rgba(200, 96, 26, 0.12), 0 0 22px rgba(200, 96, 26, 0.5);
+ flex: 0 0 auto;
+}
+
+.vopt-play::after {
+ content: "";
+ position: absolute;
+ top: 50%;
+ left: 54%;
+ transform: translate(-50%, -50%);
+ width: 0;
+ height: 0;
+ border-left: 14px solid #120a04;
+ border-top: 9px solid transparent;
+ border-bottom: 9px solid transparent;
+}
+
+.vopt-play--sm { width: 42px; height: 42px; }
+.vopt-play--sm::after { border-left-width: 12px; border-top-width: 8px; border-bottom-width: 8px; }
+
+.vopt-wave {
+ position: absolute;
+ left: 12px;
+ right: 12px;
+ bottom: 10px;
+ height: 16px;
+ background-image: var(--vopt-wave);
+ background-repeat: repeat-x;
+ background-size: auto 100%;
+ opacity: 0.5;
+}
+
+/* PDF tile in the hero — sealed file, secondary */
+.vopt-pdf-chip {
+ position: absolute;
+ right: 16px;
+ bottom: 16px;
+ z-index: 3;
+ display: flex;
+ align-items: center;
+ gap: 9px;
+ background: linear-gradient(160deg, #1d140a, #160f06);
+ border: 1px solid #38240f;
+ border-left: 3px solid var(--vopt-accent);
+ border-radius: 9px;
+ padding: 8px 11px;
+ box-shadow: 0 12px 30px rgba(0, 0, 0, 0.5);
+}
+
+.vopt-pdf-chip .vopt-emblem svg { width: 26px; height: 26px; }
+
+.vopt-pdf-chip-label {
+ font-family: var(--vopt-display);
+ font-size: 16px;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+ color: var(--vopt-text);
+ line-height: 1;
+}
+
+.vopt-pdf-chip-label small {
+ display: block;
+ font-family: var(--vopt-body);
+ font-size: 8px;
+ letter-spacing: 0.14em;
+ color: var(--vopt-dim);
+}
+
+/* ===========================================================
+ 2. FORM — premium vault access panel
+ =========================================================== */
+.vopt-split {
+ display: grid;
+ grid-template-columns: 0.88fr 1.12fr;
+ gap: 24px;
+ padding-block: 8px;
+ align-items: stretch;
+}
+
+.vopt-card {
+ background: var(--vopt-card);
+ border: 1px solid var(--vopt-card-border);
+ border-radius: 14px;
+}
+
+.vopt-photo-card { overflow: hidden; display: flex; flex-direction: column; }
+
+.vopt-photo-well {
+ position: relative;
+ flex: 1 1 auto;
+ min-height: 280px;
+ background: #141414;
+ overflow: hidden;
+}
+
+.vopt-photo-well img { width: 100%; height: 100%; object-fit: cover; display: block; }
+
+.vopt-photo-placeholder {
+ position: absolute;
+ inset: 0;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 10px;
+ padding: 20px;
+ text-align: center;
+ color: var(--vopt-vdim);
+}
+
+.vopt-photo-placeholder i { font-size: 34px; color: #3a3530; }
+
+.vopt-photo-placeholder span {
+ font-size: 10px;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ color: #4a4540;
+}
+
+.vopt-stats {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ border-top: 1px solid var(--vopt-card-border);
+ background: linear-gradient(180deg, #181818, #141414);
+}
+
+.vopt-stat {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 2px;
+ padding: 18px 4px;
+ text-align: center;
+}
+
+.vopt-stat + .vopt-stat { border-left: 1px solid #202020; }
+
+.vopt-stat-num {
+ font-family: var(--vopt-display);
+ font-size: 36px;
+ line-height: 1;
+ color: var(--vopt-accent-bright);
+}
+
+.vopt-stat-label {
+ font-size: 9px;
+ letter-spacing: 0.14em;
+ text-transform: uppercase;
+ color: #6a635a;
+}
+
+/* The opt-in panel */
+.vopt-form-card {
+ position: relative;
+ padding: 36px 32px;
+ border: 1px solid #3a2712;
+ border-radius: 16px;
+ background: linear-gradient(180deg, rgba(28, 24, 20, 0.94), rgba(16, 16, 16, 0.97));
+ box-shadow: 0 0 0 1px rgba(200, 96, 26, 0.1), 0 30px 70px rgba(0, 0, 0, 0.55);
+ overflow: hidden;
+}
+
+.vopt-form-card::before {
+ content: "";
+ position: absolute;
+ top: -45%;
+ left: 0;
+ right: 0;
+ height: 55%;
+ background: radial-gradient(closest-side, rgba(200, 96, 26, 0.22), transparent 72%);
+ pointer-events: none;
+}
+
+.vopt-form-card > * { position: relative; z-index: 1; }
+
+.vopt-form-eyebrow {
+ margin: 0 0 7px;
+ font-size: 11px;
+ font-weight: 600;
+ letter-spacing: 0.2em;
+ text-transform: uppercase;
+ color: var(--vopt-accent-bright);
+}
+
+.vopt-form-heading {
+ margin: 0;
+ font-family: var(--vopt-display);
+ font-weight: 400;
+ font-size: 44px;
+ line-height: 0.94;
+ letter-spacing: 0.01em;
+ text-transform: uppercase;
+ color: var(--vopt-head);
+}
+
+.vopt-form-note {
+ margin: 8px 0 20px;
+ font-size: 14px;
+ color: var(--vopt-muted);
+}
+
+.vopt-form { margin: 0; }
+
+.vopt-field-row {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 12px;
+ margin-bottom: 12px;
+}
+
+.vopt-input {
+ width: 100%;
+ background: #100f0e;
+ border: 1px solid #3a322a;
+ border-radius: 9px;
+ color: var(--vopt-text);
+ font-family: var(--vopt-body);
+ font-size: 16px;
+ padding: 15px 16px;
+ -webkit-appearance: none;
+ appearance: none;
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
+}
+
+.vopt-input::placeholder { color: #5a5045; }
+.vopt-input:focus { outline: none; border-color: var(--vopt-accent); box-shadow: 0 0 0 3px rgba(200, 96, 26, 0.16); }
+.vopt-input:last-of-type { margin-bottom: 18px; }
+
+.vopt-consent {
+ margin: 14px 0 0;
+ font-size: 10px;
+ line-height: 1.55;
+ color: #6a5f53;
+}
+
+.vopt-consent p { margin: 0; }
+
+.vopt-error {
+ margin: 10px 0 0;
+ font-size: 12px;
+ color: #d2693a;
+}
+
+.vopt-success {
+ font-family: var(--vopt-display);
+ font-weight: 400;
+ font-size: 24px;
+ letter-spacing: 0.02em;
+ text-align: center;
+ color: var(--vopt-accent-bright);
+ padding: 56px 10px;
+}
+
+/* ===========================================================
+ 3. BRIDGE — pain to desire
+ =========================================================== */
+.vopt-bridge { padding-block: 62px; text-align: center; }
+
+.vopt-bridge-h {
+ margin: 12px auto 0;
+ max-width: 760px;
+ font-family: var(--vopt-display);
+ font-weight: 400;
+ font-size: clamp(34px, 4.6vw, 54px);
+ line-height: 0.96;
+ letter-spacing: 0.01em;
+ text-transform: uppercase;
+ color: var(--vopt-head);
+}
+
+.vopt-bridge-sub {
+ margin: 20px auto 0;
+ max-width: 660px;
+ font-size: 16px;
+ line-height: 1.7;
+ color: var(--vopt-muted);
+}
+
+.vopt-bridge-cols {
+ display: grid;
+ grid-template-columns: 1fr auto 1fr;
+ gap: 22px;
+ align-items: stretch;
+ max-width: 880px;
+ margin: 34px auto 0;
+ text-align: left;
+}
+
+.vopt-bridge-side {
+ border: 1px solid var(--vopt-card-border);
+ border-radius: 14px;
+ padding: 22px 24px;
+ background: linear-gradient(180deg, #151515, #121212);
+}
+
+.vopt-bridge-side h4 {
+ margin: 0 0 12px;
+ font-family: var(--vopt-display);
+ font-size: 20px;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+}
+
+.vopt-bridge-side ul { margin: 0; padding: 0; list-style: none; }
+.vopt-bridge-side li { font-size: 14px; line-height: 1.5; color: var(--vopt-muted); padding: 7px 0 7px 22px; position: relative; }
+.vopt-bridge-side li::before { content: ""; position: absolute; left: 2px; top: 14px; width: 6px; height: 6px; border-radius: 50%; }
+
+.vopt-bridge-side--pain { border-color: #2a2320; }
+.vopt-bridge-side--pain h4 { color: #8a8076; }
+.vopt-bridge-side--pain li::before { background: #4a4540; }
+
+.vopt-bridge-side--gain { border-color: #3a2410; background: linear-gradient(180deg, #1b140c, #140e07); box-shadow: inset 0 0 50px rgba(200, 96, 26, 0.06); }
+.vopt-bridge-side--gain h4 { color: var(--vopt-accent-bright); }
+.vopt-bridge-side--gain li { color: var(--vopt-text); }
+.vopt-bridge-side--gain li::before { background: var(--vopt-accent); box-shadow: 0 0 8px rgba(200, 96, 26, 0.6); }
+
+.vopt-bridge-arrow {
+ display: flex;
+ align-items: center;
+ font-family: var(--vopt-display);
+ font-size: 34px;
+ color: var(--vopt-accent);
+}
+
+.vopt-bridge-foot {
+ margin: 32px 0 0;
+ font-family: var(--vopt-display);
+ font-size: 26px;
+ letter-spacing: 0.03em;
+ text-transform: uppercase;
+ color: var(--vopt-head);
+}
+
+/* ===========================================================
+ 4. LETTER — personal invite (warm card)
+ =========================================================== */
+.vopt-letter { padding-block: 56px; }
+
+.vopt-letter-card {
+ position: relative;
+ border: 1px solid #2c2118;
+ border-radius: 18px;
+ padding: 44px 42px;
+ background: linear-gradient(180deg, #19150f 0%, #121110 100%);
+ overflow: hidden;
+}
+
+.vopt-letter-card::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 3px;
+ background: linear-gradient(90deg, #c8601a, #e8853a 40%, transparent);
+}
+
+.vopt-letter-grid {
+ display: grid;
+ grid-template-columns: 250px minmax(0, 1fr);
+ gap: 40px;
+ margin-top: 26px;
+ align-items: start;
+}
+
+.vopt-letter-photo { width: 250px; }
+
+.vopt-letter-well {
+ position: relative;
+ width: 250px;
+ aspect-ratio: 4 / 5;
+ background: var(--vopt-card-dark);
+ border: 1px solid #3a2410;
+ border-radius: 14px;
+ overflow: hidden;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-shadow: 0 0 0 1px rgba(200, 96, 26, 0.08), 0 18px 44px rgba(0, 0, 0, 0.5);
+}
+
+.vopt-letter-well img { width: 100%; height: 100%; object-fit: cover; }
+.vopt-letter-well i { font-size: 34px; color: #3a3530; }
+
+.vopt-letter-caption {
+ margin: 14px 0 0;
+ font-family: var(--vopt-display);
+ font-size: 20px;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+ color: var(--vopt-text);
+ text-align: center;
+}
+
+.vopt-letter-caption small {
+ display: block;
+ font-family: var(--vopt-body);
+ font-size: 10px;
+ letter-spacing: 0.12em;
+ color: var(--vopt-dim);
+}
+
+.vopt-letter-copy { max-width: 640px; }
+
+.vopt-letter-lead {
+ margin: 0 0 16px;
+ font-family: var(--vopt-display);
+ font-size: 44px;
+ line-height: 0.98;
+ letter-spacing: 0.01em;
+ text-transform: uppercase;
+ color: var(--vopt-accent-bright);
+}
+
+.vopt-letter-copy p {
+ margin: 0 0 14px;
+ font-size: 15px;
+ line-height: 1.78;
+ color: var(--vopt-muted);
+}
+
+.vopt-letter-copy p:last-child { margin-bottom: 0; }
+
+.vopt-letter-copy strong,
+.vopt-bold { color: var(--vopt-text); font-weight: 600; }
+.vopt-letter-copy em,
+.vopt-orange { color: var(--vopt-accent-bright); font-style: normal; font-weight: 600; }
+
+.vopt-pullquote {
+ margin: 30px 0 0;
+ border-left: 3px solid var(--vopt-accent);
+ background: linear-gradient(180deg, #1d1d1d, #161616);
+ border-radius: 0 12px 12px 0;
+ padding: 22px 24px;
+ box-shadow: inset 0 0 50px rgba(200, 96, 26, 0.06);
+}
+
+.vopt-pullquote span { display: block; font-family: var(--vopt-display); font-size: 28px; line-height: 1.05; letter-spacing: 0.01em; }
+.vopt-pullquote .vopt-pq-1 { color: #ffffff; }
+.vopt-pullquote .vopt-pq-2 { color: var(--vopt-accent-bright); }
+
+/* ===========================================================
+ 5. STASH — collectible archive cards
+ =========================================================== */
+.vopt-stash { padding-block: 56px; }
+
+.vopt-section-sub {
+ margin: 16px 0 0;
+ max-width: 620px;
+ font-size: 15px;
+ line-height: 1.65;
+ color: var(--vopt-muted);
+}
+
+.vopt-grid {
+ display: grid;
+ grid-template-columns: repeat(6, 1fr);
+ gap: 18px;
+ margin-top: 30px;
+}
+
+.vopt-card-item {
+ position: relative;
+ grid-column: span 2;
+ background: linear-gradient(162deg, #1c1c1c 0%, #151515 60%, #121212 100%);
+ border: 1px solid #272727;
+ border-radius: 14px;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4);
+ transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
+}
+
+.vopt-card-item::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ border-radius: 14px;
+ pointer-events: none;
+ box-shadow: inset 0 0 0 1px rgba(200, 96, 26, 0.05);
+}
+
+.vopt-card-item:hover {
+ transform: translateY(-5px);
+ border-color: #43300f;
+ box-shadow: 0 18px 38px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(200, 96, 26, 0.25), 0 0 30px rgba(200, 96, 26, 0.14);
+}
+
+.vopt-card-item[data-w="third"] { grid-column: span 2; }
+.vopt-card-item[data-w="half"] { grid-column: span 3; }
+.vopt-card-item[data-w="full"] { grid-column: span 6; }
+.vopt-card-item--wide { grid-column: span 3; }
+
+.vopt-card-head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 8px;
+ padding: 11px 14px;
+ background: linear-gradient(180deg, #2a190a 0%, #1c1107 100%);
+ border-bottom: 1px solid #3a2510;
+ box-shadow: inset 0 1px 0 rgba(255, 200, 150, 0.1);
+}
+
+.vopt-card-free {
+ font-family: var(--vopt-display);
+ font-size: 17px;
+ letter-spacing: 0.08em;
+ color: var(--vopt-accent-bright);
+}
+
+.vopt-card-rivet {
+ width: 9px;
+ height: 9px;
+ border-radius: 50%;
+ background: radial-gradient(circle at 35% 30%, #6a5238, #2a1c0e);
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(120, 90, 50, 0.25);
+}
+
+.vopt-card-well {
+ position: relative;
+ height: 124px;
+ overflow: hidden;
+ background:
+ radial-gradient(circle at 50% 46%, rgba(200, 96, 26, 0.18), transparent 64%),
+ repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.022) 0 1px, transparent 1px 24px),
+ #141414;
+}
+
+/* layered hero composition: unique scene art behind the central play head */
+.vopt-scene-art {
+ position: absolute;
+ inset: 0;
+ display: block;
+ z-index: 0;
+}
+
+.vopt-scene-art svg { width: 100%; height: 100%; display: block; }
+
+.vopt-card-well .vopt-play {
+ position: absolute;
+ top: 47%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ z-index: 2;
+ width: 48px;
+ height: 48px;
+ transition: transform 0.22s ease, box-shadow 0.22s ease;
+}
+
+.vopt-card-well .vopt-play::after { border-left-width: 13px; border-top-width: 9px; border-bottom-width: 9px; }
+
+.vopt-card-well .vopt-wave {
+ left: 0;
+ right: 0;
+ bottom: 9px;
+ height: 18px;
+ z-index: 1;
+ background-repeat: no-repeat;
+ background-position: center bottom;
+ background-size: 100% 100%;
+ opacity: 0.62;
+}
+
+.vopt-card-item:hover .vopt-card-well .vopt-play {
+ transform: translate(-50%, -50%) scale(1.08);
+ box-shadow: 0 0 0 7px rgba(200, 96, 26, 0.14), 0 0 30px rgba(200, 96, 26, 0.65);
+}
+
+.vopt-card-item:hover .vopt-scene-art { filter: brightness(1.12); }
+.vopt-card-item:hover .vopt-card-well .vopt-wave { opacity: 0.8; }
+
+/* idle motion that reinforces a few identities (kept subtle) */
+.vopt-scene-art--pick .vopt-streak { animation: vopt-streak 3.4s ease-in-out infinite; }
+.vopt-scene-art--outside .vopt-escape { animation: vopt-float 3.6s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
+.vopt-scene-art--clinic .vopt-rings { animation: vopt-pulse 3.2s ease-in-out infinite; }
+
+@keyframes vopt-streak { 0%, 100% { transform: translateX(0); opacity: 0.9; } 50% { transform: translateX(4px); opacity: 0.6; } }
+@keyframes vopt-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } }
+@keyframes vopt-pulse { 0%, 100% { opacity: 0.85; } 50% { opacity: 0.5; } }
+
+@media (prefers-reduced-motion: reduce) {
+ .vopt-scene-art--pick .vopt-streak,
+ .vopt-scene-art--outside .vopt-escape,
+ .vopt-scene-art--clinic .vopt-rings { animation: none; }
+ .vopt-card-well .vopt-play { transition: none; }
+}
+
+/* ——— Per-lesson waveform identities (generated) ——— */
+.vopt-wave--pick { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='560' height='24' viewBox='0 0 560 24' fill='%23e8853a'%3E%3Crect x='3.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='9.1' y='2.77' width='2' height='18.47' rx='1'/%3E%3Crect x='15.2' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='21.3' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='27.4' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='33.5' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='39.6' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='45.7' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='51.8' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='57.9' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='64.0' y='2.23' width='2' height='19.55' rx='1'/%3E%3Crect x='70.1' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='76.2' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='82.3' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='88.4' y='2.97' width='2' height='18.07' rx='1'/%3E%3Crect x='94.5' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='100.6' y='3.73' width='2' height='16.53' rx='1'/%3E%3Crect x='106.7' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='112.8' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='118.9' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='125.0' y='1.03' width='2' height='21.95' rx='1'/%3E%3Crect x='131.1' y='3.34' width='2' height='17.33' rx='1'/%3E%3Crect x='137.2' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='143.3' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='149.4' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='155.5' y='3.51' width='2' height='16.99' rx='1'/%3E%3Crect x='161.6' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='167.7' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='173.8' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='179.9' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='186.0' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='192.1' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='198.2' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='204.3' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='210.4' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='216.5' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='222.6' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='228.7' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='234.8' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='240.9' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='247.0' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='253.1' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='259.2' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='265.3' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='271.4' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='277.5' y='2.70' width='2' height='18.60' rx='1'/%3E%3Crect x='283.6' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='289.7' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='295.8' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='301.9' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='308.0' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='314.1' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='320.2' y='1.18' width='2' height='21.65' rx='1'/%3E%3Crect x='326.3' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='332.4' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='338.5' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='344.6' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='350.7' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='356.8' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='362.9' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='369.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='375.1' y='2.45' width='2' height='19.09' rx='1'/%3E%3Crect x='381.2' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='387.3' y='1.20' width='2' height='21.60' rx='1'/%3E%3Crect x='393.4' y='4.44' width='2' height='15.12' rx='1'/%3E%3Crect x='399.5' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='405.6' y='4.12' width='2' height='15.77' rx='1'/%3E%3Crect x='411.7' y='3.48' width='2' height='17.03' rx='1'/%3E%3Crect x='417.8' y='2.65' width='2' height='18.69' rx='1'/%3E%3Crect x='423.9' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='430.0' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='436.1' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='442.2' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='448.3' y='3.30' width='2' height='17.40' rx='1'/%3E%3Crect x='454.4' y='3.61' width='2' height='16.77' rx='1'/%3E%3Crect x='460.5' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='466.6' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='472.7' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='478.8' y='3.11' width='2' height='17.78' rx='1'/%3E%3Crect x='484.9' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='491.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='497.1' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='503.2' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='509.3' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='515.4' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='521.5' y='9.00' width='2' height='6.00' rx='1'/%3E%3Crect x='527.6' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='533.7' y='9.50' width='2' height='5.00' rx='1'/%3E%3Crect x='539.8' y='3.45' width='2' height='17.09' rx='1'/%3E%3Crect x='545.9' y='10.00' width='2' height='4.00' rx='1'/%3E%3C/svg%3E"); }
+.vopt-wave--travis { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='560' height='24' viewBox='0 0 560 24' fill='%23e8853a'%3E%3Crect x='5.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='17.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='29.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='41.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='53.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='65.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='77.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='89.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='101.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='113.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='125.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='137.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='149.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='161.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='173.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='185.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='197.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='209.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='221.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='233.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='245.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='257.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='269.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='281.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='293.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='305.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='317.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='329.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='341.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='353.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='365.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='377.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='389.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='401.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='413.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='425.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='437.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='449.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='461.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='473.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='485.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='497.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='509.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='521.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3Crect x='533.0' y='3.50' width='2' height='17.00' rx='1'/%3E%3Crect x='545.0' y='8.50' width='2' height='7.00' rx='1'/%3E%3C/svg%3E"); }
+.vopt-wave--chords { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='560' height='24' viewBox='0 0 560 24' fill='%23e8853a'%3E%3Crect x='8.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='15.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='22.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='41.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='48.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='55.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='74.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='81.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='88.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='107.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='114.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='121.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='140.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='147.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='154.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='173.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='180.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='187.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='206.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='213.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='220.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='239.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='246.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='253.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='272.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='279.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='286.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='305.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='312.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='319.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='338.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='345.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='352.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='371.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='378.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='385.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='404.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='411.0' y='4.00' width='2' height='16.00' rx='1'/%3E%3Crect x='418.0' y='6.50' width='2' height='11.00' rx='1'/%3E%3C/svg%3E"); }
+.vopt-wave--outside { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='560' height='24' viewBox='0 0 560 24' fill='%23e8853a'%3E%3Crect x='4.0' y='8.70' width='2' height='6.59' rx='1'/%3E%3Crect x='15.4' y='3.43' width='2' height='17.14' rx='1'/%3E%3Crect x='26.8' y='3.49' width='2' height='17.03' rx='1'/%3E%3Crect x='38.2' y='9.85' width='2' height='4.30' rx='1'/%3E%3Crect x='49.6' y='3.65' width='2' height='16.70' rx='1'/%3E%3Crect x='61.0' y='6.69' width='2' height='10.61' rx='1'/%3E%3Crect x='72.4' y='9.11' width='2' height='5.79' rx='1'/%3E%3Crect x='83.8' y='6.21' width='2' height='11.58' rx='1'/%3E%3Crect x='95.2' y='8.41' width='2' height='7.17' rx='1'/%3E%3Crect x='106.6' y='9.81' width='2' height='4.37' rx='1'/%3E%3Crect x='118.0' y='8.84' width='2' height='6.32' rx='1'/%3E%3Crect x='129.4' y='9.53' width='2' height='4.94' rx='1'/%3E%3Crect x='140.8' y='6.74' width='2' height='10.53' rx='1'/%3E%3Crect x='152.2' y='7.67' width='2' height='8.65' rx='1'/%3E%3Crect x='163.6' y='8.51' width='2' height='6.98' rx='1'/%3E%3Crect x='175.0' y='4.09' width='2' height='15.82' rx='1'/%3E%3Crect x='186.4' y='7.28' width='2' height='9.44' rx='1'/%3E%3Crect x='197.8' y='8.74' width='2' height='6.51' rx='1'/%3E%3Crect x='209.2' y='8.19' width='2' height='7.63' rx='1'/%3E%3Crect x='220.6' y='6.82' width='2' height='10.36' rx='1'/%3E%3Crect x='232.0' y='9.02' width='2' height='5.95' rx='1'/%3E%3Crect x='243.4' y='7.90' width='2' height='8.20' rx='1'/%3E%3Crect x='254.8' y='7.08' width='2' height='9.84' rx='1'/%3E%3Crect x='266.2' y='3.66' width='2' height='16.67' rx='1'/%3E%3Crect x='277.6' y='6.97' width='2' height='10.06' rx='1'/%3E%3Crect x='289.0' y='3.16' width='2' height='17.67' rx='1'/%3E%3Crect x='300.4' y='6.94' width='2' height='10.12' rx='1'/%3E%3Crect x='311.8' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='323.2' y='7.22' width='2' height='9.56' rx='1'/%3E%3Crect x='334.6' y='7.68' width='2' height='8.64' rx='1'/%3E%3Crect x='346.0' y='0.50' width='2' height='23.00' rx='1'/%3E%3Crect x='357.4' y='8.10' width='2' height='7.79' rx='1'/%3E%3Crect x='368.8' y='9.76' width='2' height='4.49' rx='1'/%3E%3Crect x='380.2' y='7.41' width='2' height='9.18' rx='1'/%3E%3Crect x='391.6' y='6.71' width='2' height='10.58' rx='1'/%3E%3Crect x='403.0' y='8.46' width='2' height='7.09' rx='1'/%3E%3Crect x='414.4' y='9.91' width='2' height='4.18' rx='1'/%3E%3Crect x='425.8' y='4.38' width='2' height='15.24' rx='1'/%3E%3Crect x='437.2' y='6.93' width='2' height='10.15' rx='1'/%3E%3Crect x='448.6' y='9.01' width='2' height='5.98' rx='1'/%3E%3Crect x='460.0' y='3.60' width='2' height='16.80' rx='1'/%3E%3Crect x='471.4' y='7.80' width='2' height='8.40' rx='1'/%3E%3Crect x='482.8' y='6.72' width='2' height='10.55' rx='1'/%3E%3Crect x='494.2' y='8.89' width='2' height='6.23' rx='1'/%3E%3Crect x='505.6' y='8.56' width='2' height='6.87' rx='1'/%3E%3Crect x='517.0' y='6.17' width='2' height='11.66' rx='1'/%3E%3Crect x='528.4' y='9.30' width='2' height='5.41' rx='1'/%3E%3Crect x='539.8' y='9.07' width='2' height='5.87' rx='1'/%3E%3C/svg%3E"); }
+.vopt-wave--tone { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='560' height='24' viewBox='0 0 560 24' fill='%23e8853a'%3E%3Crect x='4.0' y='7.25' width='2' height='9.50' rx='1'/%3E%3Crect x='11.9' y='6.48' width='2' height='11.04' rx='1'/%3E%3Crect x='19.8' y='5.80' width='2' height='12.39' rx='1'/%3E%3Crect x='27.7' y='5.30' width='2' height='13.41' rx='1'/%3E%3Crect x='35.6' y='5.01' width='2' height='13.98' rx='1'/%3E%3Crect x='43.5' y='4.95' width='2' height='14.09' rx='1'/%3E%3Crect x='51.4' y='5.11' width='2' height='13.78' rx='1'/%3E%3Crect x='59.3' y='5.43' width='2' height='13.14' rx='1'/%3E%3Crect x='67.2' y='5.83' width='2' height='12.34' rx='1'/%3E%3Crect x='75.1' y='6.24' width='2' height='11.51' rx='1'/%3E%3Crect x='83.0' y='6.59' width='2' height='10.81' rx='1'/%3E%3Crect x='90.9' y='6.83' width='2' height='10.33' rx='1'/%3E%3Crect x='98.8' y='6.94' width='2' height='10.11' rx='1'/%3E%3Crect x='106.7' y='6.94' width='2' height='10.12' rx='1'/%3E%3Crect x='114.6' y='6.86' width='2' height='10.28' rx='1'/%3E%3Crect x='122.5' y='6.77' width='2' height='10.47' rx='1'/%3E%3Crect x='130.4' y='6.73' width='2' height='10.54' rx='1'/%3E%3Crect x='138.3' y='6.80' width='2' height='10.40' rx='1'/%3E%3Crect x='146.2' y='7.02' width='2' height='9.95' rx='1'/%3E%3Crect x='154.1' y='7.40' width='2' height='9.20' rx='1'/%3E%3Crect x='162.0' y='7.91' width='2' height='8.18' rx='1'/%3E%3Crect x='169.9' y='8.49' width='2' height='7.03' rx='1'/%3E%3Crect x='177.8' y='9.06' width='2' height='5.89' rx='1'/%3E%3Crect x='185.7' y='9.53' width='2' height='4.93' rx='1'/%3E%3Crect x='193.6' y='9.84' width='2' height='4.32' rx='1'/%3E%3Crect x='201.5' y='9.92' width='2' height='4.16' rx='1'/%3E%3Crect x='209.4' y='9.75' width='2' height='4.50' rx='1'/%3E%3Crect x='217.3' y='9.34' width='2' height='5.32' rx='1'/%3E%3Crect x='225.2' y='8.74' width='2' height='6.53' rx='1'/%3E%3Crect x='233.1' y='8.02' width='2' height='7.96' rx='1'/%3E%3Crect x='241.0' y='7.28' width='2' height='9.44' rx='1'/%3E%3Crect x='248.9' y='6.60' width='2' height='10.79' rx='1'/%3E%3Crect x='256.8' y='6.07' width='2' height='11.86' rx='1'/%3E%3Crect x='264.7' y='5.73' width='2' height='12.55' rx='1'/%3E%3Crect x='272.6' y='5.59' width='2' height='12.83' rx='1'/%3E%3Crect x='280.5' y='5.63' width='2' height='12.74' rx='1'/%3E%3Crect x='288.4' y='5.81' width='2' height='12.39' rx='1'/%3E%3Crect x='296.3' y='6.05' width='2' height='11.91' rx='1'/%3E%3Crect x='304.2' y='6.28' width='2' height='11.43' rx='1'/%3E%3Crect x='312.1' y='6.45' width='2' height='11.10' rx='1'/%3E%3Crect x='320.0' y='6.51' width='2' height='10.98' rx='1'/%3E%3Crect x='327.9' y='6.46' width='2' height='11.08' rx='1'/%3E%3Crect x='335.8' y='6.31' width='2' height='11.38' rx='1'/%3E%3Crect x='343.7' y='6.12' width='2' height='11.76' rx='1'/%3E%3Crect x='351.6' y='5.95' width='2' height='12.10' rx='1'/%3E%3Crect x='359.5' y='5.87' width='2' height='12.25' rx='1'/%3E%3Crect x='367.4' y='5.95' width='2' height='12.11' rx='1'/%3E%3Crect x='375.3' y='6.21' width='2' height='11.59' rx='1'/%3E%3Crect x='383.2' y='6.65' width='2' height='10.69' rx='1'/%3E%3Crect x='391.1' y='7.26' width='2' height='9.49' rx='1'/%3E%3Crect x='399.0' y='7.95' width='2' height='8.09' rx='1'/%3E%3Crect x='406.9' y='8.66' width='2' height='6.69' rx='1'/%3E%3Crect x='414.8' y='9.28' width='2' height='5.44' rx='1'/%3E%3Crect x='422.7' y='9.73' width='2' height='4.53' rx='1'/%3E%3Crect x='430.6' y='9.96' width='2' height='4.07' rx='1'/%3E%3Crect x='438.5' y='9.94' width='2' height='4.12' rx='1'/%3E%3Crect x='446.4' y='9.67' width='2' height='4.66' rx='1'/%3E%3Crect x='454.3' y='9.20' width='2' height='5.60' rx='1'/%3E%3Crect x='462.2' y='8.61' width='2' height='6.79' rx='1'/%3E%3Crect x='470.1' y='7.97' width='2' height='8.07' rx='1'/%3E%3Crect x='478.0' y='7.37' width='2' height='9.25' rx='1'/%3E%3Crect x='485.9' y='6.89' width='2' height='10.21' rx='1'/%3E%3Crect x='493.8' y='6.57' width='2' height='10.86' rx='1'/%3E%3Crect x='501.7' y='6.42' width='2' height='11.16' rx='1'/%3E%3Crect x='509.6' y='6.41' width='2' height='11.18' rx='1'/%3E%3Crect x='517.5' y='6.50' width='2' height='11.00' rx='1'/%3E%3Crect x='525.4' y='6.62' width='2' height='10.75' rx='1'/%3E%3Crect x='533.3' y='6.71' width='2' height='10.58' rx='1'/%3E%3Crect x='541.2' y='6.71' width='2' height='10.58' rx='1'/%3E%3Crect x='549.1' y='6.59' width='2' height='10.83' rx='1'/%3E%3C/svg%3E"); }
+.vopt-wave--blues { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='560' height='24' viewBox='0 0 560 24' fill='%23e8853a'%3E%3Crect x='4.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='13.2' y='9.37' width='2' height='5.27' rx='1'/%3E%3Crect x='22.4' y='8.36' width='2' height='7.28' rx='1'/%3E%3Crect x='31.6' y='7.19' width='2' height='9.63' rx='1'/%3E%3Crect x='40.8' y='5.96' width='2' height='12.08' rx='1'/%3E%3Crect x='50.0' y='4.77' width='2' height='14.46' rx='1'/%3E%3Crect x='59.2' y='3.68' width='2' height='16.64' rx='1'/%3E%3Crect x='68.4' y='2.77' width='2' height='18.46' rx='1'/%3E%3Crect x='77.6' y='2.08' width='2' height='19.85' rx='1'/%3E%3Crect x='86.8' y='1.65' width='2' height='20.71' rx='1'/%3E%3Crect x='96.0' y='1.50' width='2' height='21.00' rx='1'/%3E%3Crect x='105.2' y='1.65' width='2' height='20.71' rx='1'/%3E%3Crect x='114.4' y='2.08' width='2' height='19.85' rx='1'/%3E%3Crect x='123.6' y='2.77' width='2' height='18.46' rx='1'/%3E%3Crect x='132.8' y='3.68' width='2' height='16.64' rx='1'/%3E%3Crect x='142.0' y='4.77' width='2' height='14.46' rx='1'/%3E%3Crect x='151.2' y='5.96' width='2' height='12.08' rx='1'/%3E%3Crect x='160.4' y='7.19' width='2' height='9.63' rx='1'/%3E%3Crect x='169.6' y='8.36' width='2' height='7.28' rx='1'/%3E%3Crect x='178.8' y='9.37' width='2' height='5.27' rx='1'/%3E%3Crect x='188.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='197.2' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='206.4' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='215.6' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='224.8' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='234.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='243.2' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='252.4' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='261.6' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='270.8' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='280.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='289.2' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='298.4' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='307.6' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='316.8' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='326.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='335.2' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='344.4' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='353.6' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='362.8' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='372.0' y='10.00' width='2' height='4.00' rx='1'/%3E%3Crect x='381.2' y='9.37' width='2' height='5.27' rx='1'/%3E%3Crect x='390.4' y='8.36' width='2' height='7.28' rx='1'/%3E%3Crect x='399.6' y='7.19' width='2' height='9.63' rx='1'/%3E%3Crect x='408.8' y='5.96' width='2' height='12.08' rx='1'/%3E%3Crect x='418.0' y='4.77' width='2' height='14.46' rx='1'/%3E%3Crect x='427.2' y='3.68' width='2' height='16.64' rx='1'/%3E%3Crect x='436.4' y='2.77' width='2' height='18.46' rx='1'/%3E%3Crect x='445.6' y='2.08' width='2' height='19.85' rx='1'/%3E%3Crect x='454.8' y='1.65' width='2' height='20.71' rx='1'/%3E%3Crect x='464.0' y='1.50' width='2' height='21.00' rx='1'/%3E%3Crect x='473.2' y='1.65' width='2' height='20.71' rx='1'/%3E%3Crect x='482.4' y='2.08' width='2' height='19.85' rx='1'/%3E%3Crect x='491.6' y='2.77' width='2' height='18.46' rx='1'/%3E%3Crect x='500.8' y='3.68' width='2' height='16.64' rx='1'/%3E%3Crect x='510.0' y='4.77' width='2' height='14.46' rx='1'/%3E%3Crect x='519.2' y='5.96' width='2' height='12.08' rx='1'/%3E%3Crect x='528.4' y='7.19' width='2' height='9.63' rx='1'/%3E%3Crect x='537.6' y='8.36' width='2' height='7.28' rx='1'/%3E%3Crect x='546.8' y='9.37' width='2' height='5.27' rx='1'/%3E%3C/svg%3E"); }
+.vopt-wave--song { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='560' height='24' viewBox='0 0 560 24' fill='%23e8853a'%3E%3Crect x='6.0' y='4.88' width='2' height='14.25' rx='1'/%3E%3Crect x='13.0' y='5.75' width='2' height='12.49' rx='1'/%3E%3Crect x='20.0' y='5.43' width='2' height='13.13' rx='1'/%3E%3Crect x='27.0' y='4.88' width='2' height='14.24' rx='1'/%3E%3Crect x='34.0' y='7.46' width='2' height='9.08' rx='1'/%3E%3Crect x='41.0' y='5.96' width='2' height='12.09' rx='1'/%3E%3Crect x='48.0' y='4.88' width='2' height='14.24' rx='1'/%3E%3Crect x='55.0' y='5.01' width='2' height='13.98' rx='1'/%3E%3Crect x='82.0' y='7.84' width='2' height='8.32' rx='1'/%3E%3Crect x='89.0' y='5.74' width='2' height='12.52' rx='1'/%3E%3Crect x='96.0' y='5.96' width='2' height='12.08' rx='1'/%3E%3Crect x='103.0' y='6.58' width='2' height='10.83' rx='1'/%3E%3Crect x='110.0' y='7.64' width='2' height='8.73' rx='1'/%3E%3Crect x='117.0' y='5.33' width='2' height='13.34' rx='1'/%3E%3Crect x='124.0' y='5.27' width='2' height='13.46' rx='1'/%3E%3Crect x='131.0' y='6.45' width='2' height='11.10' rx='1'/%3E%3Crect x='158.0' y='4.67' width='2' height='14.67' rx='1'/%3E%3Crect x='165.0' y='7.94' width='2' height='8.12' rx='1'/%3E%3Crect x='172.0' y='8.41' width='2' height='7.19' rx='1'/%3E%3Crect x='179.0' y='4.51' width='2' height='14.99' rx='1'/%3E%3Crect x='186.0' y='7.76' width='2' height='8.47' rx='1'/%3E%3Crect x='193.0' y='8.02' width='2' height='7.96' rx='1'/%3E%3Crect x='200.0' y='5.89' width='2' height='12.21' rx='1'/%3E%3Crect x='207.0' y='7.12' width='2' height='9.77' rx='1'/%3E%3Crect x='234.0' y='4.80' width='2' height='14.40' rx='1'/%3E%3Crect x='241.0' y='4.71' width='2' height='14.59' rx='1'/%3E%3Crect x='248.0' y='4.93' width='2' height='14.14' rx='1'/%3E%3Crect x='255.0' y='8.17' width='2' height='7.67' rx='1'/%3E%3Crect x='262.0' y='6.13' width='2' height='11.74' rx='1'/%3E%3Crect x='269.0' y='6.81' width='2' height='10.39' rx='1'/%3E%3Crect x='276.0' y='6.38' width='2' height='11.24' rx='1'/%3E%3Crect x='283.0' y='7.98' width='2' height='8.04' rx='1'/%3E%3Crect x='68.0' y='2' width='1.6' height='20' rx='0.8' fill-opacity='0.55'/%3E%3Crect x='144.0' y='2' width='1.6' height='20' rx='0.8' fill-opacity='0.55'/%3E%3Crect x='220.0' y='2' width='1.6' height='20' rx='0.8' fill-opacity='0.55'/%3E%3C/svg%3E"); }
+.vopt-wave--clinic { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='560' height='24' viewBox='0 0 560 24' fill='%23e8853a'%3E%3Crect x='4.0' y='7.08' width='2' height='9.84' rx='1'/%3E%3Crect x='10.0' y='5.09' width='2' height='13.82' rx='1'/%3E%3Crect x='16.0' y='2.43' width='2' height='19.14' rx='1'/%3E%3Crect x='22.0' y='3.19' width='2' height='17.63' rx='1'/%3E%3Crect x='28.0' y='1.53' width='2' height='20.95' rx='1'/%3E%3Crect x='34.0' y='3.33' width='2' height='17.34' rx='1'/%3E%3Crect x='40.0' y='4.80' width='2' height='14.39' rx='1'/%3E%3Crect x='46.0' y='7.64' width='2' height='8.73' rx='1'/%3E%3Crect x='56.0' y='7.86' width='2' height='8.28' rx='1'/%3E%3Crect x='62.0' y='6.43' width='2' height='11.15' rx='1'/%3E%3Crect x='68.0' y='6.76' width='2' height='10.48' rx='1'/%3E%3Crect x='74.0' y='6.09' width='2' height='11.83' rx='1'/%3E%3Crect x='80.0' y='7.75' width='2' height='8.50' rx='1'/%3E%3Crect x='90.0' y='7.60' width='2' height='8.79' rx='1'/%3E%3Crect x='96.0' y='5.18' width='2' height='13.64' rx='1'/%3E%3Crect x='102.0' y='5.08' width='2' height='13.84' rx='1'/%3E%3Crect x='108.0' y='4.47' width='2' height='15.06' rx='1'/%3E%3Crect x='114.0' y='2.50' width='2' height='19.00' rx='1'/%3E%3Crect x='120.0' y='3.98' width='2' height='16.04' rx='1'/%3E%3Crect x='126.0' y='5.26' width='2' height='13.48' rx='1'/%3E%3Crect x='132.0' y='7.84' width='2' height='8.31' rx='1'/%3E%3Crect x='142.0' y='6.83' width='2' height='10.35' rx='1'/%3E%3Crect x='148.0' y='4.76' width='2' height='14.47' rx='1'/%3E%3Crect x='154.0' y='3.61' width='2' height='16.79' rx='1'/%3E%3Crect x='160.0' y='4.84' width='2' height='14.32' rx='1'/%3E%3Crect x='166.0' y='7.21' width='2' height='9.57' rx='1'/%3E%3Crect x='176.0' y='9.02' width='2' height='5.97' rx='1'/%3E%3Crect x='182.0' y='7.74' width='2' height='8.51' rx='1'/%3E%3Crect x='188.0' y='7.10' width='2' height='9.81' rx='1'/%3E%3Crect x='194.0' y='7.10' width='2' height='9.80' rx='1'/%3E%3Crect x='200.0' y='6.13' width='2' height='11.74' rx='1'/%3E%3Crect x='206.0' y='6.74' width='2' height='10.52' rx='1'/%3E%3Crect x='212.0' y='7.00' width='2' height='9.99' rx='1'/%3E%3Crect x='218.0' y='7.32' width='2' height='9.35' rx='1'/%3E%3Crect x='224.0' y='8.25' width='2' height='7.50' rx='1'/%3E%3Crect x='230.0' y='9.11' width='2' height='5.79' rx='1'/%3E%3Crect x='240.0' y='7.44' width='2' height='9.12' rx='1'/%3E%3Crect x='246.0' y='6.17' width='2' height='11.66' rx='1'/%3E%3Crect x='252.0' y='4.77' width='2' height='14.45' rx='1'/%3E%3Crect x='258.0' y='6.27' width='2' height='11.46' rx='1'/%3E%3Crect x='264.0' y='8.10' width='2' height='7.80' rx='1'/%3E%3Crect x='274.0' y='8.18' width='2' height='7.63' rx='1'/%3E%3Crect x='280.0' y='6.55' width='2' height='10.91' rx='1'/%3E%3Crect x='286.0' y='5.71' width='2' height='12.57' rx='1'/%3E%3Crect x='292.0' y='3.97' width='2' height='16.05' rx='1'/%3E%3Crect x='298.0' y='2.22' width='2' height='19.57' rx='1'/%3E%3Crect x='304.0' y='4.10' width='2' height='15.80' rx='1'/%3E%3Crect x='310.0' y='3.32' width='2' height='17.36' rx='1'/%3E%3Crect x='316.0' y='5.72' width='2' height='12.56' rx='1'/%3E%3Crect x='322.0' y='6.35' width='2' height='11.31' rx='1'/%3E%3Crect x='328.0' y='8.08' width='2' height='7.84' rx='1'/%3E%3Crect x='338.0' y='7.47' width='2' height='9.06' rx='1'/%3E%3Crect x='344.0' y='4.68' width='2' height='14.65' rx='1'/%3E%3Crect x='350.0' y='5.06' width='2' height='13.88' rx='1'/%3E%3Crect x='356.0' y='4.83' width='2' height='14.34' rx='1'/%3E%3Crect x='362.0' y='7.54' width='2' height='8.91' rx='1'/%3E%3Crect x='372.0' y='8.08' width='2' height='7.84' rx='1'/%3E%3Crect x='378.0' y='6.56' width='2' height='10.88' rx='1'/%3E%3Crect x='384.0' y='6.49' width='2' height='11.03' rx='1'/%3E%3Crect x='390.0' y='6.54' width='2' height='10.93' rx='1'/%3E%3Crect x='396.0' y='8.59' width='2' height='6.83' rx='1'/%3E%3Crect x='406.0' y='8.13' width='2' height='7.74' rx='1'/%3E%3Crect x='412.0' y='7.07' width='2' height='9.87' rx='1'/%3E%3Crect x='418.0' y='5.72' width='2' height='12.56' rx='1'/%3E%3Crect x='424.0' y='4.24' width='2' height='15.53' rx='1'/%3E%3Crect x='430.0' y='4.70' width='2' height='14.59' rx='1'/%3E%3Crect x='436.0' y='3.35' width='2' height='17.31' rx='1'/%3E%3Crect x='442.0' y='3.43' width='2' height='17.14' rx='1'/%3E%3Crect x='448.0' y='5.31' width='2' height='13.39' rx='1'/%3E%3Crect x='454.0' y='7.03' width='2' height='9.95' rx='1'/%3E%3Crect x='460.0' y='8.36' width='2' height='7.27' rx='1'/%3E%3Crect x='470.0' y='6.37' width='2' height='11.26' rx='1'/%3E%3Crect x='476.0' y='3.95' width='2' height='16.10' rx='1'/%3E%3Crect x='482.0' y='2.85' width='2' height='18.29' rx='1'/%3E%3Crect x='488.0' y='6.22' width='2' height='11.56' rx='1'/%3E%3Crect x='498.0' y='8.42' width='2' height='7.16' rx='1'/%3E%3Crect x='504.0' y='7.29' width='2' height='9.42' rx='1'/%3E%3Crect x='510.0' y='6.33' width='2' height='11.34' rx='1'/%3E%3Crect x='516.0' y='4.93' width='2' height='14.15' rx='1'/%3E%3Crect x='522.0' y='4.26' width='2' height='15.47' rx='1'/%3E%3Crect x='528.0' y='5.33' width='2' height='13.35' rx='1'/%3E%3Crect x='534.0' y='4.89' width='2' height='14.21' rx='1'/%3E%3Crect x='540.0' y='5.87' width='2' height='12.27' rx='1'/%3E%3Crect x='546.0' y='6.91' width='2' height='10.19' rx='1'/%3E%3Crect x='552.0' y='8.55' width='2' height='6.91' rx='1'/%3E%3C/svg%3E"); }
+
+.vopt-card-body { padding: 16px 15px 17px; }
+
+.vopt-card-title {
+ margin: 0 0 8px;
+ font-size: 13px;
+ font-weight: 700;
+ line-height: 1.25;
+ letter-spacing: 0.02em;
+ text-transform: uppercase;
+ color: var(--vopt-head);
+}
+
+.vopt-card-desc {
+ margin: 0;
+ font-size: 12px;
+ line-height: 1.6;
+ color: #9a9080;
+}
+
+/* PDF callout — supportive, sealed reference notes */
+.vopt-pdf {
+ display: flex;
+ align-items: center;
+ gap: 18px;
+ margin-top: 26px;
+ background: linear-gradient(160deg, #1a130b, #140e07);
+ border: 1px solid #38240f;
+ border-left: 3px solid var(--vopt-accent);
+ border-radius: 14px;
+ padding: 20px 22px;
+}
+
+.vopt-pdf-badge {
+ flex: 0 0 auto;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 56px;
+ height: 56px;
+ border-radius: 12px;
+ background: rgba(200, 96, 26, 0.1);
+ border: 1px solid #3a2410;
+}
+
+.vopt-pdf-badge .vopt-emblem svg { width: 36px; height: 36px; }
+
+.vopt-pdf-kicker {
+ margin: 0 0 3px;
+ font-size: 9px;
+ font-weight: 700;
+ letter-spacing: 0.22em;
+ text-transform: uppercase;
+ color: var(--vopt-accent-bright);
+}
+
+.vopt-pdf-title {
+ margin: 0 0 5px;
+ font-size: 14px;
+ font-weight: 700;
+ letter-spacing: 0.02em;
+ text-transform: uppercase;
+ color: var(--vopt-text);
+}
+
+.vopt-pdf-desc {
+ margin: 0;
+ font-size: 12px;
+ line-height: 1.6;
+ color: var(--vopt-muted);
+}
+
+/* ===========================================================
+ 6. CTA repeat block — wide and dramatic
+ =========================================================== */
+.vopt-cta-section { padding-block: 48px; }
+
+.vopt-cta-block {
+ position: relative;
+ border: 1px solid #3a2712;
+ border-radius: 18px;
+ padding: 48px 32px;
+ text-align: center;
+ overflow: hidden;
+ background:
+ radial-gradient(700px 260px at 50% -10%, rgba(200, 96, 26, 0.16), transparent 70%),
+ linear-gradient(180deg, #1b1b1b, #141414);
+ box-shadow: 0 0 0 1px rgba(200, 96, 26, 0.1), 0 26px 60px rgba(0, 0, 0, 0.45);
+}
+
+.vopt-cta-h {
+ margin: 0 auto;
+ max-width: 760px;
+ font-family: var(--vopt-display);
+ font-weight: 400;
+ font-size: clamp(32px, 4.4vw, 50px);
+ line-height: 0.98;
+ letter-spacing: 0.01em;
+ text-transform: uppercase;
+ color: var(--vopt-head);
+}
+
+.vopt-cta-sub {
+ margin: 14px auto 26px;
+ max-width: 520px;
+ font-size: 15px;
+ color: var(--vopt-muted);
+}
+
+.vopt-cta-block .vopt-btn { max-width: 480px; margin: 0 auto; }
+
+.vopt-cta-consent {
+ margin: 16px 0 0;
+ font-size: 11px;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+ color: var(--vopt-dim);
+}
+
+/* ===========================================================
+ 7. FAQ
+ =========================================================== */
+.vopt-faq { padding-block: 56px; }
+.vopt-faq-h { font-size: 40px; }
+.vopt-faq-list { margin-top: 26px; max-width: 920px; }
+
+.vopt-faq-item {
+ border-top: 1px solid #232323;
+ padding: 20px 0;
+}
+
+.vopt-faq-q {
+ display: flex;
+ align-items: flex-start;
+ gap: 12px;
+ margin: 0;
+ font-size: 16px;
+ font-weight: 700;
+ line-height: 1.4;
+ color: var(--vopt-head);
+}
+
+.vopt-faq-q i { color: var(--vopt-accent-bright); font-size: 18px; flex: 0 0 auto; line-height: 1.4; }
+
+.vopt-faq-a {
+ margin: 10px 0 0 30px;
+ max-width: 760px;
+ font-size: 14px;
+ line-height: 1.7;
+ color: var(--vopt-muted);
+}
+
+/* ===========================================================
+ 8. P.S.
+ =========================================================== */
+.vopt-ps-wrap { padding-block: 8px; }
+
+.vopt-ps {
+ position: relative;
+ background: linear-gradient(180deg, #161616, #131313);
+ border: 1px solid #242424;
+ border-radius: 16px;
+ padding: 30px 30px;
+ margin: 28px 0;
+}
+
+.vopt-ps-label {
+ margin: 0 0 8px;
+ font-size: 10px;
+ font-weight: 600;
+ letter-spacing: 0.2em;
+ text-transform: uppercase;
+ color: var(--vopt-accent-bright);
+}
+
+.vopt-ps-body {
+ max-width: 880px;
+ font-size: 14px;
+ line-height: 1.8;
+ color: #8a8076;
+}
+
+.vopt-ps-body p { margin: 0; }
+.vopt-ps-body p + p { margin-top: 10px; }
+.vopt-ps-body strong { color: #d8cfc0; font-weight: 600; }
+
+/* ===========================================================
+ 9. Final CTA
+ =========================================================== */
+.vopt-final { padding-block: 36px 60px; text-align: center; }
+.vopt-final .vopt-btn { max-width: 540px; margin: 0 auto; }
+
+.vopt-final-consent {
+ margin: 16px 0 0;
+ text-align: center;
+ font-size: 11px;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+ color: var(--vopt-dim);
+}
+
+/* ——— Klaviyo native form overrides (defensive, dark theme) ——— */
+.klaviyo-form input,
+.klaviyo-form input[type="text"],
+.klaviyo-form input[type="email"],
+.klaviyo-form input[type="tel"] {
+ background: #100f0e !important;
+ border: 1px solid #3a322a !important;
+ color: #e8e2d9 !important;
+ border-radius: 9px !important;
+ font-family: "Inter", sans-serif !important;
+ padding: 15px 16px !important;
+}
+
+.klaviyo-form button[type="submit"],
+.klaviyo-form button {
+ background: #c8601a !important;
+ color: #ffffff !important;
+ border: 0 !important;
+ border-radius: 40px !important;
+ font-family: "Bebas Neue", sans-serif !important;
+ text-transform: uppercase !important;
+}
+
+/* ===========================================================
+ Tablet
+ =========================================================== */
+@media (max-width: 900px) {
+ .vopt-hero-grid { grid-template-columns: 1fr; gap: 36px; }
+ .vopt-hero-visual { min-height: 360px; }
+ .vopt-hero-lead,
+ .vopt-hero-pain { max-width: none; }
+ .vopt-split { grid-template-columns: 1fr; }
+ .vopt-bridge-cols { grid-template-columns: 1fr; max-width: 520px; }
+ .vopt-bridge-arrow { justify-content: center; transform: rotate(90deg); }
+}
+
+/* ===========================================================
+ Mobile
+ =========================================================== */
+@media (max-width: 600px) {
+ .vopt-hero { padding-block: 40px 28px; }
+ .vopt-hero-cta .vopt-btn--inline { width: 100%; }
+ .vopt-hero-value { font-size: 22px; }
+ .vopt-hero-visual { min-height: 320px; }
+ .vopt-vault-tile { width: 190px; }
+ .vopt-vault-tile--back1 { left: 2%; }
+ .vopt-vault-tile--back2 { right: 2%; }
+
+ .vopt-h2 { font-size: 36px; }
+ .vopt-faq-h { font-size: 32px; }
+ .vopt-form-heading { font-size: 36px; }
+ .vopt-form-card { padding: 26px 20px; }
+
+ .vopt-letter-card { padding: 26px 20px; }
+ .vopt-letter-grid { grid-template-columns: 1fr; gap: 22px; justify-items: center; }
+ .vopt-letter-photo,
+ .vopt-letter-well { width: 100%; max-width: 260px; }
+ .vopt-letter-copy { max-width: none; }
+ .vopt-letter-lead { font-size: 36px; text-align: center; }
+
+ .vopt-grid { grid-template-columns: 1fr; }
+ .vopt-grid .vopt-card-item,
+ .vopt-grid .vopt-card-item[data-w="third"],
+ .vopt-grid .vopt-card-item[data-w="half"],
+ .vopt-grid .vopt-card-item[data-w="full"],
+ .vopt-card-item--wide { grid-column: auto; }
+
+ .vopt-letter,
+ .vopt-stash,
+ .vopt-faq,
+ .vopt-bridge,
+ .vopt-cta-section { padding-block: 34px; }
+
+ .vopt-cta-block { padding: 30px 18px; }
+ .vopt-ps { padding: 20px; }
+ .vopt-final { padding-block: 24px 44px; }
+ .vopt-ps { margin: 18px 0; }
+}
diff --git a/config/settings_data.json b/config/settings_data.json
index 0f7a06db992..7ef93306c4f 100644
--- a/config/settings_data.json
+++ b/config/settings_data.json
@@ -1,62 +1,262 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
{
- "current": "Default",
+ "current": {
+ "logo_width": 90,
+ "type_header_font": "assistant_n4",
+ "heading_scale": 100,
+ "type_body_font": "assistant_n4",
+ "body_scale": 100,
+ "page_width": 1200,
+ "spacing_sections": 0,
+ "spacing_grid_horizontal": 8,
+ "spacing_grid_vertical": 8,
+ "buttons_border_thickness": 2,
+ "buttons_border_opacity": 100,
+ "buttons_radius": 0,
+ "buttons_shadow_opacity": 0,
+ "buttons_shadow_horizontal_offset": 0,
+ "buttons_shadow_vertical_offset": 0,
+ "buttons_shadow_blur": 0,
+ "variant_pills_border_thickness": 1,
+ "variant_pills_border_opacity": 55,
+ "variant_pills_radius": 0,
+ "variant_pills_shadow_opacity": 0,
+ "variant_pills_shadow_horizontal_offset": 0,
+ "variant_pills_shadow_vertical_offset": 0,
+ "variant_pills_shadow_blur": 0,
+ "inputs_border_thickness": 1,
+ "inputs_border_opacity": 55,
+ "inputs_radius": 0,
+ "inputs_shadow_opacity": 0,
+ "inputs_shadow_horizontal_offset": 0,
+ "inputs_shadow_vertical_offset": 0,
+ "inputs_shadow_blur": 0,
+ "card_style": "standard",
+ "card_image_padding": 0,
+ "card_text_alignment": "left",
+ "card_color_scheme": "scheme-2",
+ "card_border_thickness": 1,
+ "card_border_opacity": 100,
+ "card_corner_radius": 0,
+ "card_shadow_opacity": 0,
+ "card_shadow_horizontal_offset": 0,
+ "card_shadow_vertical_offset": 0,
+ "card_shadow_blur": 0,
+ "collection_card_style": "standard",
+ "collection_card_image_padding": 0,
+ "collection_card_text_alignment": "left",
+ "collection_card_color_scheme": "scheme-2",
+ "collection_card_border_thickness": 1,
+ "collection_card_border_opacity": 100,
+ "collection_card_corner_radius": 0,
+ "collection_card_shadow_opacity": 0,
+ "collection_card_shadow_horizontal_offset": 0,
+ "collection_card_shadow_vertical_offset": 0,
+ "collection_card_shadow_blur": 0,
+ "blog_card_style": "standard",
+ "blog_card_image_padding": 0,
+ "blog_card_text_alignment": "left",
+ "blog_card_color_scheme": "scheme-2",
+ "blog_card_border_thickness": 1,
+ "blog_card_border_opacity": 100,
+ "blog_card_corner_radius": 0,
+ "blog_card_shadow_opacity": 0,
+ "blog_card_shadow_horizontal_offset": 0,
+ "blog_card_shadow_vertical_offset": 0,
+ "blog_card_shadow_blur": 0,
+ "text_boxes_border_thickness": 0,
+ "text_boxes_border_opacity": 10,
+ "text_boxes_radius": 0,
+ "text_boxes_shadow_opacity": 0,
+ "text_boxes_shadow_horizontal_offset": 0,
+ "text_boxes_shadow_vertical_offset": 0,
+ "text_boxes_shadow_blur": 0,
+ "media_border_thickness": 0,
+ "media_border_opacity": 0,
+ "media_radius": 0,
+ "media_shadow_opacity": 0,
+ "media_shadow_horizontal_offset": 0,
+ "media_shadow_vertical_offset": 0,
+ "media_shadow_blur": 0,
+ "popup_border_thickness": 1,
+ "popup_border_opacity": 10,
+ "popup_corner_radius": 0,
+ "popup_shadow_opacity": 5,
+ "popup_shadow_horizontal_offset": 0,
+ "popup_shadow_vertical_offset": 4,
+ "popup_shadow_blur": 5,
+ "drawer_border_thickness": 1,
+ "drawer_border_opacity": 10,
+ "drawer_shadow_opacity": 0,
+ "drawer_shadow_horizontal_offset": 0,
+ "drawer_shadow_vertical_offset": 0,
+ "drawer_shadow_blur": 0,
+ "badge_position": "bottom left",
+ "badge_corner_radius": 0,
+ "sale_badge_color_scheme": "scheme-4",
+ "sold_out_badge_color_scheme": "scheme-5",
+ "social_facebook_link": "",
+ "social_instagram_link": "",
+ "social_youtube_link": "",
+ "social_tiktok_link": "",
+ "social_twitter_link": "",
+ "social_snapchat_link": "",
+ "social_pinterest_link": "",
+ "social_tumblr_link": "",
+ "social_vimeo_link": "",
+ "predictive_search_enabled": true,
+ "predictive_search_show_vendor": false,
+ "predictive_search_show_price": true,
+ "currency_code_enabled": true,
+ "cart_type": "drawer",
+ "show_vendor": false,
+ "show_cart_note": false,
+ "cart_drawer_collection": "",
+ "sections": {
+ "main-password-header": {
+ "type": "main-password-header",
+ "settings": {
+ "color_scheme": "scheme-1"
+ }
+ },
+ "main-password-footer": {
+ "type": "main-password-footer",
+ "settings": {
+ "color_scheme": "scheme-1"
+ }
+ }
+ },
+ "content_for_index": [],
+ "blocks": {
+ "855628211100114053": {
+ "type": "shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507",
+ "disabled": false,
+ "settings": {}
+ }
+ },
+ "color_schemes": {
+ "scheme-1": {
+ "settings": {
+ "background": "#0D0D0D",
+ "background_gradient": "",
+ "text": "#E8E8E8",
+ "button": "#E8690A",
+ "button_label": "#FFFFFF",
+ "secondary_button_label": "#E8690A",
+ "shadow": "#000000"
+ }
+ },
+ "scheme-2": {
+ "settings": {
+ "background": "#141414",
+ "background_gradient": "",
+ "text": "#E8E8E8",
+ "button": "#E8690A",
+ "button_label": "#FFFFFF",
+ "secondary_button_label": "#E8690A",
+ "shadow": "#000000"
+ }
+ },
+ "scheme-3": {
+ "settings": {
+ "background": "#0D0D0D",
+ "background_gradient": "",
+ "text": "#FFFFFF",
+ "button": "#E8690A",
+ "button_label": "#FFFFFF",
+ "secondary_button_label": "#E8E8E8",
+ "shadow": "#000000"
+ }
+ },
+ "scheme-4": {
+ "settings": {
+ "background": "#E8690A",
+ "background_gradient": "",
+ "text": "#FFFFFF",
+ "button": "#0D0D0D",
+ "button_label": "#FFFFFF",
+ "secondary_button_label": "#FFFFFF",
+ "shadow": "#000000"
+ }
+ },
+ "scheme-5": {
+ "settings": {
+ "background": "#272727",
+ "background_gradient": "",
+ "text": "#E8E8E8",
+ "button": "#E8690A",
+ "button_label": "#FFFFFF",
+ "secondary_button_label": "#E8690A",
+ "shadow": "#000000"
+ }
+ }
+ }
+ },
"presets": {
"Default": {
"logo_width": 90,
"color_schemes": {
"scheme-1": {
"settings": {
- "background": "#FFFFFF",
+ "background": "#0D0D0D",
"background_gradient": "",
- "text": "#121212",
- "button": "#121212",
+ "text": "#E8E8E8",
+ "button": "#E8690A",
"button_label": "#FFFFFF",
- "secondary_button_label": "#121212",
- "shadow": "#121212"
+ "secondary_button_label": "#E8690A",
+ "shadow": "#000000"
}
},
"scheme-2": {
"settings": {
- "background": "#F3F3F3",
+ "background": "#141414",
"background_gradient": "",
- "text": "#121212",
- "button": "#121212",
- "button_label": "#F3F3F3",
- "secondary_button_label": "#121212",
- "shadow": "#121212"
+ "text": "#E8E8E8",
+ "button": "#E8690A",
+ "button_label": "#FFFFFF",
+ "secondary_button_label": "#E8690A",
+ "shadow": "#000000"
}
},
"scheme-3": {
"settings": {
- "background": "#242833",
+ "background": "#0D0D0D",
"background_gradient": "",
"text": "#FFFFFF",
- "button": "#FFFFFF",
- "button_label": "#000000",
- "secondary_button_label": "#FFFFFF",
- "shadow": "#121212"
+ "button": "#E8690A",
+ "button_label": "#FFFFFF",
+ "secondary_button_label": "#E8E8E8",
+ "shadow": "#000000"
}
},
"scheme-4": {
"settings": {
- "background": "#121212",
+ "background": "#E8690A",
"background_gradient": "",
"text": "#FFFFFF",
- "button": "#FFFFFF",
- "button_label": "#121212",
+ "button": "#0D0D0D",
+ "button_label": "#FFFFFF",
"secondary_button_label": "#FFFFFF",
- "shadow": "#121212"
+ "shadow": "#000000"
}
},
"scheme-5": {
"settings": {
- "background": "#334FB4",
+ "background": "#272727",
"background_gradient": "",
- "text": "#FFFFFF",
- "button": "#FFFFFF",
- "button_label": "#334FB4",
- "secondary_button_label": "#FFFFFF",
- "shadow": "#121212"
+ "text": "#E8E8E8",
+ "button": "#E8690A",
+ "button_label": "#FFFFFF",
+ "secondary_button_label": "#E8690A",
+ "shadow": "#000000"
}
}
},
@@ -68,74 +268,74 @@
"spacing_sections": 0,
"spacing_grid_horizontal": 8,
"spacing_grid_vertical": 8,
- "buttons_border_thickness": 1,
+ "buttons_border_thickness": 2,
"buttons_border_opacity": 100,
"buttons_radius": 0,
"buttons_shadow_opacity": 0,
"buttons_shadow_horizontal_offset": 0,
- "buttons_shadow_vertical_offset": 4,
- "buttons_shadow_blur": 5,
+ "buttons_shadow_vertical_offset": 0,
+ "buttons_shadow_blur": 0,
"variant_pills_border_thickness": 1,
"variant_pills_border_opacity": 55,
- "variant_pills_radius": 40,
+ "variant_pills_radius": 0,
"variant_pills_shadow_opacity": 0,
"variant_pills_shadow_horizontal_offset": 0,
- "variant_pills_shadow_vertical_offset": 4,
- "variant_pills_shadow_blur": 5,
+ "variant_pills_shadow_vertical_offset": 0,
+ "variant_pills_shadow_blur": 0,
"inputs_border_thickness": 1,
"inputs_border_opacity": 55,
"inputs_radius": 0,
"inputs_shadow_opacity": 0,
"inputs_shadow_horizontal_offset": 0,
- "inputs_shadow_vertical_offset": 4,
- "inputs_shadow_blur": 5,
+ "inputs_shadow_vertical_offset": 0,
+ "inputs_shadow_blur": 0,
"card_style": "standard",
"card_image_padding": 0,
"card_text_alignment": "left",
"card_color_scheme": "scheme-2",
- "card_border_thickness": 0,
- "card_border_opacity": 10,
+ "card_border_thickness": 1,
+ "card_border_opacity": 100,
"card_corner_radius": 0,
"card_shadow_opacity": 0,
"card_shadow_horizontal_offset": 0,
- "card_shadow_vertical_offset": 4,
- "card_shadow_blur": 5,
+ "card_shadow_vertical_offset": 0,
+ "card_shadow_blur": 0,
"collection_card_style": "standard",
"collection_card_image_padding": 0,
"collection_card_text_alignment": "left",
"collection_card_color_scheme": "scheme-2",
- "collection_card_border_thickness": 0,
- "collection_card_border_opacity": 10,
+ "collection_card_border_thickness": 1,
+ "collection_card_border_opacity": 100,
"collection_card_corner_radius": 0,
"collection_card_shadow_opacity": 0,
"collection_card_shadow_horizontal_offset": 0,
- "collection_card_shadow_vertical_offset": 4,
- "collection_card_shadow_blur": 5,
+ "collection_card_shadow_vertical_offset": 0,
+ "collection_card_shadow_blur": 0,
"blog_card_style": "standard",
"blog_card_image_padding": 0,
"blog_card_text_alignment": "left",
"blog_card_color_scheme": "scheme-2",
- "blog_card_border_thickness": 0,
- "blog_card_border_opacity": 10,
+ "blog_card_border_thickness": 1,
+ "blog_card_border_opacity": 100,
"blog_card_corner_radius": 0,
"blog_card_shadow_opacity": 0,
"blog_card_shadow_horizontal_offset": 0,
- "blog_card_shadow_vertical_offset": 4,
- "blog_card_shadow_blur": 5,
+ "blog_card_shadow_vertical_offset": 0,
+ "blog_card_shadow_blur": 0,
"text_boxes_border_thickness": 0,
"text_boxes_border_opacity": 10,
"text_boxes_radius": 0,
"text_boxes_shadow_opacity": 0,
"text_boxes_shadow_horizontal_offset": 0,
- "text_boxes_shadow_vertical_offset": 4,
- "text_boxes_shadow_blur": 5,
- "media_border_thickness": 1,
- "media_border_opacity": 5,
+ "text_boxes_shadow_vertical_offset": 0,
+ "text_boxes_shadow_blur": 0,
+ "media_border_thickness": 0,
+ "media_border_opacity": 0,
"media_radius": 0,
"media_shadow_opacity": 0,
"media_shadow_horizontal_offset": 0,
- "media_shadow_vertical_offset": 4,
- "media_shadow_blur": 5,
+ "media_shadow_vertical_offset": 0,
+ "media_shadow_blur": 0,
"popup_border_thickness": 1,
"popup_border_opacity": 10,
"popup_corner_radius": 0,
@@ -147,12 +347,12 @@
"drawer_border_opacity": 10,
"drawer_shadow_opacity": 0,
"drawer_shadow_horizontal_offset": 0,
- "drawer_shadow_vertical_offset": 4,
- "drawer_shadow_blur": 5,
+ "drawer_shadow_vertical_offset": 0,
+ "drawer_shadow_blur": 0,
"badge_position": "bottom left",
- "badge_corner_radius": 40,
- "sale_badge_color_scheme": "scheme-5",
- "sold_out_badge_color_scheme": "scheme-3",
+ "badge_corner_radius": 0,
+ "sale_badge_color_scheme": "scheme-4",
+ "sold_out_badge_color_scheme": "scheme-5",
"social_twitter_link": "",
"social_facebook_link": "",
"social_pinterest_link": "",
@@ -164,9 +364,9 @@
"social_vimeo_link": "",
"predictive_search_enabled": true,
"predictive_search_show_vendor": false,
- "predictive_search_show_price": false,
+ "predictive_search_show_price": true,
"currency_code_enabled": true,
- "cart_type": "notification",
+ "cart_type": "drawer",
"show_vendor": false,
"show_cart_note": false,
"cart_drawer_collection": "",
diff --git a/config/settings_schema.json b/config/settings_schema.json
index bcaab5b5d2a..82d4b3d3efc 100644
--- a/config/settings_schema.json
+++ b/config/settings_schema.json
@@ -1451,5 +1451,16 @@
"default": "scheme-1"
}
]
+ },
+ {
+ "name": "GK Tour Dates",
+ "settings": [
+ {
+ "type": "textarea",
+ "id": "gk_tour_dates_data",
+ "label": "Tour dates (one per line)",
+ "info": "Format: YYYY-MM-DD | Descriptor (optional) | Venue | City | State | Ticket URL (optional) | sold_out true/false (optional). Example: 2026-04-22 | support for Paul Gilbert | Barnato | Omaha | NE | https://tickets.com | false"
+ }
+ ]
}
]
diff --git a/layout/theme.liquid b/layout/theme.liquid
index 70db635823b..5e21f065207 100644
--- a/layout/theme.liquid
+++ b/layout/theme.liquid
@@ -15,6 +15,11 @@
{%- endunless -%}
+
+
+
+
+
{{ page_title }}
{%- if current_tags %} – tagged "{{ current_tags | join: ', ' }}"{% endif -%}
@@ -256,6 +261,7 @@
{% endstyle %}
{{ 'base.css' | asset_url | stylesheet_tag }}
+ {{ 'custom-greg-koch.css' | asset_url | stylesheet_tag }}
{%- if settings.cart_type == 'drawer' -%}
diff --git a/layout/vault-optin.liquid b/layout/vault-optin.liquid
new file mode 100644
index 00000000000..2ec175f89f1
--- /dev/null
+++ b/layout/vault-optin.liquid
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+ {%- if settings.favicon != blank -%}
+
+ {%- endif -%}
+
+ {{ page_title }}
+
+ {% render 'meta-tags' %}
+
+ {{ content_for_header }}
+
+ {%- comment -%} Fonts + icons + shared styles for the naked vault opt-in page {%- endcomment -%}
+
+
+
+
+ {{ 'vault-optin.css' | asset_url | stylesheet_tag }}
+
+ {%- comment -%}
+ Naked conversion layout. No Dawn header, footer, navigation, drawers or
+ page padding. The page chrome lives entirely inside the sections.
+ {%- endcomment -%}
+ {% style %}
+ *,
+ *::before,
+ *::after { box-sizing: border-box; }
+
+ html {
+ height: 100%;
+ -webkit-text-size-adjust: 100%;
+ }
+
+ body {
+ min-height: 100%;
+ margin: 0;
+ padding: 0;
+ background-color: #0d0d0d;
+ color: #e8e2d9;
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+
+ img { max-width: 100%; height: auto; display: block; }
+
+ a { color: inherit; }
+ {% endstyle %}
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
diff --git a/layout/vault.liquid b/layout/vault.liquid
new file mode 100644
index 00000000000..c6d21009b56
--- /dev/null
+++ b/layout/vault.liquid
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+ {%- if settings.favicon != blank -%}
+
+ {%- endif -%}
+
+
+
+
+
+ {{ page_title }} – {{ shop.name }}
+
+ {% render 'meta-tags' %}
+
+
+
+
+
+ {{ content_for_header }}
+
+ {%- liquid
+ assign body_font_bold = settings.type_body_font | font_modify: 'weight', 'bold'
+ assign body_font_italic = settings.type_body_font | font_modify: 'style', 'italic'
+ assign body_font_bold_italic = body_font_bold | font_modify: 'style', 'italic'
+ %}
+
+ {% style %}
+ {{ settings.type_body_font | font_face: font_display: 'swap' }}
+ {{ body_font_bold | font_face: font_display: 'swap' }}
+ {{ body_font_italic | font_face: font_display: 'swap' }}
+ {{ body_font_bold_italic | font_face: font_display: 'swap' }}
+ {{ settings.type_header_font | font_face: font_display: 'swap' }}
+
+ :root {
+ --font-body-family: {{ settings.type_body_font.family }}, {{ settings.type_body_font.fallback_families }};
+ --font-body-style: {{ settings.type_body_font.style }};
+ --font-body-weight: {{ settings.type_body_font.weight }};
+ --font-body-weight-bold: {{ settings.type_body_font.weight | plus: 300 | at_most: 1000 }};
+
+ --font-heading-family: {{ settings.type_header_font.family }}, {{ settings.type_header_font.fallback_families }};
+ --font-heading-style: {{ settings.type_header_font.style }};
+ --font-heading-weight: {{ settings.type_header_font.weight }};
+
+ --font-body-scale: {{ settings.body_scale | divided_by: 100.0 }};
+ --font-heading-scale: {{ settings.heading_scale | times: 1.0 | divided_by: settings.body_scale }};
+
+ --page-width: {{ settings.page_width | divided_by: 10 }}rem;
+
+ --buttons-radius: {{ settings.buttons_radius }}px;
+ --buttons-radius-outset: {% if settings.buttons_radius > 0 %}{{ settings.buttons_radius | plus: settings.buttons_border_thickness }}{% else %}0{% endif %}px;
+ --buttons-border-width: {% if settings.buttons_border_opacity > 0 %}{{ settings.buttons_border_thickness }}{% else %}0{% endif %}px;
+ --buttons-border-opacity: {{ settings.buttons_border_opacity | divided_by: 100.0 }};
+ --buttons-shadow-opacity: {{ settings.buttons_shadow_opacity | divided_by: 100.0 }};
+ --buttons-shadow-visible: {% if settings.buttons_shadow_opacity > 0 %}1{% else %}0{% endif %};
+ --buttons-shadow-horizontal-offset: {{ settings.buttons_shadow_horizontal_offset }}px;
+ --buttons-shadow-vertical-offset: {{ settings.buttons_shadow_vertical_offset }}px;
+ --buttons-shadow-blur-radius: {{ settings.buttons_shadow_blur }}px;
+ --buttons-border-offset: {% if settings.buttons_radius > 0 or settings.buttons_shadow_opacity > 0 %}0.3{% else %}0{% endif %}px;
+
+ --color-button: 232, 105, 10;
+ --color-button-text: 13, 13, 13;
+ --color-foreground: 232, 232, 232;
+ --color-background: 11, 9, 7;
+ }
+
+ *,
+ *::before,
+ *::after { box-sizing: inherit; }
+
+ html {
+ box-sizing: border-box;
+ font-size: calc(var(--font-body-scale) * 62.5%);
+ height: 100%;
+ }
+
+ body {
+ min-height: 100%;
+ margin: 0;
+ font-size: 1.6rem;
+ letter-spacing: 0.06rem;
+ line-height: calc(1 + 0.8 / var(--font-body-scale));
+ font-family: var(--font-body-family);
+ font-style: var(--font-body-style);
+ font-weight: var(--font-body-weight);
+ background-color: #0b0907;
+ color: rgb(var(--color-foreground));
+ }
+ {% endstyle %}
+
+ {{ 'base.css' | asset_url | stylesheet_tag }}
+ {{ 'gristle-vault.css' | asset_url | stylesheet_tag }}
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
diff --git a/sections/footer-group.json b/sections/footer-group.json
index a9263d9b541..dcfb84d669e 100644
--- a/sections/footer-group.json
+++ b/sections/footer-group.json
@@ -1,3 +1,12 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
{
"name": "t:sections.footer.name",
"type": "footer",
@@ -18,24 +27,17 @@
"heading": "Info",
"menu": "footer"
}
- },
- "footer-2": {
- "type": "text",
- "settings": {
- "heading": "Our mission",
- "subtext": "Share contact information, store details, and brand content with your customers.<\/p>"
- }
}
},
"block_order": [
"footer-0",
- "footer-1",
- "footer-2"
+ "footer-1"
],
"settings": {
"color_scheme": "scheme-1",
"newsletter_enable": true,
"newsletter_heading": "Subscribe to our emails",
+ "enable_follow_on_shop": true,
"show_social": true,
"enable_country_selector": false,
"enable_language_selector": false,
diff --git a/sections/gk-about-feature.liquid b/sections/gk-about-feature.liquid
new file mode 100644
index 00000000000..3ba5966c314
--- /dev/null
+++ b/sections/gk-about-feature.liquid
@@ -0,0 +1,365 @@
+{%- comment -%}
+ GK About Feature Section
+ - Old site layout: Title + large centered image + credit
+ - New site motion: depth slide image + staggered text reveal
+ - Self-contained CSS + JS, scoped to section.id
+{%- endcomment -%}
+
+{%- assign eyebrow = section.settings.eyebrow | strip -%}
+{%- assign subheading = section.settings.subheading | strip -%}
+{%- assign button_label = section.settings.button_label | strip -%}
+
+
+
+ {%- if eyebrow != blank and eyebrow != '.' -%}
+
{{ eyebrow }}
+ {%- endif -%}
+
+ {%- if section.settings.heading != blank -%}
+
{{ section.settings.heading }}
+ {%- endif -%}
+
+ {%- if section.settings.image != blank -%}
+
+
+ {%- liquid
+ assign img = section.settings.image
+ assign img_h = img.width | divided_by: img.aspect_ratio
+ -%}
+ {{
+ img
+ | image_url: width: 2400
+ | image_tag:
+ width: img.width,
+ height: img_h,
+ loading: 'lazy',
+ widths: '600, 900, 1200, 1600, 2000, 2400',
+ sizes: '(min-width: 990px) 1100px, (min-width: 750px) 90vw, 92vw',
+ class: 'gk-about__img'
+ }}
+
+
+ {%- if section.settings.photo_credit != blank and section.settings.photo_credit != '.' -%}
+
+ {{ section.settings.photo_credit }}
+
+ {%- endif -%}
+
+ {%- endif -%}
+
+
+ {%- if subheading != blank and subheading != '.' -%}
+
{{ subheading }}
+ {%- endif -%}
+
+ {%- if section.settings.body != blank -%}
+
+ {{ section.settings.body }}
+
+ {%- endif -%}
+
+ {%- if button_label != blank and button_label != '.' -%}
+
+ {%- endif -%}
+
+
+
+
+
+
+
+
+{% schema %}
+{
+ "name": "GK About Feature",
+ "tag": "section",
+ "class": "section",
+ "settings": [
+ {
+ "type": "checkbox",
+ "id": "enable_animation",
+ "default": true,
+ "label": "Enable fly-in animation"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow (optional)",
+ "default": "."
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "About Greg"
+ },
+ {
+ "type": "image_picker",
+ "id": "image",
+ "label": "Main image"
+ },
+ {
+ "type": "text",
+ "id": "photo_credit",
+ "label": "Photo credit (optional)",
+ "default": "above photo credit: ©2025CJFoeckler"
+ },
+ {
+ "type": "text",
+ "id": "subheading",
+ "label": "Subheading (optional)",
+ "default": "."
+ },
+ {
+ "type": "richtext",
+ "id": "body",
+ "label": "Body text",
+ "default": "
Add your updated About copy here. This is editable in the theme editor.
"
+ },
+ {
+ "type": "text",
+ "id": "button_label",
+ "label": "Button label (optional)",
+ "default": "."
+ },
+ {
+ "type": "url",
+ "id": "button_link",
+ "label": "Button link"
+ },
+ {
+ "type": "color",
+ "id": "accent",
+ "label": "Accent color",
+ "default": "#E8690A"
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "min": 0,
+ "max": 120,
+ "step": 4,
+ "unit": "px",
+ "label": "Padding top",
+ "default": 40
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "min": 0,
+ "max": 120,
+ "step": 4,
+ "unit": "px",
+ "label": "Padding bottom",
+ "default": 52
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK About Feature"
+ }
+ ]
+}
+{% endschema %}
\ No newline at end of file
diff --git a/sections/gk-about-gallery.liquid b/sections/gk-about-gallery.liquid
new file mode 100644
index 00000000000..042a1bb17bb
--- /dev/null
+++ b/sections/gk-about-gallery.liquid
@@ -0,0 +1,483 @@
+{%- comment -%}
+ GK About Gallery Section
+ - Old site layout: heading + main image + credit + 4 small thumbnails directly under hero
+ - Thumbnails + hero open fullscreen modal (lightbox)
+ - Premium motion: depth slide + stagger
+ - Scoped CSS/JS
+ NOTE: We treat "." as empty for optional text fields.
+{%- endcomment -%}
+
+{%- liquid
+ assign eyebrow_val = section.settings.eyebrow | strip
+ assign credit_val = section.settings.main_credit | strip
+ assign body_val = section.settings.body
+-%}
+
+
+
+
+ {%- if eyebrow_val != blank and eyebrow_val != '.' -%}
+
{{ section.settings.eyebrow }}
+ {%- endif -%}
+
+ {%- if section.settings.heading != blank -%}
+
{{ section.settings.heading }}
+ {%- endif -%}
+
+ {%- if section.settings.main_image != blank -%}
+
+
+
+ {%- liquid
+ assign img = section.settings.main_image
+ assign img_h = img.width | divided_by: img.aspect_ratio
+ -%}
+ {{
+ img
+ | image_url: width: 2400
+ | image_tag:
+ width: img.width,
+ height: img_h,
+ loading: 'lazy',
+ widths: '700, 1000, 1400, 1800, 2200, 2400',
+ sizes: '(min-width: 990px) 1100px, (min-width: 750px) 92vw, 94vw',
+ class: 'gk-aboutGallery__heroImg'
+ }}
+
+
+
+ {%- if credit_val != blank and credit_val != '.' -%}
+
+ {{ section.settings.main_credit }}
+
+ {%- endif -%}
+
+ {%- endif -%}
+
+ {%- comment -%} Thumbnails (directly under hero, before body) {%- endcomment -%}
+ {%- liquid
+ assign has_thumbs = false
+ if section.settings.thumb_1 != blank or section.settings.thumb_2 != blank or section.settings.thumb_3 != blank or section.settings.thumb_4 != blank
+ assign has_thumbs = true
+ endif
+ -%}
+
+ {%- if has_thumbs -%}
+
+ {%- for i in (1..4) -%}
+ {%- liquid
+ assign img_key = 'thumb_' | append: i
+ assign alt_key = 'thumb_alt_' | append: i
+
+ assign t = section.settings[img_key]
+ assign alt_override = section.settings[alt_key] | strip
+
+ if t != blank
+ assign full = t | image_url: width: 2800
+ assign alt = t.alt
+ if alt_override != blank and alt_override != '.'
+ assign alt = alt_override
+ endif
+ endif
+ -%}
+
+ {%- if t != blank -%}
+
+ {{
+ t
+ | image_url: width: 900
+ | image_tag:
+ loading: 'lazy',
+ widths: '300, 450, 600, 750, 900',
+ sizes: '(min-width: 990px) 260px, (min-width: 750px) 22vw, 42vw',
+ class: 'gk-aboutGallery__thumbImg'
+ }}
+
+ {%- endif -%}
+ {%- endfor -%}
+
+ {%- endif -%}
+
+ {%- if body_val != blank -%}
+
+ {{ section.settings.body }}
+
+ {%- endif -%}
+
+
+
+ {%- comment -%} Modal (scoped) {%- endcomment -%}
+
+
+
+
+
+
+
+{% schema %}
+{
+ "name": "GK About Gallery",
+ "tag": "section",
+ "class": "section",
+ "settings": [
+ { "type": "checkbox", "id": "enable_animation", "default": true, "label": "Enable fly-in animation" },
+ { "type": "text", "id": "eyebrow", "label": "Eyebrow (optional)", "default": "." },
+ { "type": "text", "id": "heading", "label": "Heading", "default": "About the Koch Marshall Trio" },
+ { "type": "image_picker", "id": "main_image", "label": "Main image" },
+ { "type": "text", "id": "main_credit", "label": "Main photo credit (optional)", "default": "above photo credit: ©2025CJFoeckler" },
+
+ { "type": "header", "content": "Thumbnail images (click to expand)" },
+ { "type": "image_picker", "id": "thumb_1", "label": "Thumbnail 1" },
+ { "type": "text", "id": "thumb_alt_1", "label": "Alt text override 1 (optional)", "default": "." },
+ { "type": "image_picker", "id": "thumb_2", "label": "Thumbnail 2" },
+ { "type": "text", "id": "thumb_alt_2", "label": "Alt text override 2 (optional)", "default": "." },
+ { "type": "image_picker", "id": "thumb_3", "label": "Thumbnail 3" },
+ { "type": "text", "id": "thumb_alt_3", "label": "Alt text override 3 (optional)", "default": "." },
+ { "type": "image_picker", "id": "thumb_4", "label": "Thumbnail 4" },
+ { "type": "text", "id": "thumb_alt_4", "label": "Alt text override 4 (optional)", "default": "." },
+
+ { "type": "richtext", "id": "body", "label": "Body text", "default": "Add your updated copy here. This is editable in the theme editor.
" },
+ { "type": "color", "id": "accent", "label": "Accent color", "default": "#E8690A" },
+ { "type": "range", "id": "padding_top", "min": 0, "max": 140, "step": 4, "unit": "px", "label": "Padding top", "default": 44 },
+ { "type": "range", "id": "padding_bottom", "min": 0, "max": 140, "step": 4, "unit": "px", "label": "Padding bottom", "default": 52 }
+ ],
+ "presets": [{ "name": "GK About Gallery" }]
+}
+{% endschema %}
\ No newline at end of file
diff --git a/sections/gk-about-page.liquid b/sections/gk-about-page.liquid
new file mode 100644
index 00000000000..1d0b0735853
--- /dev/null
+++ b/sections/gk-about-page.liquid
@@ -0,0 +1,446 @@
+{%- style -%}
+ .gk-about {
+ background-color: {{ section.settings.bg_color }};
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ }
+
+ .gk-about__inner {
+ max-width: var(--page-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ }
+
+ .gk-about__header {
+ text-align: center;
+ margin-bottom: 48px;
+ }
+
+ .gk-about__eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.75rem;
+ color: #E8690A;
+ margin-bottom: 12px;
+ display: block;
+ }
+
+ .gk-about__heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(2.5rem, 6vw, 4.5rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ margin: 0;
+ }
+
+ /* Editorial Layout */
+ .gk-about__editorial {
+ display: grid;
+ grid-template-columns: {{ section.settings.image_width }}fr {{ section.settings.text_width }}fr;
+ gap: 48px;
+ align-items: start;
+ margin-bottom: 48px;
+ }
+
+ .gk-about__editorial--reversed {
+ direction: rtl;
+ }
+
+ .gk-about__editorial--reversed > * {
+ direction: ltr;
+ }
+
+ .gk-about__image {
+ width: 100%;
+ overflow: hidden;
+ }
+
+ .gk-about__image img {
+ width: 100%;
+ height: auto;
+ object-fit: cover;
+ display: block;
+ }
+
+ .gk-about__text {
+ padding-top: 16px;
+ }
+
+ .gk-about__text-eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.7rem;
+ color: #E8690A;
+ margin-bottom: 16px;
+ display: block;
+ }
+
+ .gk-about__text-heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(1.5rem, 3vw, 2.5rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ margin: 0 0 20px 0;
+ }
+
+ .gk-about__text-body {
+ font-family: 'DM Sans', sans-serif;
+ color: #B0B0B0;
+ font-size: 1rem;
+ line-height: 1.8;
+ }
+
+ .gk-about__text-body p {
+ margin: 0 0 16px 0;
+ }
+
+ .gk-about__text-body p:last-child {
+ margin-bottom: 0;
+ }
+
+ /* Stat bar */
+ .gk-about__stats {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
+ gap: 24px;
+ padding: 40px 0;
+ border-top: 1px solid #272727;
+ border-bottom: 1px solid #272727;
+ margin: 48px 0;
+ }
+
+ .gk-about__stat {
+ text-align: center;
+ }
+
+ .gk-about__stat-number {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: 2.5rem;
+ color: #E8690A;
+ display: block;
+ line-height: 1;
+ margin-bottom: 4px;
+ }
+
+ .gk-about__stat-label {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.65rem;
+ color: #777777;
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-about__editorial {
+ grid-template-columns: 1fr;
+ }
+
+ .gk-about__editorial--reversed {
+ direction: ltr;
+ }
+ }
+{%- endstyle -%}
+
+
+
+ {%- if section.settings.show_header -%}
+
+ {%- endif -%}
+
+ {%- for block in section.blocks -%}
+ {%- case block.type -%}
+ {%- when 'editorial_block' -%}
+
+ {%- if block.settings.image != blank -%}
+
+ {{ block.settings.image | image_url: width: 900 | image_tag:
+ loading: 'lazy',
+ sizes: '(max-width: 749px) 100vw, 50vw',
+ widths: '375, 550, 750, 900'
+ }}
+
+ {%- endif -%}
+
+ {%- if block.settings.eyebrow != blank -%}
+
{{ block.settings.eyebrow }}
+ {%- endif -%}
+ {%- if block.settings.heading != blank -%}
+
{{ block.settings.heading }}
+ {%- endif -%}
+ {%- if block.settings.body != blank -%}
+
{{ block.settings.body }}
+ {%- endif -%}
+
+
+
+ {%- when 'stats_bar' -%}
+
+ {%- if block.settings.stat_1_number != blank -%}
+
+ {{ block.settings.stat_1_number }}
+ {{ block.settings.stat_1_label }}
+
+ {%- endif -%}
+ {%- if block.settings.stat_2_number != blank -%}
+
+ {{ block.settings.stat_2_number }}
+ {{ block.settings.stat_2_label }}
+
+ {%- endif -%}
+ {%- if block.settings.stat_3_number != blank -%}
+
+ {{ block.settings.stat_3_number }}
+ {{ block.settings.stat_3_label }}
+
+ {%- endif -%}
+ {%- if block.settings.stat_4_number != blank -%}
+
+ {{ block.settings.stat_4_number }}
+ {{ block.settings.stat_4_label }}
+
+ {%- endif -%}
+
+
+ {%- when 'richtext' -%}
+
+ {%- if block.settings.eyebrow != blank -%}
+
{{ block.settings.eyebrow }}
+ {%- endif -%}
+ {%- if block.settings.heading != blank -%}
+
{{ block.settings.heading }}
+ {%- endif -%}
+ {%- if block.settings.body != blank -%}
+
{{ block.settings.body }}
+ {%- endif -%}
+
+ {%- endcase -%}
+ {%- endfor -%}
+
+
+
+{% schema %}
+{
+ "name": "GK About Page",
+ "tag": "section",
+ "class": "gk-about-section",
+ "settings": [
+ {
+ "type": "color",
+ "id": "bg_color",
+ "label": "Background Color",
+ "default": "#0D0D0D"
+ },
+ {
+ "type": "checkbox",
+ "id": "show_header",
+ "label": "Show Page Header",
+ "default": true
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text",
+ "default": "The Gristleman"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Page Heading",
+ "default": "ABOUT GREG KOCH"
+ },
+ {
+ "type": "select",
+ "id": "image_width",
+ "label": "Image Column Width",
+ "default": "1",
+ "options": [
+ { "value": "1", "label": "Equal" },
+ { "value": "2", "label": "Image Wider" }
+ ]
+ },
+ {
+ "type": "select",
+ "id": "text_width",
+ "label": "Text Column Width",
+ "default": "1",
+ "options": [
+ { "value": "1", "label": "Equal" },
+ { "value": "2", "label": "Text Wider" }
+ ]
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "editorial_block",
+ "name": "Image + Text Block",
+ "settings": [
+ {
+ "type": "image_picker",
+ "id": "image",
+ "label": "Image"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "The Story"
+ },
+ {
+ "type": "richtext",
+ "id": "body",
+ "label": "Body Text",
+ "default": "Greg Koch is a guitar fiend from Milwaukee, Wisconsin. Known for his unique blend of blues, rock, country, and jazz, Koch has been unleashing his brand of musical mayhem for decades.
A Reverend Guitars and Fishman artist, Koch is equally at home shredding on stage, recording in the studio, or teaching his trademark techniques to students around the world.
"
+ },
+ {
+ "type": "checkbox",
+ "id": "reverse_layout",
+ "label": "Reverse Layout (text left, image right)",
+ "default": false
+ }
+ ]
+ },
+ {
+ "type": "stats_bar",
+ "name": "Stats Bar",
+ "limit": 1,
+ "settings": [
+ {
+ "type": "text",
+ "id": "stat_1_number",
+ "label": "Stat 1 Number",
+ "default": "30+"
+ },
+ {
+ "type": "text",
+ "id": "stat_1_label",
+ "label": "Stat 1 Label",
+ "default": "Years Playing"
+ },
+ {
+ "type": "text",
+ "id": "stat_2_number",
+ "label": "Stat 2 Number",
+ "default": "20+"
+ },
+ {
+ "type": "text",
+ "id": "stat_2_label",
+ "label": "Stat 2 Label",
+ "default": "Albums Released"
+ },
+ {
+ "type": "text",
+ "id": "stat_3_number",
+ "label": "Stat 3 Number",
+ "default": "1000+"
+ },
+ {
+ "type": "text",
+ "id": "stat_3_label",
+ "label": "Stat 3 Label",
+ "default": "Shows Played"
+ },
+ {
+ "type": "text",
+ "id": "stat_4_number",
+ "label": "Stat 4 Number",
+ "default": "50+"
+ },
+ {
+ "type": "text",
+ "id": "stat_4_label",
+ "label": "Stat 4 Label",
+ "default": "Courses Published"
+ }
+ ]
+ },
+ {
+ "type": "richtext",
+ "name": "Rich Text Block",
+ "settings": [
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading"
+ },
+ {
+ "type": "richtext",
+ "id": "body",
+ "label": "Body Text",
+ "default": "Additional bio content goes here.
"
+ },
+ {
+ "type": "checkbox",
+ "id": "center",
+ "label": "Center Text",
+ "default": false
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK About Page",
+ "blocks": [
+ {
+ "type": "editorial_block",
+ "settings": {
+ "heading": "The Story",
+ "reverse_layout": false
+ }
+ },
+ {
+ "type": "stats_bar"
+ },
+ {
+ "type": "editorial_block",
+ "settings": {
+ "heading": "The Gear",
+ "reverse_layout": true
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-bandsintown-home.liquid b/sections/gk-bandsintown-home.liquid
new file mode 100644
index 00000000000..665d725619e
--- /dev/null
+++ b/sections/gk-bandsintown-home.liquid
@@ -0,0 +1,658 @@
+{% comment %}
+ GK Bandsintown – Home Strip
+ Official Bandsintown widget for Greg Koch, restyled to match dark glass aesthetic.
+ Shows N events initially; each "Show More" click reveals reveal_step more.
+
+ MERCHANT: Theme Editor › this section › Bandsintown › Artist name
+ Display settings › Events shown on load / Events revealed per click
+{% endcomment %}
+
+{%- liquid
+ assign bit_artist = section.settings.artist_name
+ assign bit_initial_visible = section.settings.initial_visible_count
+ assign bit_reveal_step = section.settings.reveal_step
+ assign bit_more_label = section.settings.show_more_label | default: 'SHOW MORE DATES'
+ assign bit_uid = section.id | prepend: 'gkbit-home-'
+-%}
+
+
+
+
+
+
+ {%- if section.settings.eyebrow != blank -%}
+
{{ section.settings.eyebrow }}
+ {%- endif -%}
+ {%- if section.settings.heading != blank -%}
+
{{ section.settings.heading }}
+ {%- endif -%}
+ {%- if section.settings.subtext != blank -%}
+
{{ section.settings.subtext }}
+ {%- endif -%}
+
+ {%- if request.design_mode -%}
+
+ ⓘ Theme Editor: Bandsintown events load live. Click "View" or open the published site to see them.
+
+ {%- endif -%}
+
+
+ {%- comment -%}
+ Official Bandsintown anchor-initializer. BIT script below finds this element
+ and replaces it with the rendered widget (event list + ticket links).
+ {%- endcomment -%}
+
+
Check back soon for upcoming dates.
+
+
+
+
+
+{%- comment -%}
+ Load / re-trigger Bandsintown widget script.
+ On initial page load BIT isn't loaded yet, so we inject it.
+ On Shopify theme-editor re-render (save / setting change) the section HTML
+ is replaced but window globals survive — so we must remove the old
+
+
+
+{% schema %}
+{
+ "name": "GK Bandsintown (Home)",
+ "settings": [
+ {
+ "type": "header",
+ "content": "Header text"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow",
+ "default": "On Tour"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "LIVE DATES"
+ },
+ {
+ "type": "text",
+ "id": "subtext",
+ "label": "Subtext",
+ "default": "Catch Greg live on the road."
+ },
+ {
+ "type": "header",
+ "content": "Bandsintown"
+ },
+ {
+ "type": "text",
+ "id": "artist_name",
+ "label": "Artist name",
+ "info": "Must match your Bandsintown artist page exactly, e.g. Greg Koch",
+ "default": "Greg Koch"
+ },
+ {
+ "type": "header",
+ "content": "Display settings"
+ },
+ {
+ "type": "range",
+ "id": "initial_visible_count",
+ "label": "Events shown on load",
+ "min": 1,
+ "max": 20,
+ "step": 1,
+ "default": 3
+ },
+ {
+ "type": "range",
+ "id": "reveal_step",
+ "label": "Events revealed per click",
+ "min": 1,
+ "max": 20,
+ "step": 1,
+ "default": 3
+ },
+ {
+ "type": "text",
+ "id": "show_more_label",
+ "label": "Show more button label",
+ "default": "SHOW MORE DATES"
+ },
+ {
+ "type": "header",
+ "content": "Style"
+ },
+ {
+ "type": "color",
+ "id": "bg_color",
+ "label": "Background color",
+ "default": "#0D0D0D"
+ },
+ {
+ "type": "range",
+ "id": "max_width",
+ "label": "Max content width (px)",
+ "min": 600,
+ "max": 1400,
+ "step": 20,
+ "default": 900
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding top",
+ "min": 0,
+ "max": 120,
+ "step": 4,
+ "default": 64
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding bottom",
+ "min": 0,
+ "max": 120,
+ "step": 4,
+ "default": 64
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Bandsintown (Home)"
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-bandsintown-page.liquid b/sections/gk-bandsintown-page.liquid
new file mode 100644
index 00000000000..eb1ec4e4909
--- /dev/null
+++ b/sections/gk-bandsintown-page.liquid
@@ -0,0 +1,667 @@
+{% comment %}
+ GK Bandsintown – Dates Page (full listing)
+ Official Bandsintown widget for Greg Koch, restyled to match dark glass aesthetic.
+ Shows N events initially; each "Show More" click reveals reveal_step more.
+
+ MERCHANT: Theme Editor › this section › Bandsintown › Artist name
+ Display settings › Events shown on load / Events revealed per click
+{% endcomment %}
+
+{%- liquid
+ assign bit_artist = section.settings.artist_name
+ assign bit_initial_visible = section.settings.initial_visible_count
+ assign bit_reveal_step = section.settings.reveal_step
+ assign bit_more_label = section.settings.show_more_label | default: 'SHOW MORE DATES'
+ assign bit_uid = section.id | prepend: 'gkbit-page-'
+-%}
+
+
+
+
+
+
+ {%- if section.settings.eyebrow != blank -%}
+
{{ section.settings.eyebrow }}
+ {%- endif -%}
+ {%- if section.settings.heading != blank -%}
+
{{ section.settings.heading }}
+ {%- endif -%}
+ {%- if section.settings.subtext != blank -%}
+
{{ section.settings.subtext }}
+ {%- endif -%}
+
+ {%- if request.design_mode -%}
+
+ ⓘ Theme Editor: Bandsintown events load live. Click "View" or open the published site to see them.
+
+ {%- endif -%}
+
+
+ {%- comment -%}
+ Official Bandsintown anchor-initializer. BIT script below finds this element
+ and replaces it with the rendered widget (event list + ticket links).
+ {%- endcomment -%}
+
+
Check back soon for upcoming dates.
+
+
+
+
+
+{%- comment -%}
+ Load / re-trigger Bandsintown widget script.
+ On initial page load BIT isn't loaded yet, so we inject it.
+ On Shopify theme-editor re-render (save / setting change) the section HTML
+ is replaced but window globals survive — so we must remove the old
+
+
+
+{% schema %}
+{
+ "name": "GK Bandsintown (Page)",
+ "settings": [
+ {
+ "type": "header",
+ "content": "Header text"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow",
+ "default": "Tour Dates"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "TOUR DATES"
+ },
+ {
+ "type": "text",
+ "id": "subtext",
+ "label": "Subtext",
+ "default": "All upcoming live dates below. Tickets available at each show."
+ },
+ {
+ "type": "header",
+ "content": "Bandsintown"
+ },
+ {
+ "type": "text",
+ "id": "artist_name",
+ "label": "Artist name",
+ "info": "Must match your Bandsintown artist page exactly, e.g. Greg Koch",
+ "default": "Greg Koch"
+ },
+ {
+ "type": "header",
+ "content": "Display settings"
+ },
+ {
+ "type": "range",
+ "id": "initial_visible_count",
+ "label": "Events shown on load",
+ "min": 1,
+ "max": 30,
+ "step": 1,
+ "default": 10
+ },
+ {
+ "type": "range",
+ "id": "reveal_step",
+ "label": "Events revealed per click",
+ "min": 1,
+ "max": 30,
+ "step": 1,
+ "default": 5
+ },
+ {
+ "type": "text",
+ "id": "show_more_label",
+ "label": "Show more button label",
+ "default": "SHOW MORE DATES"
+ },
+ {
+ "type": "header",
+ "content": "Style"
+ },
+ {
+ "type": "color",
+ "id": "bg_color",
+ "label": "Background color",
+ "default": "#0D0D0D"
+ },
+ {
+ "type": "range",
+ "id": "max_width",
+ "label": "Max content width (px)",
+ "min": 600,
+ "max": 1400,
+ "step": 20,
+ "default": 1100
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding top",
+ "min": 0,
+ "max": 120,
+ "step": 4,
+ "default": 64
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding bottom",
+ "min": 0,
+ "max": 120,
+ "step": 4,
+ "default": 64
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Bandsintown (Page)"
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-contact-page.liquid b/sections/gk-contact-page.liquid
new file mode 100644
index 00000000000..70b647db3fd
--- /dev/null
+++ b/sections/gk-contact-page.liquid
@@ -0,0 +1,449 @@
+{%- style -%}
+ .gk-contact {
+ background-color: {{ section.settings.bg_color }};
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ }
+
+ .gk-contact__inner {
+ max-width: {{ section.settings.form_width }}px;
+ margin: 0 auto;
+ padding: 0 24px;
+ }
+
+ .gk-contact__header {
+ text-align: center;
+ margin-bottom: 48px;
+ }
+
+ .gk-contact__eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.75rem;
+ color: #E8690A;
+ margin-bottom: 12px;
+ display: block;
+ }
+
+ .gk-contact__heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(2.5rem, 6vw, 4.5rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ margin: 0 0 12px 0;
+ }
+
+ .gk-contact__subtext {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 1.1rem;
+ max-width: 500px;
+ margin: 0 auto;
+ line-height: 1.6;
+ }
+
+ .gk-contact__form {
+ background-color: #141414;
+ border: 1px solid #272727;
+ padding: 40px;
+ }
+
+ .gk-contact__field {
+ margin-bottom: 24px;
+ }
+
+ .gk-contact__field label {
+ display: block;
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.7rem;
+ color: #777777;
+ margin-bottom: 8px;
+ }
+
+ .gk-contact__field input,
+ .gk-contact__field textarea {
+ width: 100%;
+ background-color: #0D0D0D;
+ border: 1px solid #272727;
+ color: #E8E8E8;
+ font-family: 'DM Sans', sans-serif;
+ font-size: 1rem;
+ padding: 14px 16px;
+ border-radius: 0;
+ outline: none;
+ transition: border-color 0.3s ease;
+ box-sizing: border-box;
+ }
+
+ .gk-contact__field input:focus,
+ .gk-contact__field textarea:focus {
+ border-color: #E8690A;
+ }
+
+ .gk-contact__field input::placeholder,
+ .gk-contact__field textarea::placeholder {
+ color: #555555;
+ }
+
+ .gk-contact__field textarea {
+ min-height: 160px;
+ resize: vertical;
+ }
+
+ .gk-contact__submit {
+ font-family: 'DM Sans', sans-serif;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.85rem;
+ font-weight: 500;
+ padding: 14px 48px;
+ border-radius: 0;
+ background-color: #E8690A;
+ color: #FFFFFF;
+ border: 2px solid #E8690A;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ display: inline-block;
+ width: {{ section.settings.button_width }};
+ }
+
+ .gk-contact__submit:hover {
+ background-color: transparent;
+ color: #E8690A;
+ }
+
+ .gk-contact__info {
+ margin-top: 48px;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 32px;
+ }
+
+ .gk-contact__info-item {
+ text-align: center;
+ }
+
+ .gk-contact__info-label {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.7rem;
+ color: #E8690A;
+ margin-bottom: 8px;
+ display: block;
+ }
+
+ .gk-contact__info-value {
+ font-family: 'DM Sans', sans-serif;
+ color: #E8E8E8;
+ font-size: 0.95rem;
+ }
+
+ .gk-contact__info-value a {
+ color: #E8E8E8;
+ text-decoration: none;
+ transition: color 0.3s ease;
+ }
+
+ .gk-contact__info-value a:hover {
+ color: #E8690A;
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-contact__form {
+ padding: 24px;
+ }
+ }
+{%- endstyle -%}
+
+
+
+{% schema %}
+{
+ "name": "GK Contact Page",
+ "tag": "section",
+ "class": "gk-contact-section",
+ "settings": [
+ {
+ "type": "color",
+ "id": "bg_color",
+ "label": "Background Color",
+ "default": "#0D0D0D"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text",
+ "default": "Get in Touch"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "CONTACT"
+ },
+ {
+ "type": "textarea",
+ "id": "subtext",
+ "label": "Subtext",
+ "default": "For booking, press, lessons, or general inquiries."
+ },
+ {
+ "type": "text",
+ "id": "name_label",
+ "label": "Name Field Label",
+ "default": "Name"
+ },
+ {
+ "type": "text",
+ "id": "name_placeholder",
+ "label": "Name Placeholder",
+ "default": "Your name"
+ },
+ {
+ "type": "text",
+ "id": "email_label",
+ "label": "Email Field Label",
+ "default": "Email"
+ },
+ {
+ "type": "text",
+ "id": "email_placeholder",
+ "label": "Email Placeholder",
+ "default": "your@email.com"
+ },
+ {
+ "type": "checkbox",
+ "id": "show_phone",
+ "label": "Show Phone Field",
+ "default": false
+ },
+ {
+ "type": "text",
+ "id": "phone_label",
+ "label": "Phone Field Label",
+ "default": "Phone"
+ },
+ {
+ "type": "text",
+ "id": "phone_placeholder",
+ "label": "Phone Placeholder",
+ "default": "Your phone number"
+ },
+ {
+ "type": "text",
+ "id": "message_label",
+ "label": "Message Field Label",
+ "default": "Message"
+ },
+ {
+ "type": "text",
+ "id": "message_placeholder",
+ "label": "Message Placeholder",
+ "default": "What's on your mind?"
+ },
+ {
+ "type": "text",
+ "id": "submit_label",
+ "label": "Submit Button Label",
+ "default": "SEND MESSAGE"
+ },
+ {
+ "type": "text",
+ "id": "success_message",
+ "label": "Success Message",
+ "default": "Thanks for reaching out! We'll get back to you soon."
+ },
+ {
+ "type": "select",
+ "id": "button_alignment",
+ "label": "Button Alignment",
+ "default": "left",
+ "options": [
+ { "value": "left", "label": "Left" },
+ { "value": "center", "label": "Center" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+ {
+ "type": "select",
+ "id": "button_width",
+ "label": "Button Width",
+ "default": "auto",
+ "options": [
+ { "value": "auto", "label": "Auto" },
+ { "value": "100%", "label": "Full Width" }
+ ]
+ },
+ {
+ "type": "range",
+ "id": "form_width",
+ "label": "Form Max Width",
+ "min": 500,
+ "max": 1000,
+ "step": 50,
+ "default": 700,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "info_item",
+ "name": "Contact Info",
+ "settings": [
+ {
+ "type": "text",
+ "id": "label",
+ "label": "Label",
+ "default": "Email"
+ },
+ {
+ "type": "text",
+ "id": "value",
+ "label": "Value",
+ "default": "info@gregkoch.com"
+ },
+ {
+ "type": "url",
+ "id": "link",
+ "label": "Link (optional)"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Contact Page",
+ "blocks": [
+ {
+ "type": "info_item",
+ "settings": {
+ "label": "General",
+ "value": "info@gregkoch.com"
+ }
+ },
+ {
+ "type": "info_item",
+ "settings": {
+ "label": "Booking",
+ "value": "booking@gregkoch.com"
+ }
+ },
+ {
+ "type": "info_item",
+ "settings": {
+ "label": "Press",
+ "value": "press@gregkoch.com"
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-dates-page.liquid b/sections/gk-dates-page.liquid
new file mode 100644
index 00000000000..3fb30267517
--- /dev/null
+++ b/sections/gk-dates-page.liquid
@@ -0,0 +1,425 @@
+{% comment %}
+ GK Tour Dates (DATES PAGE)
+ - Uses shared snippet as the single source of truth
+ - Keeps your exact "gk-date" glass card styling + JS reveal
+{% endcomment %}
+
+{% liquid
+ assign today_ymd = 'now' | date: '%Y-%m-%d'
+ assign today_midnight_ts = today_ymd | date: '%s' | plus: 0
+%}
+
+{%- capture upcoming_count_capture -%}
+ {%- render 'gk-tour-dates-shared',
+ mode: 'count'
+ -%}
+{%- endcapture -%}
+{%- assign upcoming_count = upcoming_count_capture | strip | plus: 0 -%}
+
+
+
+
+ {% if section.settings.eyebrow != blank %}
+
{{ section.settings.eyebrow }}
+ {% endif %}
+
+ {% if section.settings.heading != blank %}
+
{{ section.settings.heading }}
+ {% endif %}
+
+ {% if section.settings.subtext != blank %}
+
{{ section.settings.subtext }}
+ {% endif %}
+
+
+ {%- render 'gk-tour-dates-shared',
+ mode: 'render',
+ row_prefix: 'gk-date',
+ visible_count: section.settings.visible_count,
+ use_hidden_class: true
+ -%}
+
+
+ {% if upcoming_count == 0 %}
+
+ {{ section.settings.empty_text }}
+
+ {% endif %}
+
+ {% if upcoming_count > section.settings.visible_count %}
+
+ {% elsif section.settings.view_all_url != blank %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+{% schema %}
+{
+ "name": "GK Dates Page",
+ "settings": [
+ { "type": "text", "id": "eyebrow", "label": "Eyebrow", "default": "Tour Dates" },
+ { "type": "text", "id": "heading", "label": "Heading", "default": "GREG KOCH DATES" },
+ { "type": "text", "id": "subtext", "label": "Subtext", "default": "See upcoming dates below." },
+ { "type": "text", "id": "empty_text", "label": "Empty state text", "default": "No upcoming dates. Check back soon." },
+
+ {
+ "type": "select",
+ "id": "text_align",
+ "label": "Text alignment",
+ "default": "left",
+ "options": [
+ { "value": "left", "label": "Left" },
+ { "value": "center", "label": "Center" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+
+ { "type": "range", "id": "visible_count", "label": "Visible dates", "min": 1, "max": 20, "step": 1, "default": 10 },
+ { "type": "range", "id": "reveal_step", "label": "Reveal step", "min": 1, "max": 20, "step": 1, "default": 10 },
+
+ { "type": "text", "id": "show_more_label", "label": "Show more label", "default": "Show more dates" },
+ { "type": "text", "id": "show_less_label", "label": "Show less label", "default": "Show fewer dates" },
+ { "type": "text", "id": "view_all_label", "label": "View all label", "default": "View all dates" },
+ { "type": "url", "id": "view_all_url", "label": "View all URL" },
+
+ { "type": "range", "id": "padding_top", "label": "Padding top", "min": 0, "max": 120, "step": 4, "default": 64 },
+ { "type": "range", "id": "padding_bottom", "label": "Padding bottom", "min": 0, "max": 120, "step": 4, "default": 64 },
+
+ { "type": "color", "id": "bg_color", "label": "Background color", "default": "#0D0D0D" },
+ { "type": "color", "id": "accent_color", "label": "Accent color", "default": "#E8690A" }
+ ],
+ "presets": [
+ { "name": "GK Dates Page" }
+ ]
+}
+{% endschema %}
\ No newline at end of file
diff --git a/sections/gk-featured-gristle.liquid b/sections/gk-featured-gristle.liquid
new file mode 100644
index 00000000000..107734f3c8c
--- /dev/null
+++ b/sections/gk-featured-gristle.liquid
@@ -0,0 +1,357 @@
+{%- style -%}
+ .gk-featured-gristle {
+ background-color: {{ section.settings.bg_color }};
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ }
+
+ .gk-featured-gristle__inner {
+ max-width: var(--page-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ }
+
+ .gk-featured-gristle__header {
+ text-align: {{ section.settings.text_alignment }};
+ margin-bottom: 40px;
+ }
+
+ .gk-featured-gristle__eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.75rem;
+ color: #E8690A;
+ margin-bottom: 12px;
+ display: block;
+ }
+
+ .gk-featured-gristle__heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(2rem, 5vw, 3.5rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ margin: 0 0 8px 0;
+ }
+
+ .gk-featured-gristle__subtext {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 1rem;
+ max-width: 600px;
+ {% if section.settings.text_alignment == 'center' %}
+ margin-left: auto;
+ margin-right: auto;
+ {% endif %}
+ }
+
+ .gk-featured-gristle__grid {
+ display: grid;
+ grid-template-columns: repeat({{ section.settings.columns_desktop }}, 1fr);
+ gap: 24px;
+ }
+
+ .gk-featured-gristle__card {
+ background-color: #141414;
+ border: 1px solid #272727;
+ overflow: hidden;
+ transition: all 0.3s ease;
+ text-decoration: none;
+ display: block;
+ }
+
+ .gk-featured-gristle__card:hover {
+ border-color: #E8690A;
+ transform: translateY(-4px);
+ }
+
+ .gk-featured-gristle__card-image {
+ width: 100%;
+ aspect-ratio: {{ section.settings.image_ratio }};
+ overflow: hidden;
+ }
+
+ .gk-featured-gristle__card-image img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ transition: transform 0.5s ease;
+ }
+
+ .gk-featured-gristle__card:hover .gk-featured-gristle__card-image img {
+ transform: scale(1.05);
+ }
+
+ .gk-featured-gristle__card-content {
+ padding: 24px;
+ }
+
+ .gk-featured-gristle__card-label {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.7rem;
+ color: #E8690A;
+ margin-bottom: 8px;
+ display: block;
+ }
+
+ .gk-featured-gristle__card-title {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: 1.5rem;
+ color: #E8E8E8;
+ margin: 0 0 8px 0;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ }
+
+ .gk-featured-gristle__card-desc {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 0.9rem;
+ line-height: 1.6;
+ margin: 0 0 16px 0;
+ }
+
+ .gk-featured-gristle__card-btn {
+ font-family: 'DM Sans', sans-serif;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.75rem;
+ font-weight: 500;
+ color: #E8690A;
+ text-decoration: none;
+ border-bottom: 1px solid #E8690A;
+ padding-bottom: 2px;
+ transition: color 0.3s ease;
+ }
+
+ .gk-featured-gristle__card-btn:hover {
+ color: #E8E8E8;
+ border-color: #E8E8E8;
+ }
+
+ @media screen and (max-width: 989px) {
+ .gk-featured-gristle__grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-featured-gristle__grid {
+ grid-template-columns: 1fr;
+ }
+ }
+{%- endstyle -%}
+
+
+
+
+
+ {%- if section.blocks.size > 0 -%}
+
+ {%- endif -%}
+
+
+
+{% schema %}
+{
+ "name": "GK Featured Gristle",
+ "tag": "section",
+ "class": "gk-featured-gristle-section",
+ "settings": [
+ {
+ "type": "color",
+ "id": "bg_color",
+ "label": "Background Color",
+ "default": "#0D0D0D"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text",
+ "default": "Learn from the Gristleman"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "FEATURED GRISTLE"
+ },
+ {
+ "type": "text",
+ "id": "subtext",
+ "label": "Subtext",
+ "default": "Lessons, courses, and on-demand content from Greg Koch."
+ },
+ {
+ "type": "select",
+ "id": "text_alignment",
+ "label": "Text Alignment",
+ "default": "center",
+ "options": [
+ { "value": "left", "label": "Left" },
+ { "value": "center", "label": "Center" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+ {
+ "type": "select",
+ "id": "columns_desktop",
+ "label": "Desktop Columns",
+ "default": "3",
+ "options": [
+ { "value": "2", "label": "2 Columns" },
+ { "value": "3", "label": "3 Columns" },
+ { "value": "4", "label": "4 Columns" }
+ ]
+ },
+ {
+ "type": "select",
+ "id": "image_ratio",
+ "label": "Image Ratio",
+ "default": "16/9",
+ "options": [
+ { "value": "1/1", "label": "Square" },
+ { "value": "4/3", "label": "4:3" },
+ { "value": "16/9", "label": "16:9" },
+ { "value": "3/2", "label": "3:2" }
+ ]
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "card",
+ "name": "Feature Card",
+ "settings": [
+ {
+ "type": "image_picker",
+ "id": "image",
+ "label": "Card Image"
+ },
+ {
+ "type": "text",
+ "id": "label",
+ "label": "Category Label",
+ "default": "Lessons"
+ },
+ {
+ "type": "text",
+ "id": "title",
+ "label": "Card Title",
+ "default": "Virtual Lessons"
+ },
+ {
+ "type": "textarea",
+ "id": "description",
+ "label": "Description",
+ "default": "One-on-one virtual guitar lessons with Greg Koch via Zoom."
+ },
+ {
+ "type": "text",
+ "id": "button_label",
+ "label": "Button Label",
+ "default": "LEARN MORE"
+ },
+ {
+ "type": "url",
+ "id": "link",
+ "label": "Card Link"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Featured Gristle",
+ "blocks": [
+ {
+ "type": "card",
+ "settings": {
+ "label": "Lessons",
+ "title": "Virtual Lessons",
+ "description": "One-on-one virtual guitar lessons with Greg Koch via Zoom.",
+ "button_label": "BOOK NOW"
+ }
+ },
+ {
+ "type": "card",
+ "settings": {
+ "label": "On Demand",
+ "title": "On-Demand Courses",
+ "description": "Self-paced video courses covering technique, tone, and more.",
+ "button_label": "BROWSE COURSES"
+ }
+ },
+ {
+ "type": "card",
+ "settings": {
+ "label": "TrueFire",
+ "title": "TrueFire Courses",
+ "description": "Full-length instructional courses on the TrueFire platform.",
+ "button_label": "VIEW ON TRUEFIRE"
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-hero.liquid b/sections/gk-hero.liquid
new file mode 100644
index 00000000000..ae381de8eb6
--- /dev/null
+++ b/sections/gk-hero.liquid
@@ -0,0 +1,403 @@
+{%- style -%}
+ .gk-hero {
+ position: relative;
+ width: 100%;
+ min-height: {{ section.settings.hero_height }}vh;
+ display: flex;
+ align-items: {{ section.settings.content_position }};
+ justify-content: center;
+ overflow: hidden;
+ background-color: #0D0D0D;
+ }
+
+ .gk-hero__media {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ }
+
+ .gk-hero__media img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ object-position: {{ section.settings.image_position }};
+ }
+
+ .gk-hero__overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(
+ to {{ section.settings.gradient_direction }},
+ rgba(13, 13, 13, {{ section.settings.overlay_opacity | divided_by: 100.0 }}) 0%,
+ rgba(13, 13, 13, {{ section.settings.overlay_end_opacity | divided_by: 100.0 }}) 100%
+ );
+ z-index: 2;
+ }
+
+ .gk-hero__content {
+ position: relative;
+ z-index: 3;
+ text-align: {{ section.settings.text_alignment }};
+ max-width: {{ section.settings.content_width }}px;
+ padding: 60px 24px;
+ width: 100%;
+ }
+
+ .gk-hero__eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.8rem;
+ color: #E8690A;
+ margin-bottom: 16px;
+ display: block;
+ }
+
+ .gk-hero__heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(3rem, 8vw, {{ section.settings.heading_size }}rem);
+ line-height: 0.95;
+ color: #E8E8E8;
+ margin: 0 0 16px 0;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ }
+
+ .gk-hero__subheading {
+ font-family: 'DM Sans', sans-serif;
+ font-size: 1.1rem;
+ color: #777777;
+ margin-bottom: 32px;
+ line-height: 1.6;
+ max-width: 600px;
+ {% if section.settings.text_alignment == 'center' %}
+ margin-left: auto;
+ margin-right: auto;
+ {% endif %}
+ }
+
+ .gk-hero__buttons {
+ display: flex;
+ gap: 16px;
+ flex-wrap: wrap;
+ {% if section.settings.text_alignment == 'center' %}
+ justify-content: center;
+ {% endif %}
+ }
+
+ .gk-hero__btn {
+ font-family: 'DM Sans', sans-serif;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.85rem;
+ font-weight: 500;
+ padding: 14px 36px;
+ border-radius: 0;
+ text-decoration: none;
+ display: inline-block;
+ transition: all 0.3s ease;
+ cursor: pointer;
+ }
+
+ .gk-hero__btn--primary {
+ background-color: #E8690A;
+ color: #FFFFFF;
+ border: 2px solid #E8690A;
+ }
+
+ .gk-hero__btn--primary:hover {
+ background-color: transparent;
+ color: #E8690A;
+ }
+
+ .gk-hero__btn--secondary {
+ background-color: transparent;
+ color: #E8690A;
+ border: 2px solid #E8690A;
+ }
+
+ .gk-hero__btn--secondary:hover {
+ background-color: #E8690A;
+ color: #FFFFFF;
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-hero {
+ min-height: {{ section.settings.mobile_height }}vh;
+ }
+
+ .gk-hero__heading {
+ font-size: clamp(2.5rem, 10vw, 4rem);
+ }
+
+ .gk-hero__buttons {
+ flex-direction: column;
+ align-items: {% if section.settings.text_alignment == 'center' %}center{% else %}flex-start{% endif %};
+ }
+
+ .gk-hero__btn {
+ width: auto;
+ }
+ }
+{%- endstyle -%}
+
+
+ {%- if section.settings.image != blank -%}
+
+ {{ section.settings.image | image_url: width: 2000 | image_tag:
+ loading: 'eager',
+ sizes: '100vw',
+ widths: '375, 750, 1100, 1500, 2000',
+ alt: section.settings.image.alt | default: section.settings.heading
+ }}
+
+ {%- else -%}
+
+ {%- endif -%}
+
+
+
+
+ {%- for block in section.blocks -%}
+ {%- case block.type -%}
+ {%- when 'eyebrow' -%}
+ {%- if block.settings.text != blank -%}
+
{{ block.settings.text }}
+ {%- endif -%}
+
+ {%- when 'heading' -%}
+ {%- if block.settings.heading != blank -%}
+
{{ block.settings.heading }}
+ {%- endif -%}
+
+ {%- when 'subheading' -%}
+ {%- if block.settings.text != blank -%}
+
{{ block.settings.text }}
+ {%- endif -%}
+
+ {%- when 'buttons' -%}
+
+ {%- endcase -%}
+ {%- endfor -%}
+
+
+
+{% schema %}
+{
+ "name": "GK Hero",
+ "tag": "section",
+ "class": "gk-hero-section",
+ "settings": [
+ {
+ "type": "image_picker",
+ "id": "image",
+ "label": "Hero Image"
+ },
+ {
+ "type": "select",
+ "id": "image_position",
+ "label": "Image Position",
+ "default": "center center",
+ "options": [
+ { "value": "top center", "label": "Top" },
+ { "value": "center center", "label": "Center" },
+ { "value": "bottom center", "label": "Bottom" },
+ { "value": "left center", "label": "Left" },
+ { "value": "right center", "label": "Right" }
+ ]
+ },
+ {
+ "type": "range",
+ "id": "hero_height",
+ "label": "Hero Height (vh)",
+ "min": 50,
+ "max": 100,
+ "step": 5,
+ "default": 100,
+ "unit": "vh"
+ },
+ {
+ "type": "range",
+ "id": "mobile_height",
+ "label": "Mobile Height (vh)",
+ "min": 50,
+ "max": 100,
+ "step": 5,
+ "default": 85,
+ "unit": "vh"
+ },
+ {
+ "type": "range",
+ "id": "overlay_opacity",
+ "label": "Overlay Start Opacity",
+ "min": 0,
+ "max": 100,
+ "step": 5,
+ "default": 30,
+ "unit": "%"
+ },
+ {
+ "type": "range",
+ "id": "overlay_end_opacity",
+ "label": "Overlay End Opacity",
+ "min": 0,
+ "max": 100,
+ "step": 5,
+ "default": 85,
+ "unit": "%"
+ },
+ {
+ "type": "select",
+ "id": "gradient_direction",
+ "label": "Gradient Direction",
+ "default": "bottom",
+ "options": [
+ { "value": "top", "label": "Top" },
+ { "value": "bottom", "label": "Bottom" },
+ { "value": "left", "label": "Left" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+ {
+ "type": "select",
+ "id": "content_position",
+ "label": "Content Vertical Position",
+ "default": "flex-end",
+ "options": [
+ { "value": "flex-start", "label": "Top" },
+ { "value": "center", "label": "Middle" },
+ { "value": "flex-end", "label": "Bottom" }
+ ]
+ },
+ {
+ "type": "select",
+ "id": "text_alignment",
+ "label": "Text Alignment",
+ "default": "left",
+ "options": [
+ { "value": "left", "label": "Left" },
+ { "value": "center", "label": "Center" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+ {
+ "type": "range",
+ "id": "content_width",
+ "label": "Content Max Width",
+ "min": 600,
+ "max": 1400,
+ "step": 50,
+ "default": 800,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "heading_size",
+ "label": "Heading Size",
+ "min": 4,
+ "max": 12,
+ "step": 1,
+ "default": 7,
+ "unit": "rem"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "eyebrow",
+ "name": "Eyebrow Text",
+ "limit": 1,
+ "settings": [
+ {
+ "type": "text",
+ "id": "text",
+ "label": "Eyebrow Text",
+ "default": "Guitar Fiend • Gristle King"
+ }
+ ]
+ },
+ {
+ "type": "heading",
+ "name": "Heading",
+ "limit": 1,
+ "settings": [
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "GREG KOCH"
+ }
+ ]
+ },
+ {
+ "type": "subheading",
+ "name": "Subheading",
+ "limit": 1,
+ "settings": [
+ {
+ "type": "text",
+ "id": "text",
+ "label": "Subheading Text",
+ "default": "Unleashing his own brand of musical mayhem from Milwaukee, WI."
+ }
+ ]
+ },
+ {
+ "type": "buttons",
+ "name": "Buttons",
+ "limit": 1,
+ "settings": [
+ {
+ "type": "text",
+ "id": "button_label_1",
+ "label": "Primary Button Label",
+ "default": "SHOP THE GRISTLE"
+ },
+ {
+ "type": "url",
+ "id": "button_link_1",
+ "label": "Primary Button Link"
+ },
+ {
+ "type": "text",
+ "id": "button_label_2",
+ "label": "Secondary Button Label",
+ "default": "TOUR DATES"
+ },
+ {
+ "type": "url",
+ "id": "button_link_2",
+ "label": "Secondary Button Link"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Hero",
+ "blocks": [
+ { "type": "eyebrow" },
+ { "type": "heading" },
+ { "type": "subheading" },
+ { "type": "buttons" }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-lessons-page.liquid b/sections/gk-lessons-page.liquid
new file mode 100644
index 00000000000..a4d34cb64c5
--- /dev/null
+++ b/sections/gk-lessons-page.liquid
@@ -0,0 +1,405 @@
+{%- style -%}
+ .gk-lessons {
+ background-color: {{ section.settings.bg_color }};
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ }
+
+ .gk-lessons__inner {
+ max-width: var(--page-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ }
+
+ .gk-lessons__header {
+ text-align: center;
+ margin-bottom: 48px;
+ }
+
+ .gk-lessons__eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.75rem;
+ color: #E8690A;
+ margin-bottom: 12px;
+ display: block;
+ }
+
+ .gk-lessons__heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(2.5rem, 6vw, 4.5rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ margin: 0 0 12px 0;
+ }
+
+ .gk-lessons__subtext {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 1.1rem;
+ max-width: 700px;
+ margin: 0 auto;
+ line-height: 1.6;
+ }
+
+ .gk-lessons__grid {
+ display: grid;
+ grid-template-columns: repeat({{ section.settings.columns }}, 1fr);
+ gap: 32px;
+ margin-bottom: 48px;
+ }
+
+ .gk-lessons__card {
+ background-color: #141414;
+ border: 1px solid #272727;
+ overflow: hidden;
+ transition: all 0.3s ease;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .gk-lessons__card:hover {
+ border-color: #E8690A;
+ transform: translateY(-4px);
+ }
+
+ .gk-lessons__card-image {
+ width: 100%;
+ aspect-ratio: 16/9;
+ overflow: hidden;
+ }
+
+ .gk-lessons__card-image img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ transition: transform 0.5s ease;
+ }
+
+ .gk-lessons__card:hover .gk-lessons__card-image img {
+ transform: scale(1.05);
+ }
+
+ .gk-lessons__card-content {
+ padding: 28px;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .gk-lessons__card-label {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.7rem;
+ color: #E8690A;
+ margin-bottom: 12px;
+ display: block;
+ }
+
+ .gk-lessons__card-title {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: 1.8rem;
+ color: #E8E8E8;
+ margin: 0 0 12px 0;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ }
+
+ .gk-lessons__card-desc {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 0.95rem;
+ line-height: 1.7;
+ margin: 0 0 20px 0;
+ flex: 1;
+ }
+
+ .gk-lessons__card-price {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: 1.5rem;
+ color: #E8690A;
+ margin-bottom: 20px;
+ }
+
+ .gk-lessons__card-btn {
+ display: inline-block;
+ font-family: 'DM Sans', sans-serif;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.8rem;
+ font-weight: 500;
+ padding: 12px 28px;
+ border-radius: 0;
+ text-decoration: none;
+ background-color: #E8690A;
+ color: #FFFFFF;
+ border: 2px solid #E8690A;
+ transition: all 0.3s ease;
+ text-align: center;
+ align-self: flex-start;
+ }
+
+ .gk-lessons__card-btn:hover {
+ background-color: transparent;
+ color: #E8690A;
+ }
+
+ /* Feature list within card */
+ .gk-lessons__features {
+ list-style: none;
+ padding: 0;
+ margin: 0 0 20px 0;
+ }
+
+ .gk-lessons__features li {
+ font-family: 'DM Sans', sans-serif;
+ color: #E8E8E8;
+ font-size: 0.9rem;
+ padding: 6px 0;
+ border-bottom: 1px solid #272727;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ .gk-lessons__features li:last-child {
+ border-bottom: none;
+ }
+
+ .gk-lessons__features li::before {
+ content: "→";
+ color: #E8690A;
+ font-weight: bold;
+ }
+
+ @media screen and (max-width: 989px) {
+ .gk-lessons__grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-lessons__grid {
+ grid-template-columns: 1fr;
+ }
+ }
+{%- endstyle -%}
+
+
+
+
+
+ {%- if section.blocks.size > 0 -%}
+
+ {%- for block in section.blocks -%}
+
+ {%- if block.settings.image != blank -%}
+
+ {{ block.settings.image | image_url: width: 800 | image_tag:
+ loading: 'lazy',
+ sizes: '(max-width: 749px) 100vw, (max-width: 989px) 50vw, 33vw',
+ widths: '375, 550, 750, 800'
+ }}
+
+ {%- endif -%}
+
+ {%- if block.settings.label != blank -%}
+
{{ block.settings.label }}
+ {%- endif -%}
+ {%- if block.settings.title != blank -%}
+
{{ block.settings.title }}
+ {%- endif -%}
+ {%- if block.settings.description != blank -%}
+
{{ block.settings.description }}
+ {%- endif -%}
+
+ {%- if block.settings.features != blank -%}
+
+ {%- assign features = block.settings.features | split: "|" -%}
+ {%- for feature in features -%}
+ {{ feature | strip }}
+ {%- endfor -%}
+
+ {%- endif -%}
+
+ {%- if block.settings.price != blank -%}
+
{{ block.settings.price }}
+ {%- endif -%}
+
+ {%- if block.settings.button_label != blank -%}
+
{{ block.settings.button_label }}
+ {%- endif -%}
+
+
+ {%- endfor -%}
+
+ {%- endif -%}
+
+
+
+{% schema %}
+{
+ "name": "GK Lessons Page",
+ "tag": "section",
+ "class": "gk-lessons-section",
+ "settings": [
+ {
+ "type": "color",
+ "id": "bg_color",
+ "label": "Background Color",
+ "default": "#0D0D0D"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text",
+ "default": "Learn from the Gristleman"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "LESSONS"
+ },
+ {
+ "type": "textarea",
+ "id": "subtext",
+ "label": "Subtext",
+ "default": "Level up your playing with virtual lessons, on-demand courses, and deep-dive instructional content from Greg Koch."
+ },
+ {
+ "type": "select",
+ "id": "columns",
+ "label": "Desktop Columns",
+ "default": "3",
+ "options": [
+ { "value": "2", "label": "2 Columns" },
+ { "value": "3", "label": "3 Columns" }
+ ]
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "lesson_card",
+ "name": "Lesson Card",
+ "settings": [
+ {
+ "type": "image_picker",
+ "id": "image",
+ "label": "Card Image"
+ },
+ {
+ "type": "text",
+ "id": "label",
+ "label": "Category Label",
+ "default": "Lessons"
+ },
+ {
+ "type": "text",
+ "id": "title",
+ "label": "Title",
+ "default": "Virtual Lessons"
+ },
+ {
+ "type": "textarea",
+ "id": "description",
+ "label": "Description",
+ "default": "One-on-one virtual guitar lessons with Greg Koch."
+ },
+ {
+ "type": "text",
+ "id": "features",
+ "label": "Feature List (pipe-separated)",
+ "info": "Separate features with | character, e.g. 60 min sessions|All skill levels|Zoom video call",
+ "default": "60 min sessions|All skill levels|Personalized instruction"
+ },
+ {
+ "type": "text",
+ "id": "price",
+ "label": "Price Display"
+ },
+ {
+ "type": "text",
+ "id": "button_label",
+ "label": "Button Label",
+ "default": "BOOK NOW"
+ },
+ {
+ "type": "url",
+ "id": "button_link",
+ "label": "Button Link"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Lessons Page",
+ "blocks": [
+ {
+ "type": "lesson_card",
+ "settings": {
+ "label": "Private",
+ "title": "Virtual Lessons",
+ "description": "One-on-one virtual guitar lessons with Greg Koch via Zoom. All skill levels welcome.",
+ "features": "60 minute sessions|All skill levels|Personalized instruction|Zoom video call",
+ "button_label": "BOOK A LESSON"
+ }
+ },
+ {
+ "type": "lesson_card",
+ "settings": {
+ "label": "On Demand",
+ "title": "On-Demand Courses",
+ "description": "Self-paced video courses covering technique, tone, and the gristle approach to guitar.",
+ "features": "Watch at your own pace|HD video lessons|Downloadable tabs|Lifetime access",
+ "button_label": "BROWSE COURSES"
+ }
+ },
+ {
+ "type": "lesson_card",
+ "settings": {
+ "label": "TrueFire",
+ "title": "TrueFire Courses",
+ "description": "Full-length instructional courses available on the TrueFire platform.",
+ "features": "Professional production|Interactive tabs|Loop & slow down tools|Mobile app access",
+ "button_label": "VIEW ON TRUEFIRE"
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-press-hero.liquid b/sections/gk-press-hero.liquid
new file mode 100644
index 00000000000..339e8298799
--- /dev/null
+++ b/sections/gk-press-hero.liquid
@@ -0,0 +1,476 @@
+{%- style -%}
+ /* ── GK Press Hero (scoped under .gk-press-hero) ────────── */
+ .gk-press-hero {
+ background-color: #0D0D0D;
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ position: relative;
+ overflow: hidden;
+ }
+
+ /* Soft radial glow behind the title area (matches mockup proportions) */
+ .gk-press-hero::before {
+ content: '';
+ position: absolute;
+ top: 4%;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 560px;
+ height: 320px;
+ background: radial-gradient(ellipse at center, rgba(200, 96, 26, 0.16) 0%, transparent 65%);
+ pointer-events: none;
+ z-index: 0;
+ }
+
+ /* Bottom hairline fade */
+ .gk-press-hero::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 1px;
+ background: linear-gradient(to right, transparent, rgba(200, 96, 26, 0.3), transparent);
+ z-index: 1;
+ }
+
+ .gk-press-hero__inner {
+ max-width: var(--page-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ position: relative;
+ z-index: 2;
+ }
+
+ .gk-press-hero__content {
+ text-align: center;
+ max-width: 800px;
+ margin: 0 auto;
+ }
+
+ /* Kicker - "IN THE PRESS" */
+ .gk-press-hero__eyebrow {
+ display: block;
+ color: #C8601A;
+ font-size: 10px;
+ font-weight: 800;
+ letter-spacing: 6px;
+ text-transform: uppercase;
+ margin-bottom: 18px;
+ }
+
+ /* Headline - "PRESS & MEDIA" with orange ampersand */
+ .gk-press-hero__heading {
+ font-size: clamp(2.6rem, 8vw, 3.75rem);
+ font-weight: 900;
+ color: #FFFFFF;
+ text-transform: uppercase;
+ letter-spacing: -2px;
+ margin: 0 0 4px;
+ line-height: 0.92;
+ }
+
+ .gk-press-hero__heading .gk-ph-amp {
+ color: #C8601A;
+ }
+
+ /* Divider: hairlines + 45deg diamond */
+ .gk-press-hero__divider {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 14px;
+ margin: 22px auto;
+ width: auto;
+ }
+
+ .gk-press-hero__divider-line {
+ flex: 0 0 80px;
+ width: 80px;
+ height: 1px;
+ background: linear-gradient(to right, transparent, rgba(200, 96, 26, 0.6));
+ }
+
+ .gk-press-hero__divider-line:last-child {
+ background: linear-gradient(to right, rgba(200, 96, 26, 0.6), transparent);
+ }
+
+ .gk-press-hero__divider-dot {
+ width: 7px;
+ height: 7px;
+ background-color: #C8601A;
+ transform: rotate(45deg);
+ flex-shrink: 0;
+ box-shadow: 0 0 12px rgba(200, 96, 26, 0.85), 0 0 24px rgba(200, 96, 26, 0.35);
+ }
+
+ /* Lede paragraph (small, mixed-case, matches mockup) */
+ .gk-press-hero__subheading {
+ font-family: 'DM Sans', system-ui, -apple-system, sans-serif;
+ font-size: 13px;
+ font-weight: 400;
+ text-transform: none;
+ letter-spacing: 0.3px;
+ color: rgba(255, 255, 255, 0.55);
+ line-height: 1.7;
+ margin: 0 auto 28px;
+ max-width: 560px;
+ }
+
+ /* Optional second paragraph */
+ .gk-press-hero__intro {
+ font-family: 'DM Sans', system-ui, -apple-system, sans-serif;
+ font-size: 12px;
+ font-weight: 400;
+ text-transform: none;
+ letter-spacing: 0.3px;
+ color: rgba(255, 255, 255, 0.38);
+ line-height: 1.7;
+ max-width: 520px;
+ margin: -14px auto 28px;
+ }
+
+ /* ── Press Kit CTA - uses .button (molten orange from base.css) ── */
+ .gk-press-hero__cta {
+ margin: 0 auto 8px;
+ }
+
+ /* Press Kit button - exact molten match to the mockup .b3 */
+ .gk-press-hero__kit-btn {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ overflow: hidden;
+ text-decoration: none;
+ border: none !important;
+ border-radius: 10px;
+ padding: 15px 30px !important;
+ min-width: 0;
+ min-height: 0;
+ font-weight: 800;
+ font-size: 12px !important;
+ letter-spacing: 2.5px !important;
+ text-transform: uppercase;
+ color: #1a0e04 !important;
+ background: linear-gradient(180deg, #f0a85a 0%, #c8601a 60%, #a8490d 100%) !important;
+ box-shadow:
+ 0 1px 0 rgba(255, 255, 255, 0.5) inset,
+ 0 -3px 8px rgba(100, 40, 0, 0.5) inset,
+ 0 10px 24px -8px rgba(200, 96, 26, 0.75),
+ 0 3px 6px rgba(0, 0, 0, 0.6) !important;
+ transition: transform 0.15s ease, filter 0.25s ease;
+ }
+
+ .gk-press-hero__kit-btn:hover {
+ transform: translateY(-2px);
+ filter: brightness(1.04);
+ }
+
+ .gk-press-hero__kit-btn svg {
+ width: 14px;
+ height: 14px;
+ fill: #1a0e04;
+ flex-shrink: 0;
+ position: relative;
+ z-index: 1;
+ }
+
+ /* ── Featured In ── */
+ .gk-press-hero__featured-in {
+ margin-top: 52px;
+ padding-top: 36px;
+ border-top: 1px solid rgba(255, 255, 255, 0.07);
+ }
+
+ .gk-press-hero__featured-in-label {
+ text-transform: uppercase;
+ letter-spacing: 4px;
+ font-size: 10px;
+ font-weight: 700;
+ color: rgba(255, 255, 255, 0.3);
+ display: block;
+ margin-bottom: 20px;
+ }
+
+ /* Cards grid: 3-up desktop, 2-up tablet/mobile */
+ .gk-press-hero__pub-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 12px;
+ max-width: 680px;
+ margin: 0 auto;
+ }
+
+ /* Each publication card */
+ .gk-press-hero__pub-card {
+ position: relative;
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.015));
+ border: 1px solid rgba(255, 255, 255, 0.09);
+ border-radius: 10px;
+ padding: 20px 14px;
+ text-align: center;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 11px;
+ font-weight: 700;
+ color: rgba(255, 255, 255, 0.6);
+ transition: border-color 200ms ease, color 200ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
+ overflow: hidden;
+ }
+
+ /* Top-edge highlight hairline */
+ .gk-press-hero__pub-card::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 14%;
+ right: 14%;
+ height: 1px;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.25), transparent);
+ pointer-events: none;
+ }
+
+ .gk-press-hero__pub-card:hover {
+ border-color: rgba(200, 96, 26, 0.5);
+ color: #f0a060;
+ transform: translateY(-2px);
+ }
+
+ /* ── Responsive ── */
+ @media screen and (max-width: 989px) {
+ .gk-press-hero::before {
+ width: 600px;
+ height: 380px;
+ }
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-press-hero__heading {
+ font-size: clamp(2.2rem, 12vw, 3.2rem);
+ letter-spacing: 1px;
+ }
+ .gk-press-hero__pub-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ .gk-press-hero__divider {
+ width: 200px;
+ }
+ }
+
+ /* ── Reduced motion ── */
+ @media (prefers-reduced-motion: reduce) {
+ .gk-press-hero__pub-card:hover {
+ transform: none;
+ }
+ }
+{%- endstyle -%}
+
+
+
+
+
+ {%- if section.settings.eyebrow != blank -%}
+
{{ section.settings.eyebrow | escape }}
+ {%- endif -%}
+
+ {%- if section.settings.heading != blank -%}
+ {%- comment -%} Color the literal "&" in the heading orange - escape first, then wrap the entity. {%- endcomment -%}
+ {%- assign heading_safe = section.settings.heading | escape -%}
+ {%- assign heading_html = heading_safe | replace: '&', '
& ' -%}
+
{{ heading_html }}
+ {%- endif -%}
+
+
+
+
+
+
+
+ {%- if section.settings.subheading != blank -%}
+
{{ section.settings.subheading | escape }}
+ {%- endif -%}
+
+ {%- if section.settings.intro_text != blank -%}
+
{{ section.settings.intro_text | escape }}
+ {%- endif -%}
+
+ {%- if section.settings.press_kit_url != blank -%}
+
+ {%- endif -%}
+
+ {%- if section.settings.show_featured_in -%}
+ {%- assign has_pubs = false -%}
+ {%- if section.settings.pub_1 != blank or section.settings.pub_2 != blank or section.settings.pub_3 != blank or section.settings.pub_4 != blank or section.settings.pub_5 != blank or section.settings.pub_6 != blank -%}
+ {%- assign has_pubs = true -%}
+ {%- endif -%}
+
+ {%- if has_pubs -%}
+
+
Featured In
+
+ {%- if section.settings.pub_1 != blank -%}
+
{{ section.settings.pub_1 | escape }}
+ {%- endif -%}
+ {%- if section.settings.pub_2 != blank -%}
+
{{ section.settings.pub_2 | escape }}
+ {%- endif -%}
+ {%- if section.settings.pub_3 != blank -%}
+
{{ section.settings.pub_3 | escape }}
+ {%- endif -%}
+ {%- if section.settings.pub_4 != blank -%}
+
{{ section.settings.pub_4 | escape }}
+ {%- endif -%}
+ {%- if section.settings.pub_5 != blank -%}
+
{{ section.settings.pub_5 | escape }}
+ {%- endif -%}
+ {%- if section.settings.pub_6 != blank -%}
+
{{ section.settings.pub_6 | escape }}
+ {%- endif -%}
+
+
+ {%- endif -%}
+ {%- endif -%}
+
+
+
+
+
+{% schema %}
+{
+ "name": "GK Press Hero",
+ "tag": "section",
+ "class": "gk-press-hero-section",
+ "settings": [
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow / Kicker",
+ "default": "In the Press"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Headline",
+ "default": "Press & Media",
+ "info": "The '&' character will automatically render in orange."
+ },
+ {
+ "type": "textarea",
+ "id": "subheading",
+ "label": "Lede Paragraph",
+ "default": "Greg Koch has been featured in leading guitar publications, interviews, and music media outlets around the world."
+ },
+ {
+ "type": "textarea",
+ "id": "intro_text",
+ "label": "Intro Paragraph (optional)",
+ "info": "Optional second line of supporting copy beneath the lede."
+ },
+ {
+ "type": "header",
+ "content": "Press Kit Download"
+ },
+ {
+ "type": "url",
+ "id": "press_kit_url",
+ "label": "Press Kit File URL",
+ "info": "Upload your press kit PDF to Files in Shopify admin, then paste the URL here. Leave blank to hide the button."
+ },
+ {
+ "type": "text",
+ "id": "press_kit_label",
+ "label": "Button Label",
+ "default": "Download Press Kit"
+ },
+ {
+ "type": "header",
+ "content": "Featured In"
+ },
+ {
+ "type": "checkbox",
+ "id": "show_featured_in",
+ "label": "Show Featured In",
+ "default": true
+ },
+ {
+ "type": "text",
+ "id": "pub_1",
+ "label": "Publication 1",
+ "default": "Relix"
+ },
+ {
+ "type": "text",
+ "id": "pub_2",
+ "label": "Publication 2",
+ "default": "Vintage Guitar"
+ },
+ {
+ "type": "text",
+ "id": "pub_3",
+ "label": "Publication 3",
+ "default": "Guitar Player"
+ },
+ {
+ "type": "text",
+ "id": "pub_4",
+ "label": "Publication 4",
+ "default": "Premier Guitar"
+ },
+ {
+ "type": "text",
+ "id": "pub_5",
+ "label": "Publication 5",
+ "default": "Guitar World"
+ },
+ {
+ "type": "text",
+ "id": "pub_6",
+ "label": "Publication 6",
+ "default": "Palm Beach Arts"
+ },
+ {
+ "type": "header",
+ "content": "Spacing"
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 40,
+ "max": 160,
+ "step": 8,
+ "default": 96,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 40,
+ "max": 160,
+ "step": 8,
+ "default": 96,
+ "unit": "px"
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Press Hero"
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-press-media.liquid b/sections/gk-press-media.liquid
new file mode 100644
index 00000000000..480a7655fa0
--- /dev/null
+++ b/sections/gk-press-media.liquid
@@ -0,0 +1,417 @@
+{%- style -%}
+ .gk-press-media {
+ background-color: #0D0D0D;
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ }
+
+ .gk-press-media__inner {
+ max-width: var(--page-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ }
+
+ /* ── Shared section header ── */
+ .gk-press-media__section-eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.72rem;
+ color: #E8690A;
+ margin-bottom: 12px;
+ display: block;
+ }
+
+ .gk-press-media__section-heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(1.8rem, 4vw, 2.8rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ margin: 0 0 14px 0;
+ line-height: 1;
+ }
+
+ .gk-press-media__section-desc {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 1rem;
+ line-height: 1.72;
+ max-width: 700px;
+ margin: 0;
+ }
+
+ /* ── Video block ── */
+ .gk-press-media__video-wrap {
+ margin-bottom: {{ section.settings.section_gap }}px;
+ }
+
+ .gk-press-media__video-header {
+ margin-bottom: 28px;
+ }
+
+ .gk-press-media__video-container {
+ position: relative;
+ width: 100%;
+ padding-bottom: 56.25%;
+ background-color: #111111;
+ border: 1px solid #272727;
+ overflow: hidden;
+ }
+
+ .gk-press-media__video-container iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+ display: block;
+ }
+
+ /* ── Divider between video and articles ── */
+ .gk-press-media__section-divider {
+ height: 1px;
+ background: linear-gradient(to right, transparent, #272727, transparent);
+ margin-bottom: {{ section.settings.section_gap }}px;
+ }
+
+ /* ── Articles header ── */
+ .gk-press-media__articles-header {
+ margin-bottom: 32px;
+ }
+
+ /* ── Article grid ── */
+ .gk-press-media__grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 24px;
+ }
+
+ .gk-press-media__card {
+ background-color: #141414;
+ border: 1px solid #272727;
+ padding: 32px;
+ display: flex;
+ flex-direction: column;
+ text-decoration: none;
+ transition: border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease;
+ position: relative;
+ }
+
+ .gk-press-media__card::before {
+ content: '';
+ position: absolute;
+ inset: 0;
+ background: linear-gradient(135deg, rgba(232, 105, 10, 0.03) 0%, transparent 60%);
+ opacity: 0;
+ transition: opacity 150ms ease;
+ pointer-events: none;
+ }
+
+ .gk-press-media__card:hover {
+ border-color: rgba(232, 105, 10, 0.5);
+ box-shadow: 0 8px 32px rgba(232, 105, 10, 0.10), 0 2px 8px rgba(0, 0, 0, 0.4);
+ transform: translateY(-2px);
+ }
+
+ .gk-press-media__card:hover::before {
+ opacity: 1;
+ }
+
+ .gk-press-media__card-pub {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.75rem;
+ color: #E8690A;
+ margin-bottom: 14px;
+ display: block;
+ }
+
+ .gk-press-media__card-title {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: 1.5rem;
+ color: #E8E8E8;
+ letter-spacing: 1px;
+ line-height: 1.2;
+ margin: 0 0 14px 0;
+ }
+
+ .gk-press-media__card-desc {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 1rem;
+ line-height: 1.68;
+ margin: 0;
+ flex: 1;
+ }
+
+ .gk-press-media__card-cta {
+ font-family: 'DM Sans', sans-serif;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.78rem;
+ font-weight: 500;
+ color: #E8690A;
+ text-decoration: none;
+ border-bottom: 1px solid transparent;
+ transition: border-color 150ms ease;
+ display: inline-block;
+ margin-top: 24px;
+ }
+
+ .gk-press-media__card:hover .gk-press-media__card-cta {
+ border-bottom-color: #E8690A;
+ }
+
+ @media screen and (max-width: 989px) {
+ .gk-press-media__grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-press-media__grid {
+ grid-template-columns: 1fr;
+ }
+
+ .gk-press-media__card {
+ padding: 24px;
+ }
+ }
+{%- endstyle -%}
+
+{%- liquid
+ assign video_url = section.settings.video_url
+ if video_url contains 'youtu.be/'
+ assign video_id = video_url | split: 'youtu.be/' | last | split: '?' | first
+ elsif video_url contains 'v='
+ assign video_id = video_url | split: 'v=' | last | split: '&' | first
+ else
+ assign video_id = video_url
+ endif
+-%}
+
+
+
+{% schema %}
+{
+ "name": "GK Press Media",
+ "tag": "section",
+ "class": "gk-press-media-section",
+ "settings": [
+ {
+ "type": "header",
+ "content": "Featured Video"
+ },
+ {
+ "type": "text",
+ "id": "video_eyebrow",
+ "label": "Video Eyebrow",
+ "default": "Featured Interview"
+ },
+ {
+ "type": "text",
+ "id": "video_heading",
+ "label": "Video Heading",
+ "default": "Greg Koch Interview with Rick Beato"
+ },
+ {
+ "type": "textarea",
+ "id": "video_description",
+ "label": "Video Description",
+ "default": "Legendary guitar educator and YouTube creator Rick Beato sits down with Greg Koch for a wide-ranging conversation about tone, technique, and the pursuit of musical truth."
+ },
+ {
+ "type": "text",
+ "id": "video_url",
+ "label": "YouTube Video URL",
+ "default": "https://www.youtube.com/watch?v=oLOg9ZLiHtg",
+ "info": "Paste the full YouTube URL (e.g. https://www.youtube.com/watch?v=...). Leave blank to hide the video block."
+ },
+ {
+ "type": "header",
+ "content": "Article Grid"
+ },
+ {
+ "type": "text",
+ "id": "articles_eyebrow",
+ "label": "Articles Eyebrow",
+ "default": "In the Press"
+ },
+ {
+ "type": "text",
+ "id": "articles_heading",
+ "label": "Articles Heading",
+ "default": "Featured Coverage"
+ },
+ {
+ "type": "header",
+ "content": "Spacing"
+ },
+ {
+ "type": "range",
+ "id": "section_gap",
+ "label": "Gap Between Video & Articles",
+ "min": 32,
+ "max": 120,
+ "step": 8,
+ "default": 64,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 0,
+ "max": 120,
+ "step": 8,
+ "default": 64,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 0,
+ "max": 120,
+ "step": 8,
+ "default": 64,
+ "unit": "px"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "article_card",
+ "name": "Article Card",
+ "settings": [
+ {
+ "type": "text",
+ "id": "publication",
+ "label": "Publication Name",
+ "default": "Publication Name"
+ },
+ {
+ "type": "text",
+ "id": "title",
+ "label": "Article Title",
+ "default": "Article Title"
+ },
+ {
+ "type": "textarea",
+ "id": "description",
+ "label": "Short Description",
+ "default": "A brief description of the article and what makes it worth reading."
+ },
+ {
+ "type": "url",
+ "id": "url",
+ "label": "Article URL"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Press Media",
+ "blocks": [
+ {
+ "type": "article_card",
+ "settings": {
+ "publication": "Relix Magazine",
+ "title": "All Blues: Greg Koch Connects with Devon Allman and Revisits His Record Collection",
+ "description": "A deep dive into Greg Koch's influences, record collection, and connection with Devon Allman.",
+ "url": "https://relix.com/articles/detail/all-blues-greg-koch-connects-with-devon-allman-and-revisits-his-record-collection/"
+ }
+ },
+ {
+ "type": "article_card",
+ "settings": {
+ "publication": "Vintage Guitar Magazine",
+ "title": "Greg Koch Feature Interview",
+ "description": "Vintage Guitar Magazine explores Greg Koch's career, tone philosophy, and unique playing style.",
+ "url": "https://www.vintageguitar.com/88432/greg-koch-3/"
+ }
+ },
+ {
+ "type": "article_card",
+ "settings": {
+ "publication": "Palm Beach Arts Paper",
+ "title": "The Best Guitarist Working Today? That Might Be Greg Koch",
+ "description": "A feature exploring Greg Koch's reputation as one of the most dynamic guitarists performing today.",
+ "url": "https://palmbeachartspaper.com/the-best-guitarist-working-today-that-might-be-greg-koch/"
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-press-page.liquid b/sections/gk-press-page.liquid
new file mode 100644
index 00000000000..fc16f845f0f
--- /dev/null
+++ b/sections/gk-press-page.liquid
@@ -0,0 +1,360 @@
+{%- style -%}
+ .gk-press {
+ background-color: {{ section.settings.bg_color }};
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ }
+
+ .gk-press__inner {
+ max-width: var(--page-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ }
+
+ .gk-press__header {
+ text-align: center;
+ margin-bottom: 48px;
+ }
+
+ .gk-press__eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.75rem;
+ color: #E8690A;
+ margin-bottom: 12px;
+ display: block;
+ }
+
+ .gk-press__heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(2.5rem, 6vw, 4.5rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ margin: 0 0 12px 0;
+ }
+
+ .gk-press__subtext {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 1.1rem;
+ max-width: 600px;
+ margin: 0 auto;
+ line-height: 1.6;
+ }
+
+ .gk-press__grid {
+ display: grid;
+ grid-template-columns: repeat({{ section.settings.columns }}, 1fr);
+ gap: 24px;
+ }
+
+ .gk-press__card {
+ background-color: #141414;
+ border: 1px solid #272727;
+ padding: 32px;
+ display: flex;
+ flex-direction: column;
+ transition: all 0.3s ease;
+ }
+
+ .gk-press__card:hover {
+ border-color: #E8690A;
+ }
+
+ .gk-press__quote {
+ font-family: 'DM Sans', sans-serif;
+ font-size: 1.05rem;
+ font-style: italic;
+ color: #E8E8E8;
+ line-height: 1.7;
+ margin: 0 0 20px 0;
+ flex: 1;
+ position: relative;
+ padding-left: 20px;
+ border-left: 3px solid #E8690A;
+ }
+
+ .gk-press__source {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.7rem;
+ color: #E8690A;
+ margin-bottom: 4px;
+ display: block;
+ }
+
+ .gk-press__author {
+ font-family: 'DM Sans', sans-serif;
+ color: #777777;
+ font-size: 0.85rem;
+ }
+
+ .gk-press__card-link {
+ display: inline-block;
+ font-family: 'DM Sans', sans-serif;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.7rem;
+ font-weight: 500;
+ color: #E8690A;
+ text-decoration: none;
+ margin-top: 16px;
+ border-bottom: 1px solid transparent;
+ transition: border-color 0.3s ease;
+ }
+
+ .gk-press__card-link:hover {
+ border-bottom-color: #E8690A;
+ }
+
+ /* Featured press - large quote */
+ .gk-press__featured {
+ grid-column: 1 / -1;
+ text-align: center;
+ padding: 60px 48px;
+ background-color: #141414;
+ border: 1px solid #272727;
+ margin-bottom: 24px;
+ }
+
+ .gk-press__featured .gk-press__quote {
+ border-left: none;
+ padding-left: 0;
+ font-size: 1.4rem;
+ max-width: 800px;
+ margin: 0 auto 24px;
+ }
+
+ .gk-press__featured .gk-press__quote::before {
+ content: """;
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: 4rem;
+ color: #E8690A;
+ display: block;
+ line-height: 1;
+ margin-bottom: 12px;
+ font-style: normal;
+ }
+
+ @media screen and (max-width: 989px) {
+ .gk-press__grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-press__grid {
+ grid-template-columns: 1fr;
+ }
+
+ .gk-press__featured {
+ padding: 40px 24px;
+ }
+ }
+{%- endstyle -%}
+
+
+
+
+
+ {%- if section.blocks.size > 0 -%}
+
+ {%- for block in section.blocks -%}
+ {%- if block.type == 'featured_quote' -%}
+
+ {%- if block.settings.quote != blank -%}
+
{{ block.settings.quote }}
+ {%- endif -%}
+ {%- if block.settings.source != blank -%}
+
{{ block.settings.source }}
+ {%- endif -%}
+ {%- if block.settings.author != blank -%}
+
{{ block.settings.author }}
+ {%- endif -%}
+
+ {%- elsif block.type == 'press_quote' -%}
+
+ {%- if block.settings.quote != blank -%}
+
{{ block.settings.quote }}
+ {%- endif -%}
+ {%- if block.settings.source != blank -%}
+
{{ block.settings.source }}
+ {%- endif -%}
+ {%- if block.settings.author != blank -%}
+
{{ block.settings.author }}
+ {%- endif -%}
+ {%- if block.settings.link != blank -%}
+
READ ARTICLE →
+ {%- endif -%}
+
+ {%- endif -%}
+ {%- endfor -%}
+
+ {%- endif -%}
+
+
+
+{% schema %}
+{
+ "name": "GK Press Page",
+ "tag": "section",
+ "class": "gk-press-section",
+ "settings": [
+ {
+ "type": "color",
+ "id": "bg_color",
+ "label": "Background Color",
+ "default": "#0D0D0D"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text",
+ "default": "In the Press"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "PRESS"
+ },
+ {
+ "type": "textarea",
+ "id": "subtext",
+ "label": "Subtext",
+ "default": "What they're saying about the Gristleman."
+ },
+ {
+ "type": "select",
+ "id": "columns",
+ "label": "Desktop Columns",
+ "default": "3",
+ "options": [
+ { "value": "2", "label": "2 Columns" },
+ { "value": "3", "label": "3 Columns" }
+ ]
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 60,
+ "unit": "px"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "featured_quote",
+ "name": "Featured Quote",
+ "limit": 1,
+ "settings": [
+ {
+ "type": "textarea",
+ "id": "quote",
+ "label": "Quote Text",
+ "default": "Greg Koch is one of the most creative and entertaining guitarists on the planet."
+ },
+ {
+ "type": "text",
+ "id": "source",
+ "label": "Publication / Source",
+ "default": "Guitar Player Magazine"
+ },
+ {
+ "type": "text",
+ "id": "author",
+ "label": "Author (optional)"
+ }
+ ]
+ },
+ {
+ "type": "press_quote",
+ "name": "Press Quote",
+ "settings": [
+ {
+ "type": "textarea",
+ "id": "quote",
+ "label": "Quote Text",
+ "default": "A remarkable display of technique and feel."
+ },
+ {
+ "type": "text",
+ "id": "source",
+ "label": "Publication / Source",
+ "default": "Premier Guitar"
+ },
+ {
+ "type": "text",
+ "id": "author",
+ "label": "Author (optional)"
+ },
+ {
+ "type": "url",
+ "id": "link",
+ "label": "Article Link"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Press Page",
+ "blocks": [
+ {
+ "type": "featured_quote",
+ "settings": {
+ "quote": "Greg Koch is one of the most creative and entertaining guitarists on the planet.",
+ "source": "Guitar Player Magazine"
+ }
+ },
+ {
+ "type": "press_quote",
+ "settings": {
+ "quote": "A remarkable display of technique and feel that is entirely his own.",
+ "source": "Premier Guitar"
+ }
+ },
+ {
+ "type": "press_quote",
+ "settings": {
+ "quote": "Koch channels the spirit of Hendrix, SRV, and Danny Gatton through his own unique lens.",
+ "source": "Vintage Guitar Magazine"
+ }
+ },
+ {
+ "type": "press_quote",
+ "settings": {
+ "quote": "Milwaukee's best-kept secret, unleashing gristle on an unsuspecting world.",
+ "source": "Guitar World"
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-press-quotes.liquid b/sections/gk-press-quotes.liquid
new file mode 100644
index 00000000000..a91be505544
--- /dev/null
+++ b/sections/gk-press-quotes.liquid
@@ -0,0 +1,328 @@
+{%- style -%}
+ .gk-press-quotes {
+ background-color: #0D0D0D;
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ position: relative;
+ overflow: hidden;
+ }
+
+ .gk-press-quotes::before {
+ content: '';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 700px;
+ height: 400px;
+ background: radial-gradient(ellipse at center, rgba(232, 105, 10, 0.04) 0%, transparent 70%);
+ pointer-events: none;
+ z-index: 0;
+ }
+
+ .gk-press-quotes__inner {
+ max-width: var(--page-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ position: relative;
+ z-index: 1;
+ }
+
+ /* ── Section header ── */
+ .gk-press-quotes__header {
+ text-align: center;
+ margin-bottom: 64px;
+ }
+
+ .gk-press-quotes__eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 4px;
+ font-size: 0.82rem;
+ color: #E8690A;
+ margin-bottom: 16px;
+ display: block;
+ }
+
+ .gk-press-quotes__heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(2rem, 5vw, 3.2rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ margin: 0;
+ line-height: 1;
+ }
+
+ /* ── Quote list ── */
+ .gk-press-quotes__list {
+ display: flex;
+ flex-direction: column;
+ gap: 0;
+ max-width: 900px;
+ margin: 0 auto;
+ }
+
+ /* ── Individual quote block ── */
+ .gk-press-quotes__item {
+ padding: 52px 48px;
+ text-align: center;
+ position: relative;
+ border-bottom: 1px solid #1C1C1C;
+ transition: background-color 150ms ease;
+ }
+
+ .gk-press-quotes__item:first-child {
+ border-top: 1px solid #1C1C1C;
+ }
+
+ .gk-press-quotes__item:hover {
+ background-color: rgba(232, 105, 10, 0.02);
+ }
+
+ /* Large decorative quote mark */
+ .gk-press-quotes__mark {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: 3.5rem;
+ color: #E8690A;
+ line-height: 1;
+ display: block;
+ margin-bottom: 4px;
+ text-shadow: 0 0 20px rgba(232, 105, 10, 0.35);
+ font-style: normal;
+ user-select: none;
+ }
+
+ /* Quote text */
+ .gk-press-quotes__text {
+ font-family: 'DM Sans', sans-serif;
+ font-size: clamp(1.25rem, 2.5vw, 1.7rem);
+ font-style: italic;
+ color: #E8E8E8;
+ line-height: 1.55;
+ margin: 0 0 28px 0;
+ letter-spacing: 0.01em;
+ }
+
+ .gk-press-quotes__item--emphasis .gk-press-quotes__text {
+ font-size: clamp(1.45rem, 3vw, 2rem);
+ color: #F0F0F0;
+ }
+
+ /* Orange accent rule */
+ .gk-press-quotes__rule {
+ width: 40px;
+ height: 2px;
+ background-color: #E8690A;
+ margin: 0 auto 20px;
+ box-shadow: 0 0 8px rgba(232, 105, 10, 0.5);
+ }
+
+ /* Attribution */
+ .gk-press-quotes__attribution {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 4px;
+ }
+
+ .gk-press-quotes__author {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.8rem;
+ color: #E8690A;
+ display: block;
+ }
+
+ .gk-press-quotes__source {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 0.7rem;
+ color: #555555;
+ display: block;
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-press-quotes__item {
+ padding: 40px 24px;
+ }
+
+ .gk-press-quotes__text {
+ font-size: clamp(1.1rem, 5vw, 1.4rem);
+ }
+
+ .gk-press-quotes__item--emphasis .gk-press-quotes__text {
+ font-size: clamp(1.2rem, 5.5vw, 1.55rem);
+ }
+
+ .gk-press-quotes__mark {
+ font-size: 2.8rem;
+ }
+ }
+{%- endstyle -%}
+
+
+
+
+ {%- if section.settings.show_header and section.settings.heading != blank -%}
+
+ {%- endif -%}
+
+ {%- if section.blocks.size > 0 -%}
+
+ {%- for block in section.blocks -%}
+ {%- if block.type == 'quote_block' -%}
+
+
+
“
+
+ {%- if block.settings.quote != blank -%}
+
+ {{ block.settings.quote }}
+
+ {%- endif -%}
+
+
+
+
+ {%- if block.settings.attribution != blank -%}
+ {{ block.settings.attribution }}
+ {%- endif -%}
+ {%- if block.settings.source != blank -%}
+ {{ block.settings.source }}
+ {%- endif -%}
+
+
+
+ {%- endif -%}
+ {%- endfor -%}
+
+ {%- endif -%}
+
+
+
+
+{% schema %}
+{
+ "name": "GK Press Quotes",
+ "tag": "section",
+ "class": "gk-press-quotes-section",
+ "settings": [
+ {
+ "type": "checkbox",
+ "id": "show_header",
+ "label": "Show Section Header",
+ "default": true
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text",
+ "default": "What They're Saying"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Section Heading",
+ "default": "Press Praise"
+ },
+ {
+ "type": "header",
+ "content": "Spacing"
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 0,
+ "max": 120,
+ "step": 8,
+ "default": 64,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 0,
+ "max": 120,
+ "step": 8,
+ "default": 64,
+ "unit": "px"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "quote_block",
+ "name": "Press Quote",
+ "settings": [
+ {
+ "type": "textarea",
+ "id": "quote",
+ "label": "Quote Text",
+ "default": "Enter quote text here.",
+ "info": "The spoken or published quote — do not include quotation marks."
+ },
+ {
+ "type": "text",
+ "id": "attribution",
+ "label": "Attribution (publication or person)",
+ "default": "Publication Name"
+ },
+ {
+ "type": "text",
+ "id": "source",
+ "label": "Source Label (optional)",
+ "info": "Optional secondary line below attribution — e.g. an article title or date."
+ },
+ {
+ "type": "checkbox",
+ "id": "emphasis",
+ "label": "Emphasis (larger text)",
+ "default": false,
+ "info": "Makes this quote slightly larger — useful for a standout or hero quote."
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Press Quotes",
+ "blocks": [
+ {
+ "type": "quote_block",
+ "settings": {
+ "quote": "The best guitarist working today.",
+ "attribution": "Palm Beach Arts Paper",
+ "emphasis": true
+ }
+ },
+ {
+ "type": "quote_block",
+ "settings": {
+ "quote": "A master of tone, groove, and musical personality.",
+ "attribution": "Vintage Guitar Magazine",
+ "emphasis": false
+ }
+ },
+ {
+ "type": "quote_block",
+ "settings": {
+ "quote": "Add Joe Bonamassa quote here — enter the approved wording in the theme editor.",
+ "attribution": "Joe Bonamassa",
+ "emphasis": false
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-shop-categories.liquid b/sections/gk-shop-categories.liquid
new file mode 100644
index 00000000000..5b07760618b
--- /dev/null
+++ b/sections/gk-shop-categories.liquid
@@ -0,0 +1,882 @@
+{% comment %}
+ GK Shop Categories (Shop Landing Section) — Premium animated rebuild
+ - Glassmorphism cards on near-black, single burnt-orange accent (#C8601A)
+ - Animated inline SVG icon per category (CSS only, GPU friendly)
+ - Staggered fade-up on load, resting "breathing" glow, rich hover state
+ - Live item count from the linked collection (hidden gracefully when none)
+ - Repeatable blocks: collection, title, description, icon, featured
+ - All motion respects prefers-reduced-motion
+ - Scoped CSS only (prefix: .gk-shop) so nothing leaks into other Dawn sections
+
+ AUTO-SCROLL (preserved):
+ - If a collection URL ends with #products we smooth-scroll to the product grid.
+ - Example: /collections/cds#products
+{% endcomment %}
+
+{%- assign accent = '#C8601A' -%}
+
+
+
+
+
+ {%- comment -%}
+ Count UNIQUE category blocks (by title, falling back to collection handle)
+ so the row divider lands correctly and a duplicate tile can never inflate
+ the layout into an orphan wrap.
+ {%- endcomment -%}
+ {%- assign cat_total = 0 -%}
+ {%- assign seen_count = '' -%}
+ {%- for block in section.blocks -%}
+ {%- if block.type == 'category' -%}
+ {%- assign ckey = block.settings.title | default: '' | downcase | strip -%}
+ {%- if ckey == blank and block.settings.collection != blank -%}{%- assign ckey = block.settings.collection.handle -%}{%- endif -%}
+ {%- assign ckey = '[' | append: ckey | append: ']' -%}
+ {%- unless seen_count contains ckey -%}
+ {%- assign cat_total = cat_total | plus: 1 -%}
+ {%- assign seen_count = seen_count | append: ckey -%}
+ {%- endunless -%}
+ {%- endif -%}
+ {%- endfor -%}
+
+
+
+
+ {% style %}
+ /* =========================================================
+ GK SHOP CATEGORIES (fully scoped under .gk-shop)
+ Single accent: {{ accent }}
+ ========================================================= */
+ .gk-shop {
+ --gk-accent: {{ accent }};
+ --gk-accent-soft: rgba(200, 96, 26, 0.6);
+ --gk-accent-glow: rgba(200, 96, 26, 0.28);
+ --gk-hi: #f0a060;
+ --gk-card: rgba(255, 255, 255, 0.038);
+ --gk-card-line: rgba(255, 255, 255, 0.08);
+ position: relative;
+ padding: clamp(44px, 6vw, 84px) 0;
+ background: transparent;
+ color: #f4f4f5;
+ }
+
+ .gk-shop__wrap {
+ width: min(1200px, calc(100% - 48px));
+ margin: 0 auto;
+ }
+
+ .gk-shop__hero {
+ margin-bottom: clamp(26px, 3.4vw, 44px);
+ }
+
+ .gk-shop__kicker {
+ letter-spacing: 0.18em;
+ text-transform: uppercase;
+ font-size: 12px;
+ font-weight: 800;
+ color: var(--gk-accent);
+ margin-bottom: 12px;
+ }
+
+ .gk-shop__heading {
+ margin: 0;
+ line-height: 0.95;
+ font-weight: 900;
+ letter-spacing: -0.02em;
+ text-transform: uppercase;
+ font-size: clamp(44px, 8vw, 86px);
+ }
+
+ .gk-shop__subheading {
+ margin-top: 14px;
+ max-width: 60ch;
+ opacity: 0.82;
+ font-size: 16px;
+ line-height: 1.55;
+ }
+
+ .gk-shop__grid {
+ display: grid;
+ gap: 18px;
+ grid-template-columns: repeat(12, 1fr);
+ align-items: stretch;
+ }
+
+ /* Row divider (full width thin gradient line between the two rows) */
+ .gk-shop__divider {
+ grid-column: 1 / -1;
+ height: 1px;
+ margin: 6px 0;
+ background: linear-gradient(
+ 90deg,
+ transparent,
+ rgba(200, 96, 26, 0.55) 22%,
+ rgba(240, 160, 96, 0.65) 50%,
+ rgba(200, 96, 26, 0.55) 78%,
+ transparent
+ );
+ opacity: 0.7;
+ }
+
+ /* ---- Card ---- */
+ .gk-shop__card {
+ grid-column: span 3; /* 4-up on desktop */
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ min-height: 230px;
+ border-radius: 12px;
+ padding: 20px 20px 18px;
+ text-decoration: none;
+ color: inherit;
+ isolation: isolate;
+ overflow: hidden;
+
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0) 22%),
+ rgba(255, 255, 255, 0.04);
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ backdrop-filter: blur(8px);
+ -webkit-backdrop-filter: blur(8px);
+ box-shadow:
+ 0 10px 30px -12px rgba(0, 0, 0, 0.8),
+ inset 0 1px 0 rgba(255, 255, 255, 0.07);
+
+ transition:
+ transform 220ms cubic-bezier(0.22, 1, 0.36, 1),
+ border-color 220ms ease,
+ box-shadow 220ms ease;
+ will-change: transform;
+
+ /* load-in */
+ opacity: 0;
+ transform: translateY(16px);
+ animation: gk-fadeUp 520ms cubic-bezier(0.22, 1, 0.36, 1) forwards;
+ animation-delay: var(--gk-delay, 0ms);
+ }
+
+ .gk-shop__card--wide {
+ grid-column: span 4; /* 3-up second row */
+ }
+
+ /* Corner orange glow that sweeps in from top-left on hover */
+ .gk-shop__card::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ z-index: -1;
+ background: radial-gradient(
+ 420px 260px at 0% 0%,
+ var(--gk-accent-glow),
+ transparent 60%
+ );
+ opacity: 0;
+ transform: translate(-12px, -12px);
+ transition: opacity 260ms ease, transform 260ms ease;
+ pointer-events: none;
+ }
+
+ /* Crisp highlight line across the top edge for resting depth */
+ .gk-shop__card::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 14%;
+ right: 14%;
+ height: 1px;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
+ pointer-events: none;
+ }
+
+ .gk-shop__card.is-featured {
+ border-top: 2px solid var(--gk-accent);
+ }
+
+ .gk-shop__badge {
+ position: absolute;
+ top: 12px;
+ right: 12px;
+ z-index: 2;
+ font-size: 10px;
+ font-weight: 900;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ color: #120a04;
+ background: var(--gk-accent);
+ padding: 4px 8px;
+ border-radius: 999px;
+ box-shadow: 0 0 16px rgba(200, 96, 26, 0.5);
+ }
+
+ /* ---- Icon tile ---- */
+ .gk-shop__iconTile {
+ position: relative;
+ width: 56px;
+ height: 56px;
+ border-radius: 12px;
+ display: grid;
+ place-items: center;
+ margin-bottom: 16px;
+ background: rgba(255, 255, 255, 0.05);
+ border: 1px solid var(--gk-card-line);
+ overflow: hidden;
+ color: var(--gk-accent);
+ }
+
+ /* breathing glow behind the icon (alive at rest) */
+ .gk-shop__iconGlow {
+ position: absolute;
+ inset: 0;
+ border-radius: inherit;
+ background: radial-gradient(circle at 50% 50%, var(--gk-accent-glow), transparent 68%);
+ opacity: 0.45; /* always-on warm anchor, even at rest / reduced motion */
+ transform: scale(0.85);
+ animation: gk-breathe 4s ease-in-out infinite;
+ transition: filter 220ms ease;
+ pointer-events: none;
+ }
+
+ /* hover raises the icon glow (filter is not animated, so it always applies) */
+ .gk-shop__card:hover .gk-shop__iconGlow {
+ filter: brightness(1.7) saturate(1.15);
+ }
+
+ /* light sheen wipe across the tile on hover */
+ .gk-shop__sheen {
+ position: absolute;
+ top: 0;
+ left: -120%;
+ width: 80%;
+ height: 100%;
+ background: linear-gradient(
+ 100deg,
+ transparent,
+ rgba(255, 255, 255, 0.22),
+ transparent
+ );
+ transform: skewX(-18deg);
+ pointer-events: none;
+ }
+
+ .gk-shop__iconTile svg {
+ position: relative;
+ width: 30px;
+ height: 30px;
+ overflow: visible;
+ }
+
+ /* ---- Title row + count ---- */
+ .gk-shop__titleRow {
+ display: flex;
+ align-items: baseline;
+ justify-content: space-between;
+ gap: 10px;
+ }
+
+ .gk-shop__title {
+ font-weight: 900;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 17px;
+ line-height: 1.1;
+ }
+
+ .gk-shop__count {
+ flex: 0 0 auto;
+ font-size: 11px;
+ font-weight: 700;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ color: var(--gk-hi);
+ opacity: 0.85;
+ white-space: nowrap;
+ }
+
+ .gk-shop__desc {
+ margin: 10px 0 0;
+ opacity: 0.7;
+ font-size: 13px;
+ line-height: 1.5;
+ }
+
+ /* ---- CTA ---- */
+ .gk-shop__cta {
+ margin-top: 18px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding-top: 14px;
+ border-top: 1px solid var(--gk-card-line);
+ }
+
+ .gk-shop__pip {
+ width: 8px;
+ height: 8px;
+ border-radius: 999px;
+ background: var(--gk-accent);
+ box-shadow: 0 0 16px rgba(200, 96, 26, 0.6);
+ flex: 0 0 auto;
+ transition: transform 220ms ease;
+ }
+
+ .gk-shop__ctaText {
+ font-size: 12px;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ font-weight: 800;
+ }
+
+ .gk-shop__arrow {
+ margin-left: auto;
+ display: inline-flex;
+ color: var(--gk-accent);
+ transform: translateX(0);
+ transition: transform 220ms ease;
+ }
+
+ /* ---- Hover / focus states ---- */
+ .gk-shop__card:hover {
+ transform: translateY(-4px);
+ border-color: var(--gk-accent-soft);
+ box-shadow:
+ 0 18px 44px rgba(0, 0, 0, 0.5),
+ 0 0 30px rgba(200, 96, 26, 0.16),
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
+ }
+
+ .gk-shop__card:hover::before {
+ opacity: 1;
+ transform: translate(0, 0);
+ }
+
+ .gk-shop__card:hover .gk-shop__sheen {
+ animation: gk-sheen 850ms ease;
+ }
+
+ .gk-shop__card:hover .gk-shop__arrow {
+ transform: translateX(4px);
+ }
+
+ .gk-shop__card:hover .gk-shop__pip {
+ transform: scale(1.45);
+ }
+
+ .gk-shop__card:focus-visible {
+ outline: none;
+ border-color: var(--gk-accent);
+ box-shadow:
+ 0 0 0 3px rgba(200, 96, 26, 0.35),
+ 0 18px 44px rgba(0, 0, 0, 0.5);
+ }
+
+ /* ---- Empty state ---- */
+ .gk-shop__empty {
+ grid-column: 1 / -1;
+ border-radius: 12px;
+ padding: 20px;
+ background: var(--gk-card);
+ border: 1px solid var(--gk-card-line);
+ }
+ .gk-shop__emptyTitle {
+ font-weight: 900;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ margin-bottom: 6px;
+ }
+ .gk-shop__emptyText {
+ opacity: 0.78;
+ font-size: 14px;
+ line-height: 1.5;
+ }
+
+ /* =========================================================
+ ICON ANIMATIONS (continuous, subtle)
+ ========================================================= */
+ .gk-ico { color: var(--gk-accent); }
+ .gk-ico [stroke] { stroke: var(--gk-accent); }
+
+ /* NEW star floats */
+ .gk-ico__star { transform-box: fill-box; transform-origin: center; animation: gk-float 4s ease-in-out infinite; }
+
+ /* CD disc spins */
+ .gk-ico__cdDisc { transform-box: fill-box; transform-origin: center; animation: gk-spin 6s linear infinite; }
+
+ /* Vinyl disc spins, tonearm sways */
+ .gk-ico__vinylDisc { transform-box: fill-box; transform-origin: center; animation: gk-spin 8s linear infinite; }
+ .gk-ico__vinylArm { transform-box: fill-box; transform-origin: top right; animation: gk-sway 5s ease-in-out infinite; }
+
+ /* Merch shirt floats */
+ .gk-ico__shirt { transform-box: fill-box; transform-origin: center; animation: gk-float 4.5s ease-in-out infinite; }
+
+ /* Book cover flips open/closed */
+ .gk-ico__bookCover { transform-box: fill-box; transform-origin: left center; animation: gk-flip 5s ease-in-out infinite; }
+
+ /* DVD rings pulse */
+ .gk-ico__dvdRings { animation: gk-pulse 3.2s ease-in-out infinite; }
+
+ /* Guitar gently rocks, strings vibrate */
+ .gk-ico__guitar { transform-box: fill-box; transform-origin: center; animation: gk-rock 6s ease-in-out infinite; }
+ .gk-ico__strings { transform-box: fill-box; transform-origin: center; animation: gk-vibe 0.18s ease-in-out infinite; }
+
+ @keyframes gk-fadeUp {
+ to { opacity: 1; transform: translateY(0); }
+ }
+ @keyframes gk-breathe {
+ 0%, 100% { opacity: 0.35; transform: scale(0.82); }
+ 50% { opacity: 0.7; transform: scale(1.04); }
+ }
+ @keyframes gk-sheen {
+ 0% { left: -120%; }
+ 100% { left: 140%; }
+ }
+ @keyframes gk-float {
+ 0%, 100% { transform: translateY(1.2px); }
+ 50% { transform: translateY(-1.6px); }
+ }
+ @keyframes gk-spin {
+ to { transform: rotate(360deg); }
+ }
+ @keyframes gk-sway {
+ 0%, 100% { transform: rotate(-6deg); }
+ 50% { transform: rotate(4deg); }
+ }
+ @keyframes gk-flip {
+ 0%, 18% { transform: rotateY(0deg); }
+ 50% { transform: rotateY(-150deg); }
+ 82%, 100%{ transform: rotateY(0deg); }
+ }
+ @keyframes gk-pulse {
+ 0%, 100% { opacity: 0.35; }
+ 50% { opacity: 1; }
+ }
+ @keyframes gk-rock {
+ 0%, 100% { transform: rotate(-2.2deg); }
+ 50% { transform: rotate(2.2deg); }
+ }
+ @keyframes gk-vibe {
+ 0%, 100% { transform: scaleY(1); }
+ 50% { transform: scaleY(1.12); }
+ }
+
+ /* =========================================================
+ RESPONSIVE
+ ========================================================= */
+ @media (max-width: 980px) {
+ .gk-shop__card,
+ .gk-shop__card--wide { grid-column: span 6; } /* 2-up tablet */
+ .gk-shop__divider { display: none; }
+ }
+ @media (max-width: 560px) {
+ .gk-shop__wrap { width: calc(100% - 28px); }
+ .gk-shop__card,
+ .gk-shop__card--wide { grid-column: span 12; } /* 1-up mobile */
+ .gk-shop__heading { font-size: clamp(38px, 12vw, 60px); }
+ }
+
+ /* =========================================================
+ REDUCED MOTION — kill all animation/transition
+ ========================================================= */
+ @media (prefers-reduced-motion: reduce) {
+ .gk-shop__card {
+ opacity: 1 !important;
+ transform: none !important;
+ animation: none !important;
+ transition: none !important;
+ }
+ .gk-shop__card::before { transition: none !important; }
+ .gk-shop__iconGlow,
+ .gk-shop__sheen,
+ .gk-ico__star,
+ .gk-ico__cdDisc,
+ .gk-ico__vinylDisc,
+ .gk-ico__vinylArm,
+ .gk-ico__shirt,
+ .gk-ico__bookCover,
+ .gk-ico__dvdRings,
+ .gk-ico__guitar,
+ .gk-ico__strings {
+ animation: none !important;
+ }
+ .gk-shop__card:hover .gk-shop__sheen { animation: none !important; }
+ .gk-shop__pip,
+ .gk-shop__arrow { transition: none !important; }
+ }
+ {% endstyle %}
+
+
+
+
+{% schema %}
+{
+ "name": "GK Shop Categories",
+ "tag": "section",
+ "settings": [
+ {
+ "type": "text",
+ "id": "kicker",
+ "label": "Kicker",
+ "default": "Browse the goods"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "The Gristle Shop"
+ },
+ {
+ "type": "richtext",
+ "id": "subheading",
+ "label": "Subheading",
+ "default": "Records. Gear. Tools of tone. Wear the sound.
"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "category",
+ "name": "Category tile",
+ "settings": [
+ {
+ "type": "collection",
+ "id": "collection",
+ "label": "Collection",
+ "info": "Drives the link and the live item count."
+ },
+ {
+ "type": "text",
+ "id": "title",
+ "label": "Title"
+ },
+ {
+ "type": "text",
+ "id": "description",
+ "label": "Description"
+ },
+ {
+ "type": "select",
+ "id": "icon",
+ "label": "Icon",
+ "info": "Auto picks the icon from the tile title.",
+ "options": [
+ { "value": "auto", "label": "Auto (from title)" },
+ { "value": "new", "label": "New (star)" },
+ { "value": "cds", "label": "CDs (jewel case)" },
+ { "value": "vinyl", "label": "Vinyl (turntable)" },
+ { "value": "merch", "label": "Merch (t-shirt)" },
+ { "value": "gear", "label": "Gear (guitar)" },
+ { "value": "books", "label": "Instructional Books" },
+ { "value": "dvds", "label": "DVDs (disc case)" }
+ ],
+ "default": "auto"
+ },
+ {
+ "type": "checkbox",
+ "id": "featured",
+ "label": "Featured (New treatment + top accent line)",
+ "default": false
+ }
+ ]
+ }
+ ],
+ "max_blocks": 12,
+ "presets": [
+ {
+ "name": "GK Shop Categories",
+ "blocks": [
+ { "type": "category", "settings": { "title": "NEW!", "description": "Latest drops and fresh arrivals.", "icon": "new", "featured": true } },
+ { "type": "category", "settings": { "title": "CDs", "description": "Studio albums and live records.", "icon": "cds" } },
+ { "type": "category", "settings": { "title": "Vinyl", "description": "Wax. Analog. Real.", "icon": "vinyl" } },
+ { "type": "category", "settings": { "title": "Merch", "description": "Wear the gristle.", "icon": "merch" } },
+ { "type": "category", "settings": { "title": "Gear", "description": "Pickups, pedals, tone tools.", "icon": "gear" } },
+ { "type": "category", "settings": { "title": "Instructional Books", "description": "Learn from the Gristleman.", "icon": "books" } },
+ { "type": "category", "settings": { "title": "DVDs", "description": "Classic guitar instruction.", "icon": "dvds" } }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-sponsor-logos.liquid b/sections/gk-sponsor-logos.liquid
new file mode 100644
index 00000000000..f9053b755d4
--- /dev/null
+++ b/sections/gk-sponsor-logos.liquid
@@ -0,0 +1,275 @@
+{%- style -%}
+ .gk-sponsors {
+ background-color: {{ section.settings.bg_color }};
+ padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
+ {% if section.settings.show_top_border %}
+ border-top: 1px solid #272727;
+ {% endif %}
+ {% if section.settings.show_bottom_border %}
+ border-bottom: 1px solid #272727;
+ {% endif %}
+ }
+
+ .gk-sponsors__inner {
+ max-width: var(--page-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ }
+
+ .gk-sponsors__header {
+ text-align: center;
+ margin-bottom: 40px;
+ }
+
+ .gk-sponsors__eyebrow {
+ font-family: 'DM Mono', monospace;
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-size: 0.75rem;
+ color: #E8690A;
+ margin-bottom: 12px;
+ display: block;
+ }
+
+ .gk-sponsors__heading {
+ font-family: 'Bebas Neue', sans-serif;
+ font-size: clamp(1.5rem, 3vw, 2.5rem);
+ color: #E8E8E8;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ margin: 0;
+ }
+
+ .gk-sponsors__grid {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ align-items: center;
+ gap: {{ section.settings.logo_gap }}px;
+ }
+
+ .gk-sponsors__item {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: {{ section.settings.logo_width }}px;
+ height: {{ section.settings.logo_height }}px;
+ padding: 16px;
+ transition: all 0.4s ease;
+ }
+
+ .gk-sponsors__item img {
+ max-width: 100%;
+ max-height: 100%;
+ object-fit: contain;
+ filter: grayscale(100%) brightness(0.6);
+ opacity: 0.5;
+ transition: all 0.4s ease;
+ }
+
+ .gk-sponsors__item:hover img {
+ filter: grayscale(0%) brightness(1);
+ opacity: 1;
+ }
+
+ /* Orange tint on hover variant */
+ .gk-sponsors--orange-hover .gk-sponsors__item:hover img {
+ filter: grayscale(0%) brightness(1) sepia(1) saturate(5) hue-rotate(-10deg);
+ opacity: 1;
+ }
+
+ .gk-sponsors__item a {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ height: 100%;
+ }
+
+ @media screen and (max-width: 749px) {
+ .gk-sponsors__grid {
+ gap: 24px;
+ }
+
+ .gk-sponsors__item {
+ width: calc(50% - 24px);
+ height: auto;
+ padding: 12px;
+ }
+ }
+{%- endstyle -%}
+
+
+
+{% schema %}
+{
+ "name": "GK Sponsor Logos",
+ "tag": "section",
+ "class": "gk-sponsors-section",
+ "settings": [
+ {
+ "type": "color",
+ "id": "bg_color",
+ "label": "Background Color",
+ "default": "#0D0D0D"
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow Text",
+ "default": "Proud Partners"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading"
+ },
+ {
+ "type": "checkbox",
+ "id": "orange_hover",
+ "label": "Orange Tint on Hover",
+ "default": true,
+ "info": "Logos turn orange-tinted on hover instead of full color"
+ },
+ {
+ "type": "range",
+ "id": "logo_width",
+ "label": "Logo Width",
+ "min": 80,
+ "max": 250,
+ "step": 10,
+ "default": 150,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "logo_height",
+ "label": "Logo Height",
+ "min": 40,
+ "max": 150,
+ "step": 5,
+ "default": 70,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "logo_gap",
+ "label": "Gap Between Logos",
+ "min": 16,
+ "max": 80,
+ "step": 4,
+ "default": 40,
+ "unit": "px"
+ },
+ {
+ "type": "checkbox",
+ "id": "show_top_border",
+ "label": "Show Top Border",
+ "default": true
+ },
+ {
+ "type": "checkbox",
+ "id": "show_bottom_border",
+ "label": "Show Bottom Border",
+ "default": true
+ },
+ {
+ "type": "range",
+ "id": "padding_top",
+ "label": "Padding Top",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 48,
+ "unit": "px"
+ },
+ {
+ "type": "range",
+ "id": "padding_bottom",
+ "label": "Padding Bottom",
+ "min": 0,
+ "max": 100,
+ "step": 4,
+ "default": 48,
+ "unit": "px"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "logo",
+ "name": "Sponsor Logo",
+ "settings": [
+ {
+ "type": "text",
+ "id": "name",
+ "label": "Sponsor Name",
+ "default": "Sponsor"
+ },
+ {
+ "type": "image_picker",
+ "id": "logo",
+ "label": "Logo Image",
+ "info": "Upload a white or transparent PNG logo"
+ },
+ {
+ "type": "url",
+ "id": "link",
+ "label": "Sponsor Website"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Sponsor Logos",
+ "blocks": [
+ { "type": "logo", "settings": { "name": "JAM Pedals" } },
+ { "type": "logo", "settings": { "name": "Fishman" } },
+ { "type": "logo", "settings": { "name": "Reverend" } },
+ { "type": "logo", "settings": { "name": "Tone King" } },
+ { "type": "logo", "settings": { "name": "D'Addario" } },
+ { "type": "logo", "settings": { "name": "Dunlop" } }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-sponsors.liquid b/sections/gk-sponsors.liquid
new file mode 100644
index 00000000000..10852eb5308
--- /dev/null
+++ b/sections/gk-sponsors.liquid
@@ -0,0 +1,262 @@
+{%- comment -%}
+ GK Sponsors
+ - Big logos in one row (desktop), no boxes
+ - Always-on subtle orange glow, stronger on hover
+ - "Logo boost" scales logo inside bounds (fixes padded PNGs)
+{%- endcomment -%}
+
+{%- liquid
+ assign heading_val = section.settings.heading | strip
+ assign subheading_val = section.settings.subheading | strip
+-%}
+
+
+
+{% schema %}
+{
+ "name": "GK Sponsors",
+ "tag": "section",
+ "class": "section",
+ "settings": [
+ { "type": "text", "id": "heading", "label": "Heading", "default": "Sponsors" },
+ { "type": "text", "id": "subheading", "label": "Subheading (optional)", "default": "." },
+
+ { "type": "color", "id": "accent", "label": "Accent color", "default": "#E8690A" },
+
+ { "type": "range", "id": "columns_desktop", "min": 3, "max": 8, "step": 1, "unit": "col", "label": "Columns (desktop)", "default": 5 },
+ { "type": "range", "id": "columns_tablet", "min": 2, "max": 6, "step": 1, "unit": "col", "label": "Columns (tablet)", "default": 4 },
+ { "type": "range", "id": "columns_mobile", "min": 2, "max": 4, "step": 1, "unit": "col", "label": "Columns (mobile)", "default": 2 },
+
+ { "type": "range", "id": "gap", "min": 6, "max": 32, "step": 1, "unit": "px", "label": "Gap", "default": 12 },
+
+ { "type": "range", "id": "logo_height", "min": 30, "max": 160, "step": 2, "unit": "px", "label": "Logo height", "default": 120 },
+ { "type": "range", "id": "logo_boost", "min": 100, "max": 200, "step": 5, "unit": "%", "label": "Logo boost (fix padded PNGs)", "default": 160 },
+
+ { "type": "range", "id": "hover_scale", "min": 100, "max": 130, "step": 1, "unit": "%", "label": "Hover scale", "default": 110 },
+ { "type": "range", "id": "glow_strength", "min": 60, "max": 160, "step": 2, "unit": "%", "label": "Glow strength", "default": 110 },
+
+ { "type": "range", "id": "padding_top", "min": 0, "max": 140, "step": 4, "unit": "px", "label": "Padding top", "default": 44 },
+ { "type": "range", "id": "padding_bottom", "min": 0, "max": 140, "step": 4, "unit": "px", "label": "Padding bottom", "default": 44 }
+ ],
+ "blocks": [
+ {
+ "type": "sponsor",
+ "name": "Sponsor",
+ "settings": [
+ { "type": "image_picker", "id": "logo", "label": "Logo" },
+ { "type": "text", "id": "label", "label": "Label (optional)", "default": "." },
+ { "type": "url", "id": "url", "label": "Sponsor URL" },
+ { "type": "checkbox", "id": "open_new", "label": "Open in new tab", "default": true },
+ { "type": "checkbox", "id": "nofollow", "label": "Add nofollow", "default": false }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Sponsors",
+ "blocks": [
+ { "type": "sponsor" },
+ { "type": "sponsor" },
+ { "type": "sponsor" },
+ { "type": "sponsor" },
+ { "type": "sponsor" }
+ ]
+ }
+ ]
+}
+{% endschema %}
\ No newline at end of file
diff --git a/sections/gk-spotify-embed.liquid b/sections/gk-spotify-embed.liquid
new file mode 100644
index 00000000000..2a889c906f5
--- /dev/null
+++ b/sections/gk-spotify-embed.liquid
@@ -0,0 +1,362 @@
+{%- comment -%}
+ GK Spotify Embed
+ - Premium metallic / Spotify-grey device frame
+ - Micro orange accent (rim + hover), not an orange wash
+ - NOTE: Spotify iframe UI itself cannot be styled (cross-domain)
+{%- endcomment -%}
+
+{%- liquid
+ assign eyebrow_val = section.settings.eyebrow | strip
+ assign heading_val = section.settings.heading | strip
+ assign subheading_val = section.settings.subheading | strip
+ assign embed_src = section.settings.embed_src | strip
+ assign open_url = section.settings.open_url | strip
+-%}
+
+
+
+
+ {%- if eyebrow_val != blank and eyebrow_val != '.' -%}
+
{{ eyebrow_val }}
+ {%- endif -%}
+
+ {%- if heading_val != blank -%}
+
+
{{ heading_val }}
+
+ {%- if section.settings.show_open_button and open_url != blank -%}
+
+ Open on Spotify
+
+ {%- endif -%}
+
+ {%- endif -%}
+
+ {%- if subheading_val != blank and subheading_val != '.' -%}
+
{{ subheading_val }}
+ {%- endif -%}
+
+ {%- if embed_src != blank -%}
+
+ {%- endif -%}
+
+
+
+
+
+
+
+
+{% schema %}
+{
+ "name": "GK Spotify Embed",
+ "tag": "section",
+ "class": "section",
+ "settings": [
+ { "type": "checkbox", "id": "enable_animation", "default": true, "label": "Enable fly-in animation" },
+
+ { "type": "text", "id": "eyebrow", "label": "Eyebrow (optional)", "default": "." },
+ { "type": "text", "id": "heading", "label": "Heading", "default": "Listen on Spotify" },
+ { "type": "text", "id": "subheading", "label": "Subheading (optional)", "default": "." },
+
+ {
+ "type": "text",
+ "id": "embed_src",
+ "label": "Spotify embed src URL",
+ "default": "https://open.spotify.com/embed/artist/5Y6wPwVr2krTASRASpMLsC?utm_source=generator"
+ },
+ {
+ "type": "text",
+ "id": "open_url",
+ "label": "Open on Spotify URL (optional)",
+ "default": "https://open.spotify.com/artist/5Y6wPwVr2krTASRASpMLsC"
+ },
+ { "type": "checkbox", "id": "show_open_button", "default": true, "label": "Show \"Open on Spotify\" button" },
+
+ { "type": "range", "id": "height", "min": 280, "max": 560, "step": 4, "unit": "px", "label": "Embed height", "default": 352 },
+
+ { "type": "color", "id": "accent", "label": "Accent color", "default": "#E8690A" },
+
+ { "type": "range", "id": "padding_top", "min": 0, "max": 140, "step": 4, "unit": "px", "label": "Padding top", "default": 44 },
+ { "type": "range", "id": "padding_bottom", "min": 0, "max": 140, "step": 4, "unit": "px", "label": "Padding bottom", "default": 52 }
+ ],
+ "presets": [
+ { "name": "GK Spotify Embed" }
+ ]
+}
+{% endschema %}
\ No newline at end of file
diff --git a/sections/gk-stream-follow.liquid b/sections/gk-stream-follow.liquid
new file mode 100644
index 00000000000..88bc17cdc32
--- /dev/null
+++ b/sections/gk-stream-follow.liquid
@@ -0,0 +1,398 @@
+{% comment %}
+ GK Stream + Follow (Modern — dark premium / burnt-orange redesign)
+ 4 fixed columns: Stream Greg / Stream KMT / Podcast / Watch Greg Live
+ - platform_link blocks get assigned to a column via dropdown
+ - follow_link blocks render as buttons under FOLLOW
+ Aesthetic only: all hrefs come from block.settings.url (unchanged).
+{% endcomment %}
+
+
+
+ {% if section.settings.eyebrow != blank %}
+
{{ section.settings.eyebrow }}
+ {% endif %}
+
+ {% if section.settings.heading != blank %}
+
{{ section.settings.heading }}
+ {% endif %}
+
+ {% if section.settings.subtext != blank %}
+
{{ section.settings.subtext }}
+ {% endif %}
+
+ {% assign col_keys = "stream_greg,stream_kmt,podcast,watch_live" | split: "," %}
+
+
+ {% for col in col_keys %}
+
+
+ {% case col %}
+ {% when "stream_greg" %}{{ section.settings.col_1_title }}
+ {% when "stream_kmt" %}{{ section.settings.col_2_title }}
+ {% when "podcast" %}{{ section.settings.col_3_title }}
+ {% when "watch_live" %}{{ section.settings.col_4_title }}
+ {% endcase %}
+
+
+ {% assign has_any = false %}
+
+ {% for block in section.blocks %}
+ {% if block.type == "platform_link" and block.settings.column == col %}
+ {% assign has_any = true %}
+
+
+ {% if section.settings.show_icons and block.settings.icon != blank %}
+
+ {% endif %}
+ {{ block.settings.label }}
+
+ ↗
+
+ {% endif %}
+ {% endfor %}
+
+ {% if has_any == false %}
+
+ {{ section.settings.empty_column_text }}
+
+ {% endif %}
+
+ {% endfor %}
+
+
+ {% assign has_follow = false %}
+ {% for block in section.blocks %}
+ {% if block.type == "follow_link" %}
+ {% assign has_follow = true %}
+ {% endif %}
+ {% endfor %}
+
+ {% if has_follow %}
+
+
+ {% if section.settings.follow_heading != blank %}
+
{{ section.settings.follow_heading }}
+ {% endif %}
+
+
+ {% endif %}
+
+
+
+
+
+{% schema %}
+{
+ "name": "GK Stream + Follow",
+ "settings": [
+ { "type": "text", "id": "eyebrow", "label": "Eyebrow", "default": "LISTEN & CONNECT" },
+ { "type": "text", "id": "heading", "label": "Heading", "default": "STREAM + FOLLOW" },
+ { "type": "text", "id": "subtext", "label": "Subtext", "default": "Find Greg Koch on every platform." },
+
+ { "type": "text", "id": "col_1_title", "label": "Column 1 title", "default": "STREAM GREG" },
+ { "type": "text", "id": "col_2_title", "label": "Column 2 title", "default": "STREAM KMT" },
+ { "type": "text", "id": "col_3_title", "label": "Column 3 title", "default": "PODCAST" },
+ { "type": "text", "id": "col_4_title", "label": "Column 4 title", "default": "WATCH GREG LIVE" },
+
+ { "type": "text", "id": "follow_heading", "label": "Follow heading", "default": "FOLLOW" },
+
+ { "type": "checkbox", "id": "show_icons", "label": "Show link icons", "default": false },
+ { "type": "checkbox", "id": "show_dividers", "label": "Show divider line", "default": true },
+
+ { "type": "text", "id": "empty_column_text", "label": "Empty column text", "default": "Add links for this column in the section blocks." },
+
+ { "type": "range", "id": "pad_y", "min": 20, "max": 120, "step": 4, "unit": "px", "label": "Vertical padding", "default": 72 },
+
+ { "type": "color", "id": "bg_color", "label": "Background color", "default": "#0D0D0D" },
+ { "type": "color", "id": "text_color", "label": "Text color", "default": "#FFFFFF" }
+ ],
+ "blocks": [
+ {
+ "type": "platform_link",
+ "name": "Platform link",
+ "settings": [
+ {
+ "type": "select",
+ "id": "column",
+ "label": "Column",
+ "default": "stream_greg",
+ "options": [
+ { "value": "stream_greg", "label": "Stream Greg" },
+ { "value": "stream_kmt", "label": "Stream KMT" },
+ { "value": "podcast", "label": "Podcast" },
+ { "value": "watch_live", "label": "Watch Greg Live" }
+ ]
+ },
+ { "type": "text", "id": "label", "label": "Link label", "default": "Spotify" },
+ { "type": "url", "id": "url", "label": "Link URL" },
+ { "type": "image_picker", "id": "icon", "label": "Optional icon" }
+ ]
+ },
+ {
+ "type": "follow_link",
+ "name": "Follow link",
+ "settings": [
+ { "type": "text", "id": "label", "label": "Label", "default": "Instagram" },
+ { "type": "url", "id": "url", "label": "URL" },
+ { "type": "image_picker", "id": "icon", "label": "Icon" }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "GK Stream + Follow",
+ "blocks": [
+ { "type": "platform_link" },
+ { "type": "platform_link" },
+ { "type": "platform_link" },
+ { "type": "follow_link" },
+ { "type": "follow_link" }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-tour-dates-home.liquid b/sections/gk-tour-dates-home.liquid
new file mode 100644
index 00000000000..c899aac167d
--- /dev/null
+++ b/sections/gk-tour-dates-home.liquid
@@ -0,0 +1,337 @@
+{% comment %}
+ GK Tour Dates (HOME)
+ - Reads dates from snippets/gk-tour-dates-shared.liquid (single source of truth)
+ - Keeps the SAME glass row design + reveal button behavior
+ - Shows first N, reveal more by button
+{% endcomment %}
+
+{% liquid
+ assign initial_visible = section.settings.initial_visible | default: 3
+ assign reveal_step = section.settings.reveal_step | default: 3
+%}
+
+
+
+
+ {% if section.settings.eyebrow != blank %}
+
{{ section.settings.eyebrow }}
+ {% endif %}
+
+ {% if section.settings.heading != blank %}
+
{{ section.settings.heading }}
+ {% endif %}
+
+ {% if section.settings.subtext != blank %}
+
{{ section.settings.subtext }}
+ {% endif %}
+
+
+ {%- comment -%}
+ Render shared dates using the HOME markup/classes:
+ .gk-date-row, .gk-date-row__date, .gk-date-row__details, .gk-date-row__cta
+ {%- endcomment -%}
+
+ {% render 'gk-tour-dates-shared',
+ mode: 'render_home',
+ section_id: section.id
+ %}
+
+
+ {% capture _gk_total %}
+ {% render 'gk-tour-dates-shared', mode: 'count' %}
+ {% endcapture %}
+ {% assign total_rows = _gk_total | strip | plus: 0 %}
+
+ {% if total_rows == 0 %}
+
+ {{ section.settings.empty_text }}
+
+ {% endif %}
+
+ {% if total_rows > initial_visible %}
+
+
+ {{ section.settings.more_label }}
+
+
+ {% endif %}
+
+
+
+ {% if total_rows > initial_visible %}
+
+ {% endif %}
+
+
+{% style %}
+.gk-tour-dates {
+ --bg: {{ section.settings.bg_color }};
+ --text: #FFFFFF;
+ --line: rgba(255,255,255,0.12);
+ --muted: rgba(255,255,255,0.72);
+ --accent: #E8690A;
+
+ background: var(--bg);
+ color: var(--text);
+ padding: {{ section.settings.padding_top }}px 20px {{ section.settings.padding_bottom }}px;
+}
+
+.gk-tour-dates__inner {
+ max-width: 1100px;
+ margin: 0 auto;
+}
+
+.gk-tour-dates__eyebrow {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ text-transform: uppercase;
+ letter-spacing: 0.16em;
+ font-size: 12px;
+ color: rgba(255,255,255,0.62);
+ margin-bottom: 10px;
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__heading {
+ margin: 0 0 8px 0;
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.03em;
+ line-height: 1;
+ font-size: clamp(44px, 6vw, 76px);
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__subtext {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 16px;
+ color: var(--muted);
+ margin-bottom: 22px;
+ text-align: {{ section.settings.text_align }};
+ max-width: 70ch;
+}
+
+.gk-tour-dates__list {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+/* glass row card + orange undertone hover */
+.gk-date-row {
+ display: grid;
+ grid-template-columns: minmax(160px, 220px) 1fr auto;
+ gap: 16px;
+ align-items: center;
+
+ padding: 14px 16px;
+ border: 1px solid var(--line);
+ border-radius: 14px;
+
+ background: rgba(0,0,0,0.22);
+ box-shadow: 0 18px 40px rgba(0,0,0,0.28);
+
+ transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
+}
+
+.gk-date-row:hover {
+ transform: translateY(-1px);
+ border-color: rgba(232,105,10,0.35);
+ background: linear-gradient(180deg, rgba(232,105,10,0.14), rgba(0,0,0,0.18));
+}
+
+.gk-date-row__date {
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.02em;
+ color: var(--accent);
+ font-size: 28px;
+ line-height: 1;
+}
+
+.gk-date-row__details {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ min-width: 0;
+}
+
+.gk-date-row__venue {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 18px;
+ line-height: 1.2;
+ color: #FFFFFF;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__descriptor {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 12px;
+ font-style: italic;
+ color: rgba(255,255,255,0.50);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__city {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ color: rgba(255,255,255,0.72);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__cta {
+ display: flex;
+ justify-content: flex-end;
+}
+
+/* CTA styles more like your modern system */
+.gk-date-row__btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 10px 14px;
+ border-radius: 999px;
+ background: var(--accent);
+ color: #0D0D0D;
+ text-decoration: none;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ border: 1px solid var(--accent);
+ transition: transform 140ms ease, opacity 140ms ease;
+}
+
+.gk-date-row__btn:hover { opacity: 0.92; transform: translateY(-1px); }
+.gk-date-row__btn:active { transform: translateY(0); }
+
+.gk-date-row__soldout {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 10px 14px;
+ border-radius: 999px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ color: rgba(255,255,255,0.55);
+ border: 1px solid rgba(255,255,255,0.18);
+ background: rgba(0,0,0,0.18);
+}
+
+/* show more */
+.gk-tour-dates__more-wrap {
+ margin-top: 16px;
+ display: flex;
+ justify-content: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__more {
+ appearance: none;
+ border: 1px solid rgba(255,255,255,0.16);
+ background: rgba(0,0,0,0.22);
+ color: rgba(255,255,255,0.88);
+ border-radius: 999px;
+ padding: 12px 16px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ cursor: pointer;
+ transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
+}
+
+.gk-tour-dates__more:hover {
+ transform: translateY(-1px);
+ border-color: rgba(232,105,10,0.30);
+ background: rgba(0,0,0,0.34);
+}
+
+.gk-tour-dates__empty {
+ margin-top: 18px;
+ padding: 16px 0;
+ border-top: 1px solid var(--line);
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 16px;
+ color: var(--muted);
+}
+
+@media (max-width: 720px) {
+ .gk-date-row {
+ grid-template-columns: 1fr;
+ gap: 10px;
+ }
+ .gk-date-row__cta { justify-content: flex-start; }
+ .gk-date-row__date { font-size: 30px; }
+}
+{% endstyle %}
+
+{% schema %}
+{
+ "name": "GK Tour Dates Home",
+ "settings": [
+ { "type": "text", "id": "eyebrow", "label": "Eyebrow", "default": "Tour Dates" },
+ { "type": "text", "id": "heading", "label": "Heading", "default": "GREG KOCH DATES" },
+ { "type": "text", "id": "subtext", "label": "Subtext", "default": "See upcoming dates below." },
+ { "type": "text", "id": "empty_text", "label": "Empty state text", "default": "No upcoming dates. Check back soon." },
+
+ { "type": "text", "id": "more_label", "label": "Show more button label", "default": "Show more dates" },
+ { "type": "range", "id": "initial_visible", "label": "Initially visible dates", "min": 1, "max": 20, "step": 1, "default": 3 },
+ { "type": "range", "id": "reveal_step", "label": "Reveal step (per click)", "min": 1, "max": 20, "step": 1, "default": 3 },
+
+ {
+ "type": "select",
+ "id": "text_align",
+ "label": "Text alignment",
+ "default": "left",
+ "options": [
+ { "value": "left", "label": "Left" },
+ { "value": "center", "label": "Center" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+
+ { "type": "color", "id": "bg_color", "label": "Background color", "default": "#0D0D0D" },
+ { "type": "range", "id": "padding_top", "label": "Padding top", "min": 0, "max": 120, "step": 4, "default": 64 },
+ { "type": "range", "id": "padding_bottom", "label": "Padding bottom", "min": 0, "max": 120, "step": 4, "default": 64 }
+ ],
+ "presets": [
+ { "name": "GK Tour Dates Home" }
+ ]
+}
+{% endschema %}
\ No newline at end of file
diff --git a/sections/gk-tour-dates-page.liquid b/sections/gk-tour-dates-page.liquid
new file mode 100644
index 00000000000..2da57ff6692
--- /dev/null
+++ b/sections/gk-tour-dates-page.liquid
@@ -0,0 +1,432 @@
+{% comment %}
+ GK Tour Dates (PAGE)
+ - Pulls rows from snippets/gk-tour-dates-shared.liquid (single source of truth)
+ - Keeps the SAME glass style + show more/show fewer UI
+ - visible_count controls how many show initially
+ - reveal_step controls how many are added per click
+{% endcomment %}
+
+{% liquid
+ assign upcoming_count = 0
+%}
+
+
+
+
+ {% if section.settings.eyebrow != blank %}
+
{{ section.settings.eyebrow }}
+ {% endif %}
+
+ {% if section.settings.heading != blank %}
+
{{ section.settings.heading }}
+ {% endif %}
+
+ {% if section.settings.subtext != blank %}
+
{{ section.settings.subtext }}
+ {% endif %}
+
+
+ {%- comment -%}
+ Render shared dates using the PAGE markup/classes:
+ .gk-date, .gk-date__date, .gk-date__details, .gk-date__cta
+ Must include:
+ - data-date-row on each row
+ - is-hidden class for rows beyond visible_count
+ {%- endcomment -%}
+
+ {% render 'gk-tour-dates-shared',
+ mode: 'render_page',
+ visible_count: section.settings.visible_count
+ %}
+
+
+ {% capture _gk_total %}
+ {% render 'gk-tour-dates-shared', mode: 'count' %}
+ {% endcapture %}
+ {% assign total_rows = _gk_total | strip | plus: 0 %}
+
+ {% if total_rows == 0 %}
+
+ {{ section.settings.empty_text }}
+
+ {% endif %}
+
+ {% if total_rows > section.settings.visible_count %}
+
+ {% elsif section.settings.view_all_url != blank %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+{% schema %}
+{
+ "name": "GK Tour Dates (Page)",
+ "settings": [
+ { "type": "text", "id": "eyebrow", "label": "Eyebrow", "default": "Tour Dates" },
+ { "type": "text", "id": "heading", "label": "Heading", "default": "GREG KOCH DATES" },
+ { "type": "text", "id": "subtext", "label": "Subtext", "default": "See upcoming dates below." },
+
+ { "type": "text", "id": "empty_text", "label": "Empty state text", "default": "No upcoming dates. Check back soon." },
+
+ {
+ "type": "select",
+ "id": "text_align",
+ "label": "Text alignment",
+ "default": "left",
+ "options": [
+ { "value": "left", "label": "Left" },
+ { "value": "center", "label": "Center" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+
+ { "type": "range", "id": "visible_count", "label": "Visible dates", "min": 1, "max": 20, "step": 1, "default": 10 },
+ { "type": "range", "id": "reveal_step", "label": "Reveal step", "min": 1, "max": 20, "step": 1, "default": 10 },
+
+ { "type": "text", "id": "show_more_label", "label": "Show more label", "default": "Show more dates" },
+ { "type": "text", "id": "show_less_label", "label": "Show less label", "default": "Show fewer dates" },
+ { "type": "text", "id": "view_all_label", "label": "View all label", "default": "View all dates" },
+ { "type": "url", "id": "view_all_url", "label": "View all URL" },
+
+ { "type": "range", "id": "padding_top", "label": "Padding top", "min": 0, "max": 120, "step": 4, "default": 64 },
+ { "type": "range", "id": "padding_bottom", "label": "Padding bottom", "min": 0, "max": 120, "step": 4, "default": 64 },
+
+ { "type": "color", "id": "bg_color", "label": "Background color", "default": "#0D0D0D" },
+ { "type": "color", "id": "accent_color", "label": "Accent color", "default": "#E8690A" }
+ ],
+ "presets": [
+ { "name": "GK Tour Dates (Page)" }
+ ]
+}
+{% endschema %}
\ No newline at end of file
diff --git a/sections/gk-tour-dates-shared.liquid b/sections/gk-tour-dates-shared.liquid
new file mode 100644
index 00000000000..c6dd1448379
--- /dev/null
+++ b/sections/gk-tour-dates-shared.liquid
@@ -0,0 +1,795 @@
+{% comment %}
+ GK Tour Dates — shared static section (rendered once in layout/theme.liquid).
+ Blocks hold ALL date data; editing here updates both homepage and dates page.
+
+ Template detection sets render mode:
+ template.name == 'index' → home style (.gk-tour-dates / .gk-date-row), initial 3
+ template.suffix == 'dates' → page style (.gk-dates / .gk-date), initial 10
+{% endcomment %}
+
+{%- liquid
+ assign today_ymd = 'now' | date: '%Y-%m-%d'
+ assign today_midnight_ts = today_ymd | date: '%s' | plus: 0
+
+ if template.name == 'index'
+ assign is_home = true
+ assign initial_visible = 3
+ assign reveal_step = 3
+ else
+ assign is_home = false
+ assign initial_visible = 10
+ assign reveal_step = 10
+ endif
+-%}
+
+{%- comment -%}Pre-count upcoming dates for show-more threshold{%- endcomment -%}
+{%- assign upcoming_count = 0 -%}
+{%- for block in section.blocks -%}
+ {%- if block.type == 'date' -%}
+ {%- assign _raw = block.settings.date | strip -%}
+ {%- if _raw != blank -%}
+ {%- assign _ts = _raw | date: '%s' | plus: 0 -%}
+ {%- if _ts == 0 or _ts >= today_midnight_ts -%}
+ {%- assign upcoming_count = upcoming_count | plus: 1 -%}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endif -%}
+{%- endfor -%}
+
+{%- if is_home -%}
+
+ {%- comment -%}─── HOME STYLE ──────────────────────────────────────────────{%- endcomment -%}
+
+
+
+ {% if section.settings.eyebrow != blank %}
+
{{ section.settings.eyebrow }}
+ {% endif %}
+
+ {% if section.settings.heading != blank %}
+
{{ section.settings.heading }}
+ {% endif %}
+
+ {% if section.settings.subtext != blank %}
+
{{ section.settings.subtext }}
+ {% endif %}
+
+
+ {%- assign render_index = 0 -%}
+ {%- for block in section.blocks -%}
+ {%- if block.type == 'date' -%}
+ {%- assign raw_date = block.settings.date | strip -%}
+ {%- if raw_date != blank -%}
+ {%- assign show_ts = raw_date | date: '%s' | plus: 0 -%}
+ {%- assign is_upcoming = false -%}
+ {%- if show_ts == 0 or show_ts >= today_midnight_ts -%}
+ {%- assign is_upcoming = true -%}
+ {%- endif -%}
+ {%- if is_upcoming -%}
+ {%- assign display_date = raw_date | date: '%B %-d, %Y' -%}
+ {%- if display_date == blank -%}{%- assign display_date = raw_date -%}{%- endif -%}
+ {%- assign _bv = block.settings.venue | default: '' -%}
+ {%- assign _bd = block.settings.descriptor | default: '' -%}
+ {%- assign _bc = block.settings.city | default: '' -%}
+ {%- assign _bs = block.settings.state | default: '' -%}
+ {%- if _bc != blank and _bs != blank -%}
+ {%- assign _bcity = _bc | append: ', ' | append: _bs -%}
+ {%- elsif _bc != blank -%}
+ {%- assign _bcity = _bc -%}
+ {%- else -%}
+ {%- assign _bcity = _bs -%}
+ {%- endif -%}
+ {%- assign _bu = block.settings.ticket_url | default: '' -%}
+ {%- assign _sold = block.settings.sold_out -%}
+
+
{{ display_date }}
+
+ {%- if _bv != blank -%}
{{ _bv }}
{%- endif -%}
+ {%- if _bd != blank -%}
{{ _bd }}
{%- endif -%}
+ {%- if _bcity != blank -%}
{{ _bcity }}
{%- endif -%}
+
+
+ {%- if _sold -%}
+
SOLD OUT
+ {%- elsif _bu != blank -%}
+
GET TICKETS
+ {%- else -%}
+
TBA
+ {%- endif -%}
+
+
+ {%- assign render_index = render_index | plus: 1 -%}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+
+
+ {% if upcoming_count == 0 %}
+
{{ section.settings.empty_text }}
+ {% endif %}
+
+ {% if upcoming_count > initial_visible %}
+
+ {{ section.settings.more_label }}
+
+ {% endif %}
+
+
+
+ {% if upcoming_count > initial_visible %}
+
+ {% endif %}
+
+
+{%- else -%}
+
+ {%- comment -%}─── DATES PAGE STYLE ────────────────────────────────────────{%- endcomment -%}
+
+
+
+ {% if section.settings.eyebrow != blank %}
+
{{ section.settings.eyebrow }}
+ {% endif %}
+
+ {% if section.settings.heading != blank %}
+
{{ section.settings.heading }}
+ {% endif %}
+
+ {% if section.settings.subtext != blank %}
+
{{ section.settings.subtext }}
+ {% endif %}
+
+
+ {%- assign render_index = 0 -%}
+ {%- for block in section.blocks -%}
+ {%- if block.type == 'date' -%}
+ {%- assign raw_date = block.settings.date | strip -%}
+ {%- if raw_date != blank -%}
+ {%- assign show_ts = raw_date | date: '%s' | plus: 0 -%}
+ {%- assign is_upcoming = false -%}
+ {%- if show_ts == 0 or show_ts >= today_midnight_ts -%}
+ {%- assign is_upcoming = true -%}
+ {%- endif -%}
+ {%- if is_upcoming -%}
+ {%- assign display_date = raw_date | date: '%B %-d, %Y' -%}
+ {%- if display_date == blank -%}{%- assign display_date = raw_date -%}{%- endif -%}
+ {%- assign _bv = block.settings.venue | default: '' -%}
+ {%- assign _bd = block.settings.descriptor | default: '' -%}
+ {%- assign _bc = block.settings.city | default: '' -%}
+ {%- assign _bs = block.settings.state | default: '' -%}
+ {%- if _bc != blank and _bs != blank -%}
+ {%- assign _bcity = _bc | append: ', ' | append: _bs -%}
+ {%- elsif _bc != blank -%}
+ {%- assign _bcity = _bc -%}
+ {%- else -%}
+ {%- assign _bcity = _bs -%}
+ {%- endif -%}
+ {%- assign _bu = block.settings.ticket_url | default: '' -%}
+ {%- assign _sold = block.settings.sold_out -%}
+ {%- assign extra_class = '' -%}
+ {%- if render_index >= initial_visible -%}
+ {%- assign extra_class = ' is-hidden' -%}
+ {%- endif -%}
+
+ {%- assign render_index = render_index | plus: 1 -%}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+
+
+ {% if upcoming_count == 0 %}
+
{{ section.settings.empty_text }}
+ {% endif %}
+
+ {% if upcoming_count > initial_visible %}
+
+
{{ section.settings.show_more_label }}
+
{{ section.settings.show_less_label }}
+ {% if section.settings.view_all_url != blank %}
+
{{ section.settings.view_all_label }}
+ {% endif %}
+
+ {% elsif section.settings.view_all_url != blank %}
+
+ {% endif %}
+
+
+
+
+
+
+{%- endif -%}
+
+{% style %}
+/* ── HOME STYLE (index template) ─────────────────────────── */
+.gk-tour-dates {
+ --bg: {{ section.settings.bg_color }};
+ --text: #FFFFFF;
+ --line: rgba(255,255,255,0.12);
+ --muted: rgba(255,255,255,0.72);
+ --accent: #E8690A;
+
+ background: var(--bg);
+ color: var(--text);
+ padding: {{ section.settings.padding_top }}px 20px {{ section.settings.padding_bottom }}px;
+}
+
+.gk-tour-dates__inner {
+ max-width: 1100px;
+ margin: 0 auto;
+}
+
+.gk-tour-dates__eyebrow {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ text-transform: uppercase;
+ letter-spacing: 0.16em;
+ font-size: 12px;
+ color: rgba(255,255,255,0.62);
+ margin-bottom: 10px;
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__heading {
+ margin: 0 0 8px 0;
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.03em;
+ line-height: 1;
+ font-size: clamp(44px, 6vw, 76px);
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__subtext {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 16px;
+ color: var(--muted);
+ margin-bottom: 22px;
+ text-align: {{ section.settings.text_align }};
+ max-width: 70ch;
+}
+
+.gk-tour-dates__list {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+.gk-date-row {
+ display: grid;
+ grid-template-columns: minmax(160px, 220px) 1fr auto;
+ gap: 16px;
+ align-items: center;
+ padding: 14px 16px;
+ border: 1px solid var(--line);
+ border-radius: 14px;
+ background: rgba(0,0,0,0.22);
+ box-shadow: 0 18px 40px rgba(0,0,0,0.28);
+ transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
+}
+
+.gk-date-row:hover {
+ transform: translateY(-1px);
+ border-color: rgba(232,105,10,0.35);
+ background: linear-gradient(180deg, rgba(232,105,10,0.14), rgba(0,0,0,0.18));
+}
+
+.gk-date-row__date {
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.02em;
+ color: var(--accent);
+ font-size: 28px;
+ line-height: 1;
+}
+
+.gk-date-row__details {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ min-width: 0;
+}
+
+.gk-date-row__venue {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 18px;
+ line-height: 1.2;
+ color: #FFFFFF;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__descriptor {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 12px;
+ font-style: italic;
+ color: rgba(255,255,255,0.50);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__city {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ color: rgba(255,255,255,0.72);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__cta {
+ display: flex;
+ justify-content: flex-end;
+}
+
+.gk-date-row__btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 10px 14px;
+ border-radius: 999px;
+ background: var(--accent);
+ color: #0D0D0D;
+ text-decoration: none;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ border: 1px solid var(--accent);
+ transition: transform 140ms ease, opacity 140ms ease;
+}
+
+.gk-date-row__btn:hover { opacity: 0.92; transform: translateY(-1px); }
+.gk-date-row__btn:active { transform: translateY(0); }
+
+.gk-date-row__soldout {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 10px 14px;
+ border-radius: 999px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ color: rgba(255,255,255,0.55);
+ border: 1px solid rgba(255,255,255,0.18);
+ background: rgba(0,0,0,0.18);
+}
+
+.gk-tour-dates__more-wrap {
+ margin-top: 16px;
+ display: flex;
+ justify-content: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__more {
+ appearance: none;
+ border: 1px solid rgba(255,255,255,0.16);
+ background: rgba(0,0,0,0.22);
+ color: rgba(255,255,255,0.88);
+ border-radius: 999px;
+ padding: 12px 16px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ cursor: pointer;
+ transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
+}
+
+.gk-tour-dates__more:hover {
+ transform: translateY(-1px);
+ border-color: rgba(232,105,10,0.30);
+ background: rgba(0,0,0,0.34);
+}
+
+.gk-tour-dates__empty {
+ margin-top: 18px;
+ padding: 16px 0;
+ border-top: 1px solid var(--line);
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 16px;
+ color: var(--muted);
+}
+
+@media (max-width: 720px) {
+ .gk-date-row {
+ grid-template-columns: 1fr;
+ gap: 10px;
+ }
+ .gk-date-row__cta { justify-content: flex-start; }
+ .gk-date-row__date { font-size: 30px; }
+}
+
+/* ── DATES PAGE STYLE (page.dates template) ───────────────── */
+.gk-dates {
+ --bg: {{ section.settings.bg_color }};
+ --text: #fff;
+ --muted: rgba(255,255,255,0.72);
+ --line: rgba(255,255,255,0.10);
+ --ring: rgba(255,255,255,0.12);
+ --accent: {{ section.settings.accent_color }};
+ --accentGlow: rgba(232,105,10,0.22);
+ --accentGlowStrong: rgba(232,105,10,0.35);
+
+ background: var(--bg);
+ color: var(--text);
+ padding: {{ section.settings.padding_top }}px 20px {{ section.settings.padding_bottom }}px;
+}
+
+.gk-dates__inner { max-width: 1100px; margin: 0 auto; }
+
+.gk-dates__eyebrow {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ text-transform: uppercase;
+ letter-spacing: 0.16em;
+ font-size: 12px;
+ color: rgba(255,255,255,0.62);
+ margin-bottom: 10px;
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-dates__heading {
+ margin: 0;
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.03em;
+ line-height: 1;
+ font-size: clamp(44px, 6vw, 76px);
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-dates__subtext {
+ margin-top: 10px;
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ color: var(--muted);
+ font-size: 16px;
+ line-height: 1.4;
+ max-width: 60ch;
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-dates__list {
+ margin-top: 26px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.gk-date {
+ position: relative;
+ display: grid;
+ grid-template-columns: minmax(170px, 240px) 1fr auto;
+ gap: 16px;
+ align-items: center;
+ padding: 18px 18px;
+ border-radius: 18px;
+ border: 1px solid var(--ring);
+ background:
+ radial-gradient(1200px 200px at 20% 0%, rgba(255,255,255,0.06), transparent 50%),
+ linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.02));
+ box-shadow: 0 18px 42px rgba(0,0,0,0.32);
+ transition: transform 160ms ease, border-color 160ms ease, box-shadow 160ms ease;
+}
+
+.gk-date::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ border-radius: 18px;
+ pointer-events: none;
+ opacity: 0;
+ transition: opacity 160ms ease;
+ background:
+ radial-gradient(800px 160px at 20% 50%, var(--accentGlowStrong), transparent 65%),
+ linear-gradient(90deg, rgba(232,105,10,0.10), rgba(232,105,10,0.00) 55%);
+}
+
+.gk-date:hover {
+ transform: translateY(-1px);
+ border-color: rgba(232,105,10,0.45);
+ box-shadow:
+ 0 22px 58px rgba(0,0,0,0.40),
+ 0 0 0 1px rgba(232,105,10,0.18) inset;
+}
+
+.gk-date:hover::before { opacity: 1; }
+.gk-date.is-hidden { display: none; }
+
+.gk-date__date {
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.02em;
+ color: var(--accent);
+ font-size: 34px;
+ line-height: 1;
+ white-space: nowrap;
+}
+
+.gk-date__details { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
+
+.gk-date__venue {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 20px;
+ line-height: 1.2;
+ color: #fff;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date__descriptor {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 13px;
+ font-style: italic;
+ color: rgba(255,255,255,0.50);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date__city {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 13px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ color: rgba(255,255,255,0.70);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date__cta { display: flex; justify-content: flex-end; }
+
+.gk-date__pill {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 44px;
+ padding: 10px 18px;
+ border-radius: 999px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ text-decoration: none;
+ border: 1px solid rgba(255,255,255,0.16);
+ background: rgba(0,0,0,0.20);
+ color: rgba(255,255,255,0.86);
+ transition: transform 140ms ease, border-color 140ms ease, background 140ms ease, box-shadow 140ms ease;
+}
+
+.gk-date__pill--accent {
+ background: rgba(232,105,10,0.90);
+ border-color: rgba(232,105,10,0.90);
+ color: #0D0D0D;
+}
+
+.gk-date__pill:hover {
+ transform: translateY(-1px);
+ border-color: rgba(255,255,255,0.26);
+ background: rgba(0,0,0,0.28);
+}
+
+.gk-date__pill--accent:hover {
+ background: rgba(232,105,10,0.98);
+ border-color: rgba(232,105,10,0.98);
+ box-shadow: 0 10px 26px rgba(232,105,10,0.28);
+}
+
+.gk-date__pill:focus-visible,
+.gk-dates__btn:focus-visible {
+ outline: 2px solid rgba(232,105,10,0.75);
+ outline-offset: 3px;
+}
+
+.gk-dates__empty {
+ margin-top: 18px;
+ padding: 16px 0;
+ border-top: 1px solid var(--line);
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 16px;
+ color: var(--muted);
+}
+
+.gk-dates__controls {
+ margin-top: 18px;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+}
+
+.gk-dates__btn {
+ cursor: pointer;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 44px;
+ padding: 10px 16px;
+ border-radius: 999px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ border: 1px solid rgba(255,255,255,0.16);
+ background: rgba(232,105,10,0.90);
+ color: #0D0D0D;
+ text-decoration: none;
+ transition: transform 140ms ease, opacity 140ms ease, border-color 140ms ease, background 140ms ease, box-shadow 140ms ease;
+}
+
+.gk-dates__btn:hover {
+ transform: translateY(-1px);
+ opacity: 0.96;
+ box-shadow: 0 10px 26px rgba(232,105,10,0.20);
+}
+
+.gk-dates__btn:active { transform: translateY(0); }
+
+.gk-dates__btn--ghost {
+ background: rgba(0,0,0,0.22);
+ color: rgba(255,255,255,0.86);
+ border-color: rgba(255,255,255,0.16);
+ box-shadow: none;
+}
+
+.gk-dates__btn--ghost:hover {
+ background: rgba(0,0,0,0.30);
+ border-color: rgba(255,255,255,0.26);
+ box-shadow: none;
+}
+
+@media (max-width: 820px) {
+ .gk-date {
+ grid-template-columns: 1fr;
+ gap: 10px;
+ padding: 16px;
+ }
+ .gk-date__cta { justify-content: flex-start; }
+ .gk-date__date { font-size: 32px; }
+}
+{% endstyle %}
+
+{% schema %}
+{
+ "name": "GK Tour Dates",
+ "settings": [
+ { "type": "text", "id": "eyebrow", "label": "Eyebrow", "default": "Tour Dates" },
+ { "type": "text", "id": "heading", "label": "Heading", "default": "GREG KOCH DATES" },
+ { "type": "text", "id": "subtext", "label": "Subtext", "default": "See upcoming dates below." },
+ { "type": "text", "id": "empty_text", "label": "Empty state text", "default": "No upcoming dates. Check back soon." },
+ { "type": "text", "id": "more_label", "label": "Show more label (homepage)", "default": "Show more dates" },
+ { "type": "text", "id": "show_more_label", "label": "Show more label (dates page)", "default": "Show more dates" },
+ { "type": "text", "id": "show_less_label", "label": "Show fewer label (dates page)", "default": "Show fewer dates" },
+ { "type": "text", "id": "view_all_label", "label": "View all label", "default": "View all dates" },
+ { "type": "url", "id": "view_all_url", "label": "View all URL" },
+ {
+ "type": "select", "id": "text_align", "label": "Text alignment", "default": "left",
+ "options": [
+ { "value": "left", "label": "Left" },
+ { "value": "center", "label": "Center" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+ { "type": "color", "id": "bg_color", "label": "Background color", "default": "#0D0D0D" },
+ { "type": "color", "id": "accent_color", "label": "Accent color", "default": "#E8690A" },
+ { "type": "range", "id": "padding_top", "label": "Padding top", "min": 0, "max": 120, "step": 4, "default": 64 },
+ { "type": "range", "id": "padding_bottom", "label": "Padding bottom", "min": 0, "max": 120, "step": 4, "default": 64 }
+ ],
+ "blocks": [
+ {
+ "type": "date",
+ "name": "Tour Date",
+ "settings": [
+ {
+ "type": "text",
+ "id": "date",
+ "label": "Date",
+ "info": "Use YYYY-MM-DD format for reliable sorting/filtering. Example: 2026-04-22"
+ },
+ {
+ "type": "text",
+ "id": "descriptor",
+ "label": "Descriptor (optional)",
+ "info": "Shown in italics under venue. Example: support for Paul Gilbert"
+ },
+ { "type": "text", "id": "venue", "label": "Venue" },
+ { "type": "text", "id": "city", "label": "City" },
+ { "type": "text", "id": "state", "label": "State / Region" },
+ { "type": "url", "id": "ticket_url", "label": "Ticket URL (leave blank for TBA)" },
+ { "type": "checkbox", "id": "sold_out", "label": "Sold out", "default": false }
+ ]
+ }
+ ],
+ "presets": [
+ { "name": "GK Tour Dates" }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-tour-dates-slot.liquid b/sections/gk-tour-dates-slot.liquid
new file mode 100644
index 00000000000..f926c6cd5f2
--- /dev/null
+++ b/sections/gk-tour-dates-slot.liquid
@@ -0,0 +1,14 @@
+
+
+{% schema %}
+{
+ "name": "GK Tour Dates (slot)",
+ "settings": [
+ {
+ "type": "paragraph",
+ "content": "This section only marks the position of the tour dates on the page. To add, edit, or reorder dates, scroll down in the sidebar and click the GK Tour Dates section — that is where the date blocks live."
+ }
+ ],
+ "presets": [{ "name": "GK Tour Dates (slot)" }]
+}
+{% endschema %}
diff --git a/sections/gk-tour-dates.liquid b/sections/gk-tour-dates.liquid
new file mode 100644
index 00000000000..83cf2e814ad
--- /dev/null
+++ b/sections/gk-tour-dates.liquid
@@ -0,0 +1,880 @@
+{% comment %}
+ GK Tour Dates — unified section (ONE instance, shared block data)
+ ─────────────────────────────────────────────────────────────────
+ This section lives in layout/theme.liquid as a STATIC section so
+ the same instance (same blocks / same dates) renders on both:
+ • template = index → home variant (gk-date-row classes)
+ • template = page/dates → page variant (gk-date classes)
+
+ All block editing happens in ONE place in the Theme Editor.
+ The section detects the current template and adapts:
+ - visible rows before "show more"
+ - CSS class namespace (gk-date-row vs gk-date)
+ - CTA / reveal behaviour
+
+ Block type: show
+ show_date — parseable date string, e.g. "April 22, 2026"
+ venue_name — venue name
+ city_state — "City, ST"
+ descriptor — optional sub-line, e.g. "support for Paul Gilbert"
+ ticket_url — leave blank → TBA
+ is_sold_out — check for SOLD OUT
+
+ Date logic:
+ • Blocks are sorted ascending by show_date
+ • Past dates are filtered out automatically
+ • Unparseable dates are kept visible (safe fallback)
+{% endcomment %}
+
+{%- liquid
+ assign today_ymd = 'now' | date: '%Y-%m-%d'
+ assign today_ts = today_ymd | date: '%s' | plus: 0
+
+ comment
+ Detect which visual variant to use based on current template.
+ index template → home variant (gk-date-row)
+ page.dates template → page variant (gk-date)
+ endcomment
+
+ if template.name == 'index'
+ assign is_home = true
+ assign row_prefix = 'gk-date-row'
+ assign apply_hidden = false
+ assign initial_visible = section.settings.home_visible_count | default: 3
+ assign reveal_step = section.settings.home_reveal_step | default: 3
+ else
+ assign is_home = false
+ assign row_prefix = 'gk-date'
+ assign apply_hidden = true
+ assign initial_visible = section.settings.page_visible_count | default: 10
+ assign reveal_step = section.settings.page_reveal_step | default: 10
+ endif
+-%}
+
+{%- comment -%}
+ ── STEP 1: Build a sortable key list of UPCOMING block indices ──
+ Sort key = "YYYYMMDD_blockIndex" → lexicographic sort is date-correct.
+ Unparseable dates get key "99999999_..." so they sort to the end
+ and stay visible (safe fallback).
+{%- endcomment -%}
+{%- assign _pairs = '' -%}
+{%- for block in section.blocks -%}
+ {%- if block.type == 'show' -%}
+ {%- assign _raw = block.settings.show_date | default: '' | strip -%}
+ {%- assign _show_ts = _raw | date: '%s' | plus: 0 -%}
+ {%- assign _keep = true -%}
+
+ {%- comment -%} Only hide dates we can CONFIRM are in the past (valid year ≥ 2020 + before today) {%- endcomment -%}
+ {%- if _raw == blank -%}
+ {%- assign _has_other = block.settings.venue_name | default: '' | append: block.settings.city_state | default: '' | strip -%}
+ {%- if _has_other == blank -%}
+ {%- assign _keep = false -%}
+ {%- endif -%}
+ {%- elsif _show_ts != 0 -%}
+ {%- assign _parsed_year = _raw | date: '%Y' | plus: 0 -%}
+ {%- if _parsed_year >= 2020 and _show_ts < today_ts -%}
+ {%- assign _keep = false -%}
+ {%- endif -%}
+ {%- endif -%}
+
+ {%- if _keep -%}
+ {%- assign _sort_key = _raw | date: '%Y%m%d' -%}
+ {%- if _sort_key == blank -%}
+ {%- assign _sort_key = '99999999' -%}
+ {%- else -%}
+ {%- assign _sk_year = _sort_key | slice: 0, 4 | plus: 0 -%}
+ {%- if _sk_year < 2020 -%}{%- assign _sort_key = '99999999' -%}{%- endif -%}
+ {%- endif -%}
+ {%- assign _pairs = _pairs | append: _sort_key | append: '_' | append: forloop.index0 | append: '|' -%}
+ {%- endif -%}
+ {%- endif -%}
+{%- endfor -%}
+
+{%- assign _sorted_pairs = _pairs | split: '|' | sort -%}
+
+{%- comment -%} Count upcoming dates for show-more logic {%- endcomment -%}
+{%- assign upcoming_count = 0 -%}
+{%- for _p in _sorted_pairs -%}
+ {%- if _p != blank -%}{%- assign upcoming_count = upcoming_count | plus: 1 -%}{%- endif -%}
+{%- endfor -%}
+
+{%- comment -%}── FALLBACK: no blocks yet → count from snippet (settings textarea / hardcoded list) ──{%- endcomment -%}
+{%- if section.blocks.size == 0 -%}
+ {%- capture _fc -%}{%- render 'gk-tour-dates-shared', mode: 'count' -%}{%- endcapture -%}
+ {%- assign upcoming_count = _fc | strip | plus: 0 -%}
+{%- endif -%}
+
+{%- comment -%} Shared section wrapper class {%- endcomment -%}
+{%- if is_home -%}
+ {%- assign wrapper_class = 'gk-tour-dates gk-tour-dates--reveal' -%}
+ {%- assign inner_class = 'gk-tour-dates__inner' -%}
+ {%- assign eyebrow_class = 'gk-tour-dates__eyebrow' -%}
+ {%- assign heading_class = 'gk-tour-dates__heading' -%}
+ {%- assign subtext_class = 'gk-tour-dates__subtext' -%}
+ {%- assign list_class = 'gk-tour-dates__list' -%}
+ {%- assign empty_class = 'gk-tour-dates__empty' -%}
+{%- else -%}
+ {%- assign wrapper_class = 'gk-dates' -%}
+ {%- assign inner_class = 'gk-dates__inner' -%}
+ {%- assign eyebrow_class = 'gk-dates__eyebrow' -%}
+ {%- assign heading_class = 'gk-dates__heading' -%}
+ {%- assign subtext_class = 'gk-dates__subtext' -%}
+ {%- assign list_class = 'gk-dates__list' -%}
+ {%- assign empty_class = 'gk-dates__empty' -%}
+{%- endif -%}
+
+
+
+
+ {%- if section.settings.eyebrow != blank -%}
+
{{ section.settings.eyebrow }}
+ {%- endif -%}
+
+ {%- if section.settings.heading != blank -%}
+
{{ section.settings.heading }}
+ {%- endif -%}
+
+ {%- if section.settings.subtext != blank -%}
+
{{ section.settings.subtext }}
+ {%- endif -%}
+
+
+ {%- if section.blocks.size == 0 -%}
+ {%- comment -%}── FALLBACK: render from snippet until blocks are populated ──{%- endcomment -%}
+ {%- if is_home -%}
+ {%- render 'gk-tour-dates-shared', mode: 'render_home' -%}
+ {%- else -%}
+ {%- render 'gk-tour-dates-shared', mode: 'render', row_prefix: 'gk-date', visible_count: initial_visible, use_hidden_class: true -%}
+ {%- endif -%}
+ {%- else -%}
+ {%- assign render_idx = 0 -%}
+ {%- for _pair in _sorted_pairs -%}
+ {%- if _pair != blank -%}
+ {%- assign _block_idx = _pair | split: '_' | last | plus: 0 -%}
+ {%- assign _b = section.blocks[_block_idx] -%}
+
+ {%- assign show_date = _b.settings.show_date | default: '' | strip -%}
+ {%- assign venue_name = _b.settings.venue_name | default: '' | strip -%}
+ {%- assign city_state = _b.settings.city_state | default: '' | strip -%}
+ {%- assign descriptor = _b.settings.descriptor | default: '' | strip -%}
+ {%- assign ticket_url = _b.settings.ticket_url | default: '' | strip -%}
+ {%- assign is_sold_out = _b.settings.is_sold_out -%}
+
+ {%- assign extra_class = '' -%}
+ {%- if apply_hidden and render_idx >= initial_visible -%}
+ {%- assign extra_class = ' is-hidden' -%}
+ {%- endif -%}
+
+
+
+ {%- assign render_idx = render_idx | plus: 1 -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- endif -%}
+
+
+ {%- if upcoming_count == 0 -%}
+
{{ section.settings.empty_text }}
+ {%- endif -%}
+
+ {%- comment -%} ── Controls ── {%- endcomment -%}
+ {%- if is_home -%}
+ {%- if upcoming_count > initial_visible -%}
+
+
+ {{ section.settings.home_more_label }}
+
+
+ {%- endif -%}
+ {%- else -%}
+ {%- if upcoming_count > initial_visible -%}
+
+ {%- elsif section.settings.view_all_url != blank -%}
+
+ {%- endif -%}
+ {%- endif -%}
+
+
+
+
+{%- comment -%} ── JavaScript ── {%- endcomment -%}
+{%- if is_home and upcoming_count > initial_visible -%}
+
+{%- elsif is_home == false and upcoming_count > initial_visible -%}
+
+{%- endif -%}
+
+{% style %}
+/* ─── HOME VARIANT: .gk-tour-dates + .gk-date-row ─────────────────── */
+.gk-tour-dates {
+ --bg: {{ section.settings.bg_color }};
+ --text: #FFFFFF;
+ --line: rgba(255,255,255,0.12);
+ --muted: rgba(255,255,255,0.72);
+ --accent: {{ section.settings.accent_color }};
+
+ background: var(--bg);
+ color: var(--text);
+ padding: {{ section.settings.padding_top }}px 20px {{ section.settings.padding_bottom }}px;
+}
+
+.gk-tour-dates__inner {
+ max-width: 1100px;
+ margin: 0 auto;
+}
+
+.gk-tour-dates__eyebrow {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ text-transform: uppercase;
+ letter-spacing: 0.16em;
+ font-size: 12px;
+ color: rgba(255,255,255,0.62);
+ margin-bottom: 10px;
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__heading {
+ margin: 0 0 8px 0;
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.03em;
+ line-height: 1;
+ font-size: clamp(44px, 6vw, 76px);
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__subtext {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 16px;
+ color: var(--muted);
+ margin-bottom: 22px;
+ text-align: {{ section.settings.text_align }};
+ max-width: 70ch;
+}
+
+.gk-tour-dates__list {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+.gk-date-row {
+ display: grid;
+ grid-template-columns: minmax(160px, 220px) 1fr auto;
+ gap: 16px;
+ align-items: center;
+ padding: 14px 16px;
+ border: 1px solid var(--line);
+ border-radius: 14px;
+ background: rgba(0,0,0,0.22);
+ box-shadow: 0 18px 40px rgba(0,0,0,0.28);
+ transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
+}
+
+.gk-date-row:hover {
+ transform: translateY(-1px);
+ border-color: rgba(232,105,10,0.35);
+ background: linear-gradient(180deg, rgba(232,105,10,0.14), rgba(0,0,0,0.18));
+}
+
+.gk-date-row__date {
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.02em;
+ color: var(--accent);
+ font-size: 28px;
+ line-height: 1;
+}
+
+.gk-date-row__details {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ min-width: 0;
+}
+
+.gk-date-row__venue {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 18px;
+ line-height: 1.2;
+ color: #FFFFFF;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__descriptor {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 12px;
+ font-style: italic;
+ color: rgba(255,255,255,0.50);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__city {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ color: rgba(255,255,255,0.72);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date-row__cta {
+ display: flex;
+ justify-content: flex-end;
+}
+
+.gk-date-row__btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 10px 14px;
+ border-radius: 999px;
+ background: var(--accent);
+ color: #0D0D0D;
+ text-decoration: none;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ border: 1px solid var(--accent);
+ transition: transform 140ms ease, opacity 140ms ease;
+}
+
+.gk-date-row__btn:hover { opacity: 0.92; transform: translateY(-1px); }
+.gk-date-row__btn:active { transform: translateY(0); }
+
+.gk-date-row__soldout {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 10px 14px;
+ border-radius: 999px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ color: rgba(255,255,255,0.55);
+ border: 1px solid rgba(255,255,255,0.18);
+ background: rgba(0,0,0,0.18);
+}
+
+.gk-tour-dates__more-wrap {
+ margin-top: 16px;
+ display: flex;
+ justify-content: {{ section.settings.text_align }};
+}
+
+.gk-tour-dates__more {
+ appearance: none;
+ border: 1px solid rgba(255,255,255,0.16);
+ background: rgba(0,0,0,0.22);
+ color: rgba(255,255,255,0.88);
+ border-radius: 999px;
+ padding: 12px 16px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ cursor: pointer;
+ transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
+}
+
+.gk-tour-dates__more:hover {
+ transform: translateY(-1px);
+ border-color: rgba(232,105,10,0.30);
+ background: rgba(0,0,0,0.34);
+}
+
+.gk-tour-dates__empty {
+ margin-top: 18px;
+ padding: 16px 0;
+ border-top: 1px solid var(--line);
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 16px;
+ color: var(--muted);
+}
+
+@media (max-width: 720px) {
+ .gk-date-row {
+ grid-template-columns: 1fr;
+ gap: 10px;
+ }
+ .gk-date-row__cta { justify-content: flex-start; }
+ .gk-date-row__date { font-size: 30px; }
+}
+
+/* ─── PAGE VARIANT: .gk-dates + .gk-date ──────────────────────────── */
+.gk-dates {
+ --bg: {{ section.settings.bg_color }};
+ --text: #fff;
+ --muted: rgba(255,255,255,0.72);
+ --line: rgba(255,255,255,0.10);
+ --ring: rgba(255,255,255,0.12);
+ --accent: {{ section.settings.accent_color }};
+ --accentGlow: rgba(232,105,10,0.22);
+ --accentGlowStrong:rgba(232,105,10,0.35);
+
+ background: var(--bg);
+ color: var(--text);
+ padding: {{ section.settings.padding_top }}px 20px {{ section.settings.padding_bottom }}px;
+}
+
+.gk-dates__inner { max-width: 1100px; margin: 0 auto; }
+
+.gk-dates__eyebrow {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ text-transform: uppercase;
+ letter-spacing: 0.16em;
+ font-size: 12px;
+ color: rgba(255,255,255,0.62);
+ margin-bottom: 10px;
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-dates__heading {
+ margin: 0;
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.03em;
+ line-height: 1;
+ font-size: clamp(44px, 6vw, 76px);
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-dates__subtext {
+ margin-top: 10px;
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ color: var(--muted);
+ font-size: 16px;
+ line-height: 1.4;
+ max-width: 60ch;
+ text-align: {{ section.settings.text_align }};
+}
+
+.gk-dates__list {
+ margin-top: 26px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.gk-date {
+ position: relative;
+ display: grid;
+ grid-template-columns: minmax(170px, 240px) 1fr auto;
+ gap: 16px;
+ align-items: center;
+ padding: 18px 18px;
+ border-radius: 18px;
+ border: 1px solid var(--ring);
+ background:
+ radial-gradient(1200px 200px at 20% 0%, rgba(255,255,255,0.06), transparent 50%),
+ linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.02));
+ box-shadow: 0 18px 42px rgba(0,0,0,0.32);
+ transition: transform 160ms ease, border-color 160ms ease, box-shadow 160ms ease;
+}
+
+.gk-date::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ border-radius: 18px;
+ pointer-events: none;
+ opacity: 0;
+ transition: opacity 160ms ease;
+ background:
+ radial-gradient(800px 160px at 20% 50%, var(--accentGlowStrong), transparent 65%),
+ linear-gradient(90deg, rgba(232,105,10,0.10), rgba(232,105,10,0.00) 55%);
+}
+
+.gk-date:hover {
+ transform: translateY(-1px);
+ border-color: rgba(232,105,10,0.45);
+ box-shadow:
+ 0 22px 58px rgba(0,0,0,0.40),
+ 0 0 0 1px rgba(232,105,10,0.18) inset;
+}
+
+.gk-date:hover::before { opacity: 1; }
+.gk-date.is-hidden { display: none; }
+
+.gk-date__date {
+ font-family: "Bebas Neue", sans-serif;
+ font-weight: 400;
+ letter-spacing: 0.02em;
+ color: var(--accent);
+ font-size: 34px;
+ line-height: 1;
+ white-space: nowrap;
+}
+
+.gk-date__details { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
+
+.gk-date__venue {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 20px;
+ line-height: 1.2;
+ color: #fff;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date__descriptor {
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 13px;
+ font-style: italic;
+ color: rgba(255,255,255,0.50);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date__city {
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 13px;
+ letter-spacing: 0.10em;
+ text-transform: uppercase;
+ color: rgba(255,255,255,0.70);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.gk-date__cta { display: flex; justify-content: flex-end; }
+
+.gk-date__pill {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 44px;
+ padding: 10px 18px;
+ border-radius: 999px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ text-decoration: none;
+ border: 1px solid rgba(255,255,255,0.16);
+ background: rgba(0,0,0,0.20);
+ color: rgba(255,255,255,0.86);
+ transition: transform 140ms ease, border-color 140ms ease, background 140ms ease, box-shadow 140ms ease;
+}
+
+.gk-date__pill--accent {
+ background: rgba(232,105,10,0.90);
+ border-color: rgba(232,105,10,0.90);
+ color: #0D0D0D;
+}
+
+.gk-date__pill--muted { }
+
+.gk-date__pill:hover {
+ transform: translateY(-1px);
+ border-color: rgba(255,255,255,0.26);
+ background: rgba(0,0,0,0.28);
+}
+
+.gk-date__pill--accent:hover {
+ background: rgba(232,105,10,0.98);
+ border-color: rgba(232,105,10,0.98);
+ box-shadow: 0 10px 26px rgba(232,105,10,0.28);
+}
+
+.gk-date__pill:focus-visible,
+.gk-dates__btn:focus-visible {
+ outline: 2px solid rgba(232,105,10,0.75);
+ outline-offset: 3px;
+}
+
+.gk-dates__empty {
+ margin-top: 18px;
+ padding: 16px 0;
+ border-top: 1px solid var(--line);
+ font-family: "DM Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
+ font-size: 16px;
+ color: var(--muted);
+}
+
+.gk-dates__controls {
+ margin-top: 18px;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+}
+
+.gk-dates__btn {
+ cursor: pointer;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 44px;
+ padding: 10px 16px;
+ border-radius: 999px;
+ font-family: "DM Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 12px;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ border: 1px solid rgba(255,255,255,0.16);
+ background: rgba(232,105,10,0.90);
+ color: #0D0D0D;
+ text-decoration: none;
+ transition: transform 140ms ease, opacity 140ms ease, border-color 140ms ease, background 140ms ease, box-shadow 140ms ease;
+}
+
+.gk-dates__btn:hover { transform: translateY(-1px); opacity: 0.96; box-shadow: 0 10px 26px rgba(232,105,10,0.20); }
+.gk-dates__btn:active { transform: translateY(0); }
+
+.gk-dates__btn--ghost {
+ background: rgba(0,0,0,0.22);
+ color: rgba(255,255,255,0.86);
+ border-color: rgba(255,255,255,0.16);
+ box-shadow: none;
+}
+
+.gk-dates__btn--ghost:hover {
+ background: rgba(0,0,0,0.30);
+ border-color: rgba(255,255,255,0.26);
+ box-shadow: none;
+}
+
+@media (max-width: 820px) {
+ .gk-date {
+ grid-template-columns: 1fr;
+ gap: 10px;
+ padding: 16px;
+ }
+ .gk-date__cta { justify-content: flex-start; }
+ .gk-date__date { font-size: 32px; }
+}
+{% endstyle %}
+
+{% schema %}
+{
+ "name": "GK Tour Dates",
+ "blocks": [
+ {
+ "type": "show",
+ "name": "Show",
+ "settings": [
+ {
+ "type": "text",
+ "id": "show_date",
+ "label": "Date",
+ "info": "IMPORTANT: Include the full year — e.g. February 28, 2026. Dates without a year may not display correctly. Past dates are hidden automatically."
+ },
+ {
+ "type": "text",
+ "id": "venue_name",
+ "label": "Venue"
+ },
+ {
+ "type": "text",
+ "id": "city_state",
+ "label": "City, State",
+ "info": "e.g. Omaha, NE"
+ },
+ {
+ "type": "text",
+ "id": "descriptor",
+ "label": "Descriptor (optional)",
+ "info": "e.g. support for Paul Gilbert — renders in italic under the venue name"
+ },
+ {
+ "type": "url",
+ "id": "ticket_url",
+ "label": "Ticket URL",
+ "info": "Leave blank to show TBA"
+ },
+ {
+ "type": "checkbox",
+ "id": "is_sold_out",
+ "label": "Sold out",
+ "default": false
+ }
+ ]
+ }
+ ],
+ "settings": [
+ {
+ "type": "header",
+ "content": "Header text"
+ },
+ { "type": "text", "id": "eyebrow", "label": "Eyebrow", "default": "Tour Dates" },
+ { "type": "text", "id": "heading", "label": "Heading", "default": "GREG KOCH DATES" },
+ { "type": "text", "id": "subtext", "label": "Subtext", "default": "See upcoming dates below." },
+ { "type": "text", "id": "empty_text", "label": "Empty state text", "default": "No upcoming dates. Check back soon." },
+ {
+ "type": "select",
+ "id": "text_align",
+ "label": "Text alignment",
+ "default": "left",
+ "options": [
+ { "value": "left", "label": "Left" },
+ { "value": "center", "label": "Center" },
+ { "value": "right", "label": "Right" }
+ ]
+ },
+ {
+ "type": "header",
+ "content": "Homepage settings"
+ },
+ { "type": "range", "id": "home_visible_count", "label": "Initially visible (homepage)", "min": 1, "max": 20, "step": 1, "default": 3 },
+ { "type": "range", "id": "home_reveal_step", "label": "Reveal step (homepage)", "min": 1, "max": 20, "step": 1, "default": 3 },
+ { "type": "text", "id": "home_more_label", "label": "Show more button label", "default": "Show more dates" },
+ {
+ "type": "header",
+ "content": "Dates page settings"
+ },
+ { "type": "range", "id": "page_visible_count", "label": "Initially visible (dates page)", "min": 1, "max": 30, "step": 1, "default": 10 },
+ { "type": "range", "id": "page_reveal_step", "label": "Reveal step (dates page)", "min": 1, "max": 30, "step": 1, "default": 10 },
+ { "type": "text", "id": "page_more_label", "label": "Show more label", "default": "Show more dates" },
+ { "type": "text", "id": "page_less_label", "label": "Show fewer label", "default": "Show fewer dates" },
+ { "type": "text", "id": "view_all_label", "label": "View all label", "default": "View all dates" },
+ { "type": "url", "id": "view_all_url", "label": "View all URL" },
+ {
+ "type": "header",
+ "content": "Style"
+ },
+ { "type": "color", "id": "bg_color", "label": "Background color", "default": "#0D0D0D" },
+ { "type": "color", "id": "accent_color", "label": "Accent color", "default": "#E8690A" },
+ { "type": "range", "id": "padding_top", "label": "Padding top", "min": 0, "max": 120, "step": 4, "default": 64 },
+ { "type": "range", "id": "padding_bottom", "label": "Padding bottom", "min": 0, "max": 120, "step": 4, "default": 64 }
+ ],
+ "presets": [
+ { "name": "GK Tour Dates" }
+ ]
+}
+{% endschema %}
diff --git a/sections/gk-vault-optin.liquid b/sections/gk-vault-optin.liquid
new file mode 100644
index 00000000000..06d426cda71
--- /dev/null
+++ b/sections/gk-vault-optin.liquid
@@ -0,0 +1,1155 @@
+{% comment %}
+ GK Vault Opt-in (Landing Page) - premium dark/orange rebuild
+ - Matches the GK Shop + Press design system exactly:
+ single burnt-orange accent (#C8601A), highlight (#f0a060), near-black text on
+ orange molten buttons, glass card depth (gradient bg + 1px top-edge highlight +
+ soft shadow), kicker labels, bold condensed all-caps headings.
+ - Sections: Hero / Opt-in form (photo + Klaviyo form) / What's inside grid.
+ - Greg photo is an image_picker so it is swappable in the Shopify theme editor.
+ - Form submits to Klaviyo via the client subscriptions API (Option A) so fields
+ stay theme-editable and submissions land in Greg's Vault list.
+ - All motion respects prefers-reduced-motion. Scoped under .gk-vault only.
+{% endcomment %}
+
+{%- assign accent = '#C8601A' -%}
+
+{%- comment -%} Color the highlight phrase inside the headline orange. {%- endcomment -%}
+{%- assign heading_safe = section.settings.heading | escape -%}
+{%- if section.settings.highlight_text != blank -%}
+ {%- assign hl_safe = section.settings.highlight_text | escape -%}
+ {%- capture hl_span -%}{{ hl_safe }} {%- endcapture -%}
+ {%- assign heading_html = heading_safe | replace: hl_safe, hl_span -%}
+{%- else -%}
+ {%- assign heading_html = heading_safe -%}
+{%- endif -%}
+
+
+ {% comment %} ============ HERO ============ {% endcomment %}
+
+
+
+
+
+
+ {% if section.settings.kicker != blank %}
+
{{ section.settings.kicker | escape }}
+ {% endif %}
+
+ {% if section.settings.heading != blank %}
+
{{ heading_html }}
+ {% endif %}
+
+ {% if section.settings.subhead != blank %}
+
{{ section.settings.subhead | escape }}
+ {% endif %}
+
+ {% if section.settings.italic_line != blank %}
+
{{ section.settings.italic_line | escape }}
+ {% endif %}
+
+
+
+ {{ section.settings.stat_1_num | escape }}
+ {{ section.settings.stat_1_label | escape }}
+
+
+ {{ section.settings.stat_2_num | escape }}
+ {{ section.settings.stat_2_label | escape }}
+
+
+ {{ section.settings.stat_3_num | escape }}
+ {{ section.settings.stat_3_label | escape }}
+
+
+
+
+
+ {% comment %} ============ OPT-IN FORM ============ {% endcomment %}
+
+
+
+
+ {% if section.settings.greg_photo != blank %}
+
+ {{
+ section.settings.greg_photo
+ | image_url: width: 1200
+ | image_tag:
+ loading: 'lazy',
+ sizes: '(max-width: 880px) 100vw, 480px',
+ widths: '480, 640, 800, 1000, 1200',
+ class: 'gk-vault__photo',
+ alt: section.settings.greg_photo.alt | default: 'Greg Koch'
+ }}
+
+ {% else %}
+
+ {{ 'image' | placeholder_svg_tag: 'gk-vault__photo placeholder-svg' }}
+
+ {% endif %}
+
+
+
+
+
+
+
+ {% comment %} ============ WHAT'S INSIDE ============ {% endcomment %}
+ {%- assign vault_blocks = section.blocks | where: 'type', 'vault_item' -%}
+ {%- if section.settings.inside_heading != blank or vault_blocks.size > 0 -%}
+
+
+ {% if section.settings.inside_kicker != blank %}
+
{{ section.settings.inside_kicker | escape }}
+ {% endif %}
+ {% if section.settings.inside_heading != blank %}
+
{{ section.settings.inside_heading | escape }}
+ {% endif %}
+ {% if section.settings.inside_intro != blank %}
+
{{ section.settings.inside_intro | escape }}
+ {% endif %}
+
+
+ {%- if vault_blocks.size > 0 -%}
+
+ {%- for block in section.blocks -%}
+ {%- if block.type == 'vault_item' -%}
+
+
+ {% if block.settings.bonus %}
+ Bonus
+ {% endif %}
+ {% if block.settings.title != blank %}
+ {{ block.settings.title | escape }}
+ {% endif %}
+ {% if block.settings.description != blank %}
+ {{ block.settings.description | escape }}
+ {% endif %}
+
+ {%- endif -%}
+ {%- endfor -%}
+
+ {%- endif -%}
+
+ {% if section.settings.closing_line != blank %}
+ {%- assign closing_safe = section.settings.closing_line | escape -%}
+ {%- if section.settings.closing_highlight != blank -%}
+ {%- assign chl = section.settings.closing_highlight | escape -%}
+ {%- capture chl_span -%}
{{ chl }} {%- endcapture -%}
+ {%- assign closing_html = closing_safe | replace: chl, chl_span -%}
+ {%- else -%}
+ {%- assign closing_html = closing_safe -%}
+ {%- endif -%}
+
{{ closing_html }}
+ {% endif %}
+
+ {%- endif -%}
+
+ {% style %}
+ /* =========================================================
+ GK VAULT OPT-IN (scoped under .gk-vault)
+ Single accent: {{ accent }}
+ ========================================================= */
+ .gk-vault {
+ --gk-accent: {{ accent }};
+ --gk-accent-soft: rgba(200, 96, 26, 0.6);
+ --gk-accent-glow: rgba(200, 96, 26, 0.28);
+ --gk-hi: #f0a060;
+ --gk-card-line: rgba(255, 255, 255, 0.12);
+ position: relative;
+ background: #0D0D0D;
+ color: #f4f4f5;
+ overflow: hidden;
+ }
+
+ .gk-vault__wrap {
+ width: min(1140px, calc(100% - 48px));
+ margin: 0 auto;
+ }
+
+ /* ---- Hero ---- */
+ .gk-vault__hero {
+ position: relative;
+ padding: clamp(56px, 8vw, 104px) 0 clamp(40px, 5vw, 64px);
+ text-align: center;
+ }
+
+ .gk-vault__hero-glow {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ width: min(720px, 90%);
+ height: 440px;
+ background: radial-gradient(ellipse at center, rgba(200, 96, 26, 0.20) 0%, transparent 66%);
+ pointer-events: none;
+ z-index: 0;
+ }
+
+ .gk-vault__hero-inner {
+ position: relative;
+ z-index: 1;
+ }
+
+ .gk-vault__vaultTile {
+ position: relative;
+ width: 72px;
+ height: 72px;
+ margin: 0 auto 22px;
+ border-radius: 16px;
+ display: grid;
+ place-items: center;
+ color: var(--gk-accent);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0) 60%),
+ rgba(200, 96, 26, 0.08);
+ border: 1px solid rgba(200, 96, 26, 0.35);
+ box-shadow:
+ 0 10px 30px -12px rgba(0, 0, 0, 0.8),
+ inset 0 1px 0 rgba(255, 255, 255, 0.12),
+ 0 0 28px rgba(200, 96, 26, 0.22);
+ overflow: hidden;
+ }
+
+ .gk-vault__vaultGlow {
+ position: absolute;
+ inset: 0;
+ border-radius: inherit;
+ background: radial-gradient(circle at 50% 45%, var(--gk-accent-glow), transparent 68%);
+ opacity: 0.5;
+ transform: scale(0.85);
+ animation: gkv-breathe 4s ease-in-out infinite;
+ pointer-events: none;
+ }
+
+ .gk-vault__vaultIco {
+ position: relative;
+ width: 36px;
+ height: 36px;
+ }
+
+ .gk-vault__kicker {
+ letter-spacing: 0.22em;
+ text-transform: uppercase;
+ font-size: 12px;
+ font-weight: 800;
+ color: var(--gk-accent);
+ margin-bottom: 14px;
+ }
+
+ .gk-vault__heading {
+ margin: 0 auto;
+ max-width: 16ch;
+ line-height: 0.95;
+ font-weight: 900;
+ letter-spacing: -0.02em;
+ text-transform: uppercase;
+ font-size: clamp(40px, 7vw, 78px);
+ color: #ffffff;
+ }
+
+ .gk-vault__hl { color: var(--gk-accent); }
+
+ .gk-vault__subhead {
+ margin: 18px auto 0;
+ max-width: 52ch;
+ font-size: clamp(16px, 2.2vw, 19px);
+ line-height: 1.55;
+ opacity: 0.85;
+ }
+
+ .gk-vault__italic {
+ margin: 12px auto 0;
+ max-width: 52ch;
+ font-style: italic;
+ font-size: 15px;
+ line-height: 1.55;
+ color: var(--gk-hi);
+ opacity: 0.85;
+ }
+
+ /* Stat row: 3 cells split by hairlines */
+ .gk-vault__stats {
+ margin: clamp(30px, 4vw, 46px) auto 0;
+ max-width: 620px;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ border: 1px solid var(--gk-card-line);
+ border-radius: 14px;
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.015));
+ box-shadow:
+ 0 10px 30px -12px rgba(0, 0, 0, 0.8),
+ inset 0 1px 0 rgba(255, 255, 255, 0.07);
+ overflow: hidden;
+ }
+
+ .gk-vault__stat {
+ padding: 22px 14px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 6px;
+ }
+
+ .gk-vault__stat + .gk-vault__stat {
+ border-left: 1px solid var(--gk-card-line);
+ }
+
+ .gk-vault__statNum {
+ font-size: clamp(28px, 5vw, 40px);
+ font-weight: 900;
+ line-height: 1;
+ color: var(--gk-accent);
+ }
+
+ .gk-vault__statLabel {
+ font-size: 11px;
+ font-weight: 700;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ opacity: 0.7;
+ }
+
+ /* ---- Opt-in (two-column) ---- */
+ .gk-vault__optin {
+ display: grid;
+ grid-template-columns: 0.9fr 1.1fr;
+ gap: clamp(20px, 3vw, 40px);
+ align-items: stretch;
+ padding: clamp(20px, 3vw, 36px) 0 clamp(44px, 6vw, 80px);
+ }
+
+ .gk-vault__photoCol { display: flex; }
+
+ .gk-vault__photoFrame {
+ position: relative;
+ width: 100%;
+ border-radius: 16px;
+ overflow: hidden;
+ border: 1px solid var(--gk-card-line);
+ box-shadow:
+ 0 18px 44px -16px rgba(0, 0, 0, 0.8),
+ inset 0 1px 0 rgba(255, 255, 255, 0.08);
+ background: rgba(255, 255, 255, 0.03);
+ }
+
+ .gk-vault__photoFrame::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 14%;
+ right: 14%;
+ height: 1px;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
+ pointer-events: none;
+ z-index: 2;
+ }
+
+ .gk-vault__photo {
+ display: block;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+
+ .gk-vault__photoFrame--empty .gk-vault__photo {
+ aspect-ratio: 4 / 5;
+ background: rgba(255, 255, 255, 0.04);
+ }
+
+ /* Form glass card */
+ .gk-vault__formCard {
+ position: relative;
+ border-radius: 16px;
+ padding: clamp(24px, 3vw, 40px);
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0) 22%),
+ rgba(255, 255, 255, 0.04);
+ border: 1px solid var(--gk-card-line);
+ box-shadow:
+ 0 18px 44px -16px rgba(0, 0, 0, 0.8),
+ inset 0 1px 0 rgba(255, 255, 255, 0.07);
+ overflow: hidden;
+ }
+
+ .gk-vault__formEdge {
+ position: absolute;
+ top: 0;
+ left: 14%;
+ right: 14%;
+ height: 1px;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
+ pointer-events: none;
+ }
+
+ .gk-vault__formKicker {
+ letter-spacing: 0.18em;
+ text-transform: uppercase;
+ font-size: 11px;
+ font-weight: 800;
+ color: var(--gk-accent);
+ margin-bottom: 10px;
+ }
+
+ .gk-vault__formHeading {
+ margin: 0 0 22px;
+ font-size: clamp(24px, 3.4vw, 34px);
+ font-weight: 900;
+ line-height: 1.02;
+ letter-spacing: -0.01em;
+ text-transform: uppercase;
+ }
+
+ .gk-vault__row {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 14px;
+ }
+
+ .gk-vault__field { margin-bottom: 16px; }
+
+ .gk-vault__field label {
+ display: block;
+ font-size: 11px;
+ font-weight: 700;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ color: rgba(255, 255, 255, 0.6);
+ margin-bottom: 8px;
+ }
+
+ .gk-vault__req { color: var(--gk-accent); }
+
+ .gk-vault__field input {
+ width: 100%;
+ box-sizing: border-box;
+ background: rgba(0, 0, 0, 0.35);
+ border: 1px solid rgba(255, 255, 255, 0.14);
+ border-radius: 10px;
+ color: #f4f4f5;
+ font-size: 16px;
+ padding: 13px 14px;
+ outline: none;
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
+ }
+
+ .gk-vault__field input::placeholder { color: rgba(255, 255, 255, 0.32); }
+
+ .gk-vault__field input:focus {
+ border-color: var(--gk-accent);
+ box-shadow: 0 0 0 3px rgba(200, 96, 26, 0.28);
+ }
+
+ .gk-vault__field input.gk-vault--invalid {
+ border-color: #e0563f;
+ box-shadow: 0 0 0 3px rgba(224, 86, 63, 0.25);
+ }
+
+ /* Consent checkbox */
+ .gk-vault__consent {
+ display: flex;
+ align-items: flex-start;
+ gap: 12px;
+ margin: 4px 0 22px;
+ cursor: pointer;
+ font-size: 13px;
+ line-height: 1.5;
+ color: rgba(255, 255, 255, 0.72);
+ }
+
+ .gk-vault__consent input {
+ position: absolute;
+ opacity: 0;
+ width: 0;
+ height: 0;
+ }
+
+ .gk-vault__consentBox {
+ flex: 0 0 auto;
+ width: 20px;
+ height: 20px;
+ margin-top: 1px;
+ border-radius: 6px;
+ border: 1px solid rgba(255, 255, 255, 0.28);
+ background: rgba(0, 0, 0, 0.35);
+ display: grid;
+ place-items: center;
+ transition: border-color 0.2s ease, background 0.2s ease;
+ }
+
+ .gk-vault__consentBox::after {
+ content: "";
+ width: 10px;
+ height: 6px;
+ border-left: 2px solid #1a0e04;
+ border-bottom: 2px solid #1a0e04;
+ transform: rotate(-45deg) scale(0);
+ transform-origin: center;
+ transition: transform 0.18s ease;
+ margin-top: -2px;
+ }
+
+ .gk-vault__consent input:checked + .gk-vault__consentBox {
+ background: var(--gk-accent);
+ border-color: var(--gk-accent);
+ }
+
+ .gk-vault__consent input:checked + .gk-vault__consentBox::after {
+ transform: rotate(-45deg) scale(1);
+ }
+
+ .gk-vault__consent input:focus-visible + .gk-vault__consentBox {
+ box-shadow: 0 0 0 3px rgba(200, 96, 26, 0.35);
+ }
+
+ /* Molten primary submit button + hover shimmer */
+ .gk-vault__submit {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+ border: none;
+ border-radius: 12px;
+ padding: 17px 28px;
+ cursor: pointer;
+ font-weight: 800;
+ font-size: 13px;
+ letter-spacing: 2.5px;
+ text-transform: uppercase;
+ color: #1a0e04;
+ background: linear-gradient(180deg, #f0a85a 0%, #c8601a 60%, #a8490d 100%);
+ box-shadow:
+ 0 1px 0 rgba(255, 255, 255, 0.5) inset,
+ 0 -3px 8px rgba(100, 40, 0, 0.5) inset,
+ 0 10px 24px -8px rgba(200, 96, 26, 0.75),
+ 0 3px 6px rgba(0, 0, 0, 0.6);
+ transition: transform 0.15s ease, filter 0.25s ease;
+ }
+
+ .gk-vault__submit:hover {
+ transform: translateY(-2px);
+ filter: brightness(1.04);
+ }
+
+ .gk-vault__submit:focus-visible {
+ outline: none;
+ box-shadow:
+ 0 0 0 3px rgba(200, 96, 26, 0.45),
+ 0 10px 24px -8px rgba(200, 96, 26, 0.75);
+ }
+
+ .gk-vault__submit[disabled] {
+ opacity: 0.7;
+ cursor: progress;
+ transform: none;
+ }
+
+ .gk-vault__submitLabel { position: relative; z-index: 1; }
+
+ .gk-vault__submitSheen {
+ position: absolute;
+ top: 0;
+ left: -120%;
+ width: 80%;
+ height: 100%;
+ background: linear-gradient(100deg, transparent, rgba(255, 255, 255, 0.45), transparent);
+ transform: skewX(-18deg);
+ pointer-events: none;
+ }
+
+ .gk-vault__submit:hover .gk-vault__submitSheen {
+ animation: gkv-sheen 850ms ease;
+ }
+
+ .gk-vault__formMsg {
+ margin: 14px 0 0;
+ font-size: 13px;
+ line-height: 1.5;
+ color: #e0563f;
+ }
+
+ /* Success state */
+ .gk-vault__success {
+ text-align: center;
+ padding: 16px 0;
+ }
+
+ .gk-vault__successIco {
+ width: 56px;
+ height: 56px;
+ margin: 0 auto 16px;
+ border-radius: 50%;
+ display: grid;
+ place-items: center;
+ color: var(--gk-accent);
+ background: rgba(200, 96, 26, 0.12);
+ border: 1px solid rgba(200, 96, 26, 0.4);
+ }
+
+ .gk-vault__successIco svg { width: 28px; height: 28px; }
+
+ .gk-vault__successText {
+ margin: 0;
+ font-size: 17px;
+ font-weight: 700;
+ line-height: 1.5;
+ }
+
+ /* ---- What's inside ---- */
+ .gk-vault__inside {
+ padding-bottom: clamp(56px, 8vw, 104px);
+ }
+
+ .gk-vault__insideHead {
+ max-width: 720px;
+ margin: 0 0 clamp(26px, 3.4vw, 40px);
+ }
+
+ .gk-vault__insideHeading {
+ margin: 0 0 14px;
+ font-weight: 900;
+ letter-spacing: -0.02em;
+ text-transform: uppercase;
+ line-height: 0.96;
+ font-size: clamp(32px, 5.5vw, 56px);
+ }
+
+ .gk-vault__insideIntro {
+ margin: 0;
+ max-width: 62ch;
+ opacity: 0.82;
+ font-size: 16px;
+ line-height: 1.6;
+ }
+
+ .gk-vault__grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 18px;
+ }
+
+ .gk-vault__card {
+ position: relative;
+ grid-column: span 1;
+ border-radius: 12px;
+ padding: 24px 24px 22px;
+ isolation: isolate;
+ overflow: hidden;
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0) 22%),
+ rgba(255, 255, 255, 0.04);
+ border: 1px solid var(--gk-card-line);
+ box-shadow:
+ 0 10px 30px -12px rgba(0, 0, 0, 0.8),
+ inset 0 1px 0 rgba(255, 255, 255, 0.07);
+ transition:
+ transform 220ms cubic-bezier(0.22, 1, 0.36, 1),
+ border-color 220ms ease,
+ box-shadow 220ms ease;
+ opacity: 0;
+ transform: translateY(16px);
+ animation: gkv-fadeUp 520ms cubic-bezier(0.22, 1, 0.36, 1) forwards;
+ animation-delay: var(--gk-delay, 0ms);
+ }
+
+ .gk-vault__cardEdge {
+ position: absolute;
+ top: 0;
+ left: 14%;
+ right: 14%;
+ height: 1px;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
+ pointer-events: none;
+ }
+
+ .gk-vault__card:hover {
+ transform: translateY(-4px);
+ border-color: var(--gk-accent-soft);
+ box-shadow:
+ 0 18px 44px rgba(0, 0, 0, 0.5),
+ 0 0 30px rgba(200, 96, 26, 0.16),
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
+ }
+
+ /* Bonus card: full width, orange accent */
+ .gk-vault__card--bonus {
+ grid-column: 1 / -1;
+ border-color: rgba(200, 96, 26, 0.45);
+ border-top: 2px solid var(--gk-accent);
+ background:
+ linear-gradient(180deg, rgba(200, 96, 26, 0.14), rgba(200, 96, 26, 0.03) 40%),
+ rgba(255, 255, 255, 0.04);
+ }
+
+ .gk-vault__cardBadge {
+ display: inline-block;
+ margin-bottom: 12px;
+ font-size: 10px;
+ font-weight: 900;
+ letter-spacing: 0.14em;
+ text-transform: uppercase;
+ color: #1a0e04;
+ background: var(--gk-accent);
+ padding: 4px 10px;
+ border-radius: 999px;
+ box-shadow: 0 0 16px rgba(200, 96, 26, 0.5);
+ }
+
+ .gk-vault__cardTitle {
+ margin: 0 0 10px;
+ font-size: 18px;
+ font-weight: 900;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ line-height: 1.12;
+ color: #ffffff;
+ }
+
+ .gk-vault__card--bonus .gk-vault__cardTitle { color: var(--gk-hi); }
+
+ .gk-vault__cardDesc {
+ margin: 0;
+ font-size: 14px;
+ line-height: 1.6;
+ opacity: 0.78;
+ }
+
+ .gk-vault__closing {
+ margin: clamp(30px, 4vw, 48px) auto 0;
+ max-width: 60ch;
+ text-align: center;
+ font-size: clamp(17px, 2.4vw, 22px);
+ font-weight: 700;
+ line-height: 1.5;
+ }
+
+ /* =========================================================
+ RESPONSIVE
+ ========================================================= */
+ @media (max-width: 880px) {
+ .gk-vault__optin {
+ grid-template-columns: 1fr; /* photo stacks above form */
+ }
+ .gk-vault__photoFrame { aspect-ratio: 16 / 11; }
+ .gk-vault__grid {
+ grid-template-columns: 1fr; /* cards 1-up */
+ }
+ }
+
+ @media (max-width: 480px) {
+ .gk-vault__wrap { width: calc(100% - 28px); }
+ .gk-vault__row { grid-template-columns: 1fr; }
+ .gk-vault__stat { padding: 18px 8px; }
+ }
+
+ /* =========================================================
+ ANIMATIONS
+ ========================================================= */
+ @keyframes gkv-fadeUp { to { opacity: 1; transform: translateY(0); } }
+ @keyframes gkv-breathe {
+ 0%, 100% { opacity: 0.4; transform: scale(0.82); }
+ 50% { opacity: 0.7; transform: scale(1.04); }
+ }
+ @keyframes gkv-sheen {
+ 0% { left: -120%; }
+ 100% { left: 140%; }
+ }
+
+ /* =========================================================
+ REDUCED MOTION
+ ========================================================= */
+ @media (prefers-reduced-motion: reduce) {
+ .gk-vault__card {
+ opacity: 1 !important;
+ transform: none !important;
+ animation: none !important;
+ transition: none !important;
+ }
+ .gk-vault__card:hover { transform: none; }
+ .gk-vault__vaultGlow { animation: none !important; }
+ .gk-vault__submit:hover { transform: none; }
+ .gk-vault__submit:hover .gk-vault__submitSheen { animation: none !important; }
+ }
+ {% endstyle %}
+
+
+
+
+{% schema %}
+{
+ "name": "GK Vault Opt-in",
+ "tag": "section",
+ "class": "gk-vault-section",
+ "settings": [
+ {
+ "type": "header",
+ "content": "Hero"
+ },
+ {
+ "type": "text",
+ "id": "kicker",
+ "label": "Kicker",
+ "default": "The Gristle Vault"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Headline",
+ "default": "Access the Gristle Vault"
+ },
+ {
+ "type": "text",
+ "id": "highlight_text",
+ "label": "Headline phrase in orange",
+ "info": "This exact text inside the headline renders in the accent orange.",
+ "default": "Gristle Vault"
+ },
+ {
+ "type": "textarea",
+ "id": "subhead",
+ "label": "Subhead",
+ "default": "8 videos. 4+ hours. One PDF that ties it all together. All of it free."
+ },
+ {
+ "type": "text",
+ "id": "italic_line",
+ "label": "Italic line",
+ "default": "Every secret Greg probably shouldn't have shared."
+ },
+ {
+ "type": "header",
+ "content": "Stat Row"
+ },
+ {
+ "type": "text",
+ "id": "stat_1_num",
+ "label": "Stat 1 number",
+ "default": "8"
+ },
+ {
+ "type": "text",
+ "id": "stat_1_label",
+ "label": "Stat 1 label",
+ "default": "Video Lessons"
+ },
+ {
+ "type": "text",
+ "id": "stat_2_num",
+ "label": "Stat 2 number",
+ "default": "4+"
+ },
+ {
+ "type": "text",
+ "id": "stat_2_label",
+ "label": "Stat 2 label",
+ "default": "Hours"
+ },
+ {
+ "type": "text",
+ "id": "stat_3_num",
+ "label": "Stat 3 number",
+ "default": "1"
+ },
+ {
+ "type": "text",
+ "id": "stat_3_label",
+ "label": "Stat 3 label",
+ "default": "Master PDF"
+ },
+ {
+ "type": "header",
+ "content": "Opt-in Form"
+ },
+ {
+ "type": "image_picker",
+ "id": "greg_photo",
+ "label": "Greg photo",
+ "info": "Swappable here in the theme editor. Shown left of the form on desktop, above it on mobile."
+ },
+ {
+ "type": "text",
+ "id": "form_kicker",
+ "label": "Form kicker",
+ "default": "Free Instant Access"
+ },
+ {
+ "type": "text",
+ "id": "form_heading",
+ "label": "Form heading",
+ "default": "Get the Vault"
+ },
+ {
+ "type": "text",
+ "id": "consent_label",
+ "label": "Consent checkbox label",
+ "default": "I agree to receiving marketing and promotional materials from Greg Koch."
+ },
+ {
+ "type": "text",
+ "id": "submit_label",
+ "label": "Submit button label",
+ "default": "GET INSTANT ACCESS"
+ },
+ {
+ "type": "text",
+ "id": "success_message",
+ "label": "Success message",
+ "default": "Check your email for vault access."
+ },
+ {
+ "type": "header",
+ "content": "Klaviyo Connection"
+ },
+ {
+ "type": "text",
+ "id": "klaviyo_api_key",
+ "label": "Klaviyo public API key (company ID)",
+ "default": "XBDmgJ"
+ },
+ {
+ "type": "text",
+ "id": "klaviyo_list_id",
+ "label": "Klaviyo Vault list ID",
+ "info": "Find this in Klaviyo under Lists & Segments. Paste the Vault list ID here.",
+ "default": "REPLACE_WITH_VAULT_LIST_ID"
+ },
+ {
+ "type": "header",
+ "content": "What's Inside"
+ },
+ {
+ "type": "text",
+ "id": "inside_kicker",
+ "label": "Section kicker",
+ "default": "The Full Stash"
+ },
+ {
+ "type": "text",
+ "id": "inside_heading",
+ "label": "Section heading",
+ "default": "What's Inside the Vault"
+ },
+ {
+ "type": "textarea",
+ "id": "inside_intro",
+ "label": "Intro paragraph",
+ "default": "Not one throwaway lesson. A full stash of Greg's core techniques, tone ideas, harmonic concepts, gear breakdowns, and real-world playing insights from multiple full-length sessions."
+ },
+ {
+ "type": "text",
+ "id": "closing_line",
+ "label": "Closing line",
+ "default": "Total value: 4+ hours of instruction, 8 sessions, 1 reference guide. All free."
+ },
+ {
+ "type": "text",
+ "id": "closing_highlight",
+ "label": "Closing phrase in orange",
+ "default": "All free."
+ }
+ ],
+ "blocks": [
+ {
+ "type": "vault_item",
+ "name": "Vault item",
+ "settings": [
+ {
+ "type": "text",
+ "id": "title",
+ "label": "Title",
+ "default": "Chicken Picking Masterclass"
+ },
+ {
+ "type": "textarea",
+ "id": "description",
+ "label": "Description",
+ "default": "The complete breakdown of Greg's most requested technique, from the thumb-and-finger foundation to full hybrid picking integration."
+ },
+ {
+ "type": "checkbox",
+ "id": "bonus",
+ "label": "Bonus item (full-width orange accent)",
+ "default": false
+ }
+ ]
+ }
+ ],
+ "max_blocks": 16,
+ "presets": [
+ {
+ "name": "GK Vault Opt-in",
+ "blocks": [
+ { "type": "vault_item", "settings": { "title": "Chicken Picking Masterclass", "description": "The complete breakdown of Greg's most requested technique, from the thumb-and-finger foundation to full hybrid picking integration." } },
+ { "type": "vault_item", "settings": { "title": "Travis Picking Deep Dive", "description": "How Greg learned it with a flat pick instead of a thumb pick, and how to build the boom-chuck foundation without rushing." } },
+ { "type": "vault_item", "settings": { "title": "Chord Vocabulary Breakdown", "description": "The James Burton ninth bend, Robben Ford chord melody, artificial harmonics, the Allan Holdsworth minor 11th, the Steely Dan sus chord." } },
+ { "type": "vault_item", "settings": { "title": "Outside Playing & Harmonic Color", "description": "Pentatonic substitutions, chromatic approaches, diminished arpeggios, the tritone sub, and the Mahavishnu scale." } },
+ { "type": "vault_item", "settings": { "title": "Tone & Gear Rundown", "description": "The full live rig: Reverend signature guitars, Fishman Fluence pickups, the Tone King Royalist, and every pedal on the board." } },
+ { "type": "vault_item", "settings": { "title": "Blues Soloing Concepts", "description": "Playing over changes, the Jeff Beck whammy and harmonic techniques, self-accompanied blues, the Allman Brothers approach." } },
+ { "type": "vault_item", "settings": { "title": "Song Breakdown: Tonus Diabolicus", "description": "Note-for-note construction of a signature composition and where every idea came from." } },
+ { "type": "vault_item", "settings": { "title": "Song Breakdown: Spank It", "description": "The 1988 riff that became a cornerstone, with exact right-hand mechanics." } },
+ { "type": "vault_item", "settings": { "title": "The Gristle Vault Master Reference PDF", "description": "A 12-page compiled reference covering every technique, concept, voicing, gear spec, and principle from all 8 videos. Built to keep open while you watch.", "bonus": true } }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/gristle-vault.liquid b/sections/gristle-vault.liquid
new file mode 100644
index 00000000000..34f48869af0
--- /dev/null
+++ b/sections/gristle-vault.liquid
@@ -0,0 +1,374 @@
+
+
+ {%- comment -%} ——— Vault door intro (pure CSS swing-open) ——— {%- endcomment -%}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {%- comment -%} central locking wheel {%- endcomment -%}
+
+
+
+
+
+
+
+ {%- comment -%} emblem on the door {%- endcomment -%}
+
+ The
+ Gristle
+ Vault
+
+
+
+
+
+ {%- comment -%} ——— Atmosphere: stone wall + drifting smoke + torchlight ——— {%- endcomment -%}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {%- comment -%} ——— Hero ——— {%- endcomment -%}
+
+ Members Only · The Vault Is Open
+
+ {%- if section.settings.hero_logo != blank -%}
+
+ {%- else -%}
+
+ {%- endif -%}
+
+ {% if section.settings.subheading != blank %}
+ {{ section.settings.subheading }}
+ {% endif %}
+ {% if section.settings.body_text != blank %}
+ {{ section.settings.body_text }}
+ {% endif %}
+
+
+
+ {%- comment -%} ——— Sessions ——— {%- endcomment -%}
+ {%- assign video_blocks = section.blocks | where: 'type', 'video' -%}
+ {% if video_blocks.size > 0 %}
+
+ {% for block in video_blocks %}
+ {%- assign video_id = block.settings.youtube_url | split: 'v=' | last | split: '&' | first -%}
+ {% if block.settings.youtube_url contains 'youtu.be' %}
+ {%- assign video_id = block.settings.youtube_url | split: 'youtu.be/' | last | split: '?' | first -%}
+ {% endif %}
+
+
+
+
+
+ {% if block.settings.video_tag != blank %}
+
{{ block.settings.video_tag }}
+ {% endif %}
+
+ Session {{ forloop.index }}
+ {{ block.settings.video_title }}
+
+ {% if block.settings.video_description != blank %}
+
{{ block.settings.video_description }}
+ {% endif %}
+
+
+ {% endfor %}
+
+ {% endif %}
+
+ {%- comment -%} ——— PDF guide ——— {%- endcomment -%}
+ {%- assign pdf_blocks = section.blocks | where: 'type', 'pdf' -%}
+ {% for block in pdf_blocks %}
+
+
+
+
The Reference Document
+ {% if block.settings.pdf_title != blank %}
+
{{ block.settings.pdf_title }}
+ {% endif %}
+ {% if block.settings.pdf_description != blank %}
+
{{ block.settings.pdf_description }}
+ {% endif %}
+
+ {% if block.settings.pdf_url != blank %}
+
+ {% endif %}
+
+ {% endfor %}
+
+
+
+
+
+
+{% schema %}
+{
+ "name": "Gristle Vault",
+ "settings": [
+ {
+ "type": "image_picker",
+ "id": "hero_logo",
+ "label": "Hero Logo",
+ "info": "Wide Gristle Vault logo. Falls back to the gristle-vault-logo-wide.png theme asset if left blank."
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading (logo alt text)",
+ "default": "The Gristle Vault"
+ },
+ {
+ "type": "text",
+ "id": "subheading",
+ "label": "Subheading",
+ "default": "Technique. Tone. Theory."
+ },
+ {
+ "type": "textarea",
+ "id": "body_text",
+ "label": "Body Text",
+ "default": "Eight sessions of real guitar knowledge. The kind that takes decades to collect — phrasing, tone, theory, and the slightly-wrong choices that make a player impossible to copy."
+ }
+ ],
+ "blocks": [
+ {
+ "type": "video",
+ "name": "Video Session",
+ "limit": 8,
+ "settings": [
+ {
+ "type": "text",
+ "id": "youtube_url",
+ "label": "YouTube URL",
+ "info": "Paste the full YouTube URL (e.g. https://www.youtube.com/watch?v=...)"
+ },
+ { "type": "text", "id": "video_title", "label": "Video Title" },
+ { "type": "textarea", "id": "video_description", "label": "Video Description" },
+ { "type": "text", "id": "video_tag", "label": "Tag (e.g. Rhythm · Phrasing)" }
+ ]
+ },
+ {
+ "type": "pdf",
+ "name": "PDF Guide",
+ "limit": 1,
+ "settings": [
+ {
+ "type": "text",
+ "id": "pdf_title",
+ "label": "PDF Title",
+ "default": "The Gristle Vault Master Guide"
+ },
+ {
+ "type": "textarea",
+ "id": "pdf_description",
+ "label": "PDF Description",
+ "default": "Every concept from all eight sessions in one reference document. Techniques, tones, and theory from a lifetime of playing."
+ },
+ {
+ "type": "text",
+ "id": "pdf_url",
+ "label": "PDF URL",
+ "info": "Upload the PDF to Shopify Files and paste the CDN URL here.",
+ "default": "https://cdn.shopify.com/s/files/1/0976/0210/9761/files/gristle_vault_guide.pdf?v=1782747864"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "name": "Gristle Vault",
+ "blocks": [
+ {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=q3tf2NnffAs",
+ "video_title": "Rhythm, Groove and the C9",
+ "video_description": "Core rhythm approach through a blues progression. How to phrase, leave space, and make it sound like a conversation.",
+ "video_tag": "Rhythm · Phrasing"
+ }
+ },
+ {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=LBHZn4yqqa0",
+ "video_title": "One Guitar, Full Band",
+ "video_description": "Solo arrangements combining rhythm, bass movement, and lead lines simultaneously.",
+ "video_tag": "Solo Guitar · Arrangement"
+ }
+ },
+ {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=BmCQbpYT-T8",
+ "video_title": "Clinic: Gear, Chord Techniques and Tonus Diabolicus",
+ "video_description": "James Burton, Robben Ford, the Mahavishnu scale, hybrid picking reps.",
+ "video_tag": "Clinic · Tone · Theory"
+ }
+ },
+ {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=oPiIXRel65U",
+ "video_title": "Jeff Beck and The Grip",
+ "video_description": "Hybrid picking mechanics, pinch harmonics, whammy tricks. The slightly wrong choices that made Beck impossible to copy.",
+ "video_tag": "Technique · Influence"
+ }
+ },
+ {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=Y_SlPtbsnSI",
+ "video_title": "Chicken and Travis Picking Deep Dive",
+ "video_description": "Both techniques, both methods. The muted note is where both live or die.",
+ "video_tag": "Right Hand · Country · Fingerstyle"
+ }
+ },
+ {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=H4bPfA9CVzI",
+ "video_title": "Harmonic Color and Weaponized Open Strings",
+ "video_description": "Chromatic approaches, pentatonic swaps, diminished arpeggios. The slightly wrong open string can be the best note in the room.",
+ "video_tag": "Harmony · Outside Playing"
+ }
+ },
+ {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=nCEhYhFhS0E",
+ "video_title": "Live Rig Breakdown: Italian Tour",
+ "video_description": "Reverend signatures, Fishman Fluence, Tone King Royalist. A simple, well-chosen rig beats a complicated one every time.",
+ "video_tag": "Gear · Tone"
+ }
+ },
+ {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=M2EE6kbKFtE",
+ "video_title": "Spank It: The 1988 Riff Decoded",
+ "video_description": "A cornerstone riff broken down completely. Two fingers alternating on adjacent strings. Sounds wild — it isn't.",
+ "video_tag": "Riff Breakdown · Technique"
+ }
+ },
+ {
+ "type": "pdf",
+ "settings": {
+ "pdf_title": "The Gristle Vault Master Guide",
+ "pdf_description": "Every concept from all eight sessions in one reference document. Techniques, tones, and theory from a lifetime of playing.",
+ "pdf_url": "https://cdn.shopify.com/s/files/1/0976/0210/9761/files/gristle_vault_guide.pdf?v=1782747864"
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/header-group.json b/sections/header-group.json
index a9ac3a08a0d..2f4bd6c99fe 100644
--- a/sections/header-group.json
+++ b/sections/header-group.json
@@ -1,3 +1,12 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
{
"name": "t:sections.header.name",
"type": "header",
@@ -8,32 +17,31 @@
"announcement-bar-0": {
"type": "announcement",
"settings": {
- "text": "Welcome to our store",
- "text_alignment": "center",
- "color_scheme": "scheme-1",
+ "text": "Welcome to the Gristle — Greg Koch Official Store",
"link": ""
}
}
},
"block_order": [
"announcement-bar-0"
- ]
+ ],
+ "settings": {}
},
"header": {
"type": "header",
"settings": {
- "color_scheme": "scheme-1",
"logo_position": "middle-left",
+ "mobile_logo_position": "center",
"menu": "main-menu",
"menu_type_desktop": "dropdown",
"sticky_header_type": "on-scroll-up",
- "show_line_separator": true,
- "enable_country_selector": true,
- "enable_language_selector": true,
- "mobile_logo_position": "center",
+ "show_line_separator": false,
+ "color_scheme": "scheme-1",
+ "enable_country_selector": false,
+ "enable_language_selector": false,
"margin_bottom": 0,
- "padding_top": 20,
- "padding_bottom": 20
+ "padding_top": 16,
+ "padding_bottom": 16
}
}
},
diff --git a/sections/image-banner.liquid b/sections/image-banner.liquid
index 24fa333ff24..eae6f29bfe1 100644
--- a/sections/image-banner.liquid
+++ b/sections/image-banner.liquid
@@ -29,6 +29,98 @@
}
{%- endstyle -%}
+{%- style -%}
+/* ====================================== */
+/* GK Depth Slide + Premium Text Fly-In */
+/* Scoped to #Banner-{{ section.id }} */
+/* ====================================== */
+
+#Banner-{{ section.id }}.gk-hero-bloom {
+ position: relative;
+}
+
+#Banner-{{ section.id }}.gk-hero-bloom .banner__media {
+ overflow: hidden;
+}
+
+/* Ensure content stays above media */
+#Banner-{{ section.id }}.gk-hero-bloom .banner__content {
+ position: relative;
+ z-index: 2;
+}
+
+/* ---------- Image: Depth Slide ---------- */
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--pre .banner__media img {
+ opacity: 0;
+ transform: translateY(12px) scale(1.09);
+ filter: brightness(0.90) contrast(1.05) saturate(1.02);
+ will-change: transform, opacity, filter;
+}
+
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--in .banner__media img {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ filter: brightness(1) contrast(1) saturate(1);
+ transition:
+ opacity 700ms cubic-bezier(.16,.84,.44,1),
+ transform 900ms cubic-bezier(.16,.84,.44,1),
+ filter 900ms cubic-bezier(.16,.84,.44,1);
+}
+
+/* ---------- Content: Premium Fly-In (staggered) ---------- */
+/* Start hidden */
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--pre .banner__heading,
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--pre .banner__text,
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--pre .banner__buttons {
+ opacity: 0;
+ transform: translateY(22px);
+ will-change: transform, opacity;
+}
+
+/* Reveal heading first */
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--in .banner__heading {
+ opacity: 1;
+ transform: translateY(0);
+ transition:
+ opacity 650ms cubic-bezier(.16,.84,.44,1) 180ms,
+ transform 650ms cubic-bezier(.16,.84,.44,1) 180ms;
+}
+
+/* Then subtext */
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--in .banner__text {
+ opacity: 1;
+ transform: translateY(0);
+ transition:
+ opacity 650ms cubic-bezier(.16,.84,.44,1) 260ms,
+ transform 650ms cubic-bezier(.16,.84,.44,1) 260ms;
+}
+
+/* Then buttons */
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--pre .banner__buttons {
+ transform: translateY(16px);
+}
+#Banner-{{ section.id }}.gk-hero-bloom.gk-hero--in .banner__buttons {
+ opacity: 1;
+ transform: translateY(0);
+ transition:
+ opacity 650ms cubic-bezier(.16,.84,.44,1) 340ms,
+ transform 650ms cubic-bezier(.16,.84,.44,1) 340ms;
+}
+
+/* Accessibility */
+@media (prefers-reduced-motion: reduce) {
+ #Banner-{{ section.id }}.gk-hero-bloom .banner__media img,
+ #Banner-{{ section.id }}.gk-hero-bloom .banner__heading,
+ #Banner-{{ section.id }}.gk-hero-bloom .banner__text,
+ #Banner-{{ section.id }}.gk-hero-bloom .banner__buttons {
+ transition: none !important;
+ transform: none !important;
+ filter: none !important;
+ opacity: 1 !important;
+ }
+}
+{%- endstyle -%}
+
{%- liquid
assign full_width = '100vw'
assign widths = '375, 550, 750, 1100, 1500, 1780, 2000, 3000, 3840'
@@ -53,7 +145,8 @@
{%- if section.settings.image != blank -%}
@@ -87,6 +180,7 @@
{{ 'hero-apparel-1' | placeholder_svg_tag: 'placeholder-svg' }}
{%- endif -%}
+
{%- if section.settings.image_2 != blank -%}
{%- liquid
@@ -115,15 +209,13 @@
}}
{%- endif -%}
+
{%- for block in section.blocks -%}
{%- case block.type -%}
{%- when 'heading' -%}
-
+
{{ block.settings.heading }}
{%- when 'text' -%}
@@ -131,10 +223,7 @@
{{ block.settings.text }}
{%- when 'buttons' -%}
-
+
+
+
{% schema %}
{
"name": "t:sections.image-banner.name",
@@ -199,22 +329,10 @@
"type": "select",
"id": "image_height",
"options": [
- {
- "value": "adapt",
- "label": "t:sections.image-banner.settings.image_height.options__1.label"
- },
- {
- "value": "small",
- "label": "t:sections.image-banner.settings.image_height.options__2.label"
- },
- {
- "value": "medium",
- "label": "t:sections.image-banner.settings.image_height.options__3.label"
- },
- {
- "value": "large",
- "label": "t:sections.image-banner.settings.image_height.options__4.label"
- }
+ { "value": "adapt", "label": "t:sections.image-banner.settings.image_height.options__1.label" },
+ { "value": "small", "label": "t:sections.image-banner.settings.image_height.options__2.label" },
+ { "value": "medium", "label": "t:sections.image-banner.settings.image_height.options__3.label" },
+ { "value": "large", "label": "t:sections.image-banner.settings.image_height.options__4.label" }
],
"default": "medium",
"label": "t:sections.image-banner.settings.image_height.label"
@@ -223,26 +341,20 @@
"type": "select",
"id": "image_behavior",
"options": [
- {
- "value": "none",
- "label": "t:sections.all.animation.image_behavior.options__1.label"
- },
- {
- "value": "ambient",
- "label": "t:sections.all.animation.image_behavior.options__2.label"
- },
- {
- "value": "fixed",
- "label": "t:sections.all.animation.image_behavior.options__3.label"
- },
- {
- "value": "zoom-in",
- "label": "t:sections.all.animation.image_behavior.options__4.label"
- }
+ { "value": "none", "label": "t:sections.all.animation.image_behavior.options__1.label" },
+ { "value": "ambient", "label": "t:sections.all.animation.image_behavior.options__2.label" },
+ { "value": "fixed", "label": "t:sections.all.animation.image_behavior.options__3.label" },
+ { "value": "zoom-in", "label": "t:sections.all.animation.image_behavior.options__4.label" }
],
"default": "none",
"label": "t:sections.all.animation.image_behavior.label"
},
+ {
+ "type": "checkbox",
+ "id": "gk_hero_bloom",
+ "default": true,
+ "label": "GK: Hero Motion Intro (Depth Slide)"
+ },
{
"type": "header",
"content": "t:sections.image-banner.settings.content.content"
@@ -251,42 +363,15 @@
"type": "select",
"id": "desktop_content_position",
"options": [
- {
- "value": "top-left",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__1.label"
- },
- {
- "value": "top-center",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__2.label"
- },
- {
- "value": "top-right",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__3.label"
- },
- {
- "value": "middle-left",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__4.label"
- },
- {
- "value": "middle-center",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__5.label"
- },
- {
- "value": "middle-right",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__6.label"
- },
- {
- "value": "bottom-left",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__7.label"
- },
- {
- "value": "bottom-center",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__8.label"
- },
- {
- "value": "bottom-right",
- "label": "t:sections.image-banner.settings.desktop_content_position.options__9.label"
- }
+ { "value": "top-left", "label": "t:sections.image-banner.settings.desktop_content_position.options__1.label" },
+ { "value": "top-center", "label": "t:sections.image-banner.settings.desktop_content_position.options__2.label" },
+ { "value": "top-right", "label": "t:sections.image-banner.settings.desktop_content_position.options__3.label" },
+ { "value": "middle-left", "label": "t:sections.image-banner.settings.desktop_content_position.options__4.label" },
+ { "value": "middle-center", "label": "t:sections.image-banner.settings.desktop_content_position.options__5.label" },
+ { "value": "middle-right", "label": "t:sections.image-banner.settings.desktop_content_position.options__6.label" },
+ { "value": "bottom-left", "label": "t:sections.image-banner.settings.desktop_content_position.options__7.label" },
+ { "value": "bottom-center", "label": "t:sections.image-banner.settings.desktop_content_position.options__8.label" },
+ { "value": "bottom-right", "label": "t:sections.image-banner.settings.desktop_content_position.options__9.label" }
],
"default": "middle-center",
"label": "t:sections.image-banner.settings.desktop_content_position.label"
@@ -295,18 +380,9 @@
"type": "select",
"id": "desktop_content_alignment",
"options": [
- {
- "value": "left",
- "label": "t:sections.image-banner.settings.desktop_content_alignment.options__1.label"
- },
- {
- "value": "center",
- "label": "t:sections.image-banner.settings.desktop_content_alignment.options__2.label"
- },
- {
- "value": "right",
- "label": "t:sections.image-banner.settings.desktop_content_alignment.options__3.label"
- }
+ { "value": "left", "label": "t:sections.image-banner.settings.desktop_content_alignment.options__1.label" },
+ { "value": "center", "label": "t:sections.image-banner.settings.desktop_content_alignment.options__2.label" },
+ { "value": "right", "label": "t:sections.image-banner.settings.desktop_content_alignment.options__3.label" }
],
"default": "center",
"label": "t:sections.image-banner.settings.desktop_content_alignment.label"
@@ -332,23 +408,14 @@
"id": "stack_images_on_mobile",
"default": true,
"label": "t:sections.image-banner.settings.stack_images_on_mobile.label"
- },
+ },
{
"type": "select",
"id": "mobile_content_alignment",
"options": [
- {
- "value": "left",
- "label": "t:sections.image-banner.settings.mobile_content_alignment.options__1.label"
- },
- {
- "value": "center",
- "label": "t:sections.image-banner.settings.mobile_content_alignment.options__2.label"
- },
- {
- "value": "right",
- "label": "t:sections.image-banner.settings.mobile_content_alignment.options__3.label"
- }
+ { "value": "left", "label": "t:sections.image-banner.settings.mobile_content_alignment.options__1.label" },
+ { "value": "center", "label": "t:sections.image-banner.settings.mobile_content_alignment.options__2.label" },
+ { "value": "right", "label": "t:sections.image-banner.settings.mobile_content_alignment.options__3.label" }
],
"default": "center",
"label": "t:sections.image-banner.settings.mobile_content_alignment.label"
@@ -376,26 +443,11 @@
"type": "select",
"id": "heading_size",
"options": [
- {
- "value": "h2",
- "label": "t:sections.all.heading_size.options__1.label"
- },
- {
- "value": "h1",
- "label": "t:sections.all.heading_size.options__2.label"
- },
- {
- "value": "h0",
- "label": "t:sections.all.heading_size.options__3.label"
- },
- {
- "value": "hxl",
- "label": "t:sections.all.heading_size.options__4.label"
- },
- {
- "value": "hxxl",
- "label": "t:sections.all.heading_size.options__5.label"
- }
+ { "value": "h2", "label": "t:sections.all.heading_size.options__1.label" },
+ { "value": "h1", "label": "t:sections.all.heading_size.options__2.label" },
+ { "value": "h0", "label": "t:sections.all.heading_size.options__3.label" },
+ { "value": "hxl", "label": "t:sections.all.heading_size.options__4.label" },
+ { "value": "hxxl", "label": "t:sections.all.heading_size.options__5.label" }
],
"default": "h1",
"label": "t:sections.all.heading_size.label"
@@ -417,18 +469,9 @@
"type": "select",
"id": "text_style",
"options": [
- {
- "value": "body",
- "label": "t:sections.image-banner.blocks.text.settings.text_style.options__1.label"
- },
- {
- "value": "subtitle",
- "label": "t:sections.image-banner.blocks.text.settings.text_style.options__2.label"
- },
- {
- "value": "caption-with-letter-spacing",
- "label": "t:sections.image-banner.blocks.text.settings.text_style.options__3.label"
- }
+ { "value": "body", "label": "t:sections.image-banner.blocks.text.settings.text_style.options__1.label" },
+ { "value": "subtitle", "label": "t:sections.image-banner.blocks.text.settings.text_style.options__2.label" },
+ { "value": "caption-with-letter-spacing", "label": "t:sections.image-banner.blocks.text.settings.text_style.options__3.label" }
],
"default": "body",
"label": "t:sections.image-banner.blocks.text.settings.text_style.label"
@@ -441,8 +484,8 @@
"limit": 1,
"settings": [
{
- "type": "header",
- "content": "t:sections.image-banner.blocks.buttons.settings.header_1.content"
+ "type": "header",
+ "content": "t:sections.image-banner.blocks.buttons.settings.header_1.content"
},
{
"type": "text",
@@ -463,8 +506,8 @@
"label": "t:sections.image-banner.blocks.buttons.settings.button_style_secondary_1.label"
},
{
- "type": "header",
- "content": "t:sections.image-banner.blocks.buttons.settings.header_2.content"
+ "type": "header",
+ "content": "t:sections.image-banner.blocks.buttons.settings.header_2.content"
},
{
"type": "text",
@@ -491,17 +534,11 @@
{
"name": "t:sections.image-banner.presets.name",
"blocks": [
- {
- "type": "heading"
- },
- {
- "type": "text"
- },
- {
- "type": "buttons"
- }
+ { "type": "heading" },
+ { "type": "text" },
+ { "type": "buttons" }
]
}
]
}
-{% endschema %}
+{% endschema %}
\ No newline at end of file
diff --git a/sections/vault-bridge.liquid b/sections/vault-bridge.liquid
new file mode 100644
index 00000000000..225ba2a8f24
--- /dev/null
+++ b/sections/vault-bridge.liquid
@@ -0,0 +1,116 @@
+{%- if section.settings.show_top_divider -%}
+
+{%- endif -%}
+
+
+ {%- if section.settings.eyebrow != blank -%}
+ {{ section.settings.eyebrow | escape }}
+ {%- endif -%}
+ {%- if section.settings.heading != blank -%}
+ {{ section.settings.heading | escape }}
+ {%- endif -%}
+ {%- if section.settings.subhead != blank -%}
+ {{ section.settings.subhead | escape }}
+ {%- endif -%}
+
+
+
+ {%- if section.settings.pain_title != blank -%}
{{ section.settings.pain_title | escape }} {%- endif -%}
+
+ {%- assign pain_items = section.settings.pain_list | newline_to_br | split: ' ' -%}
+ {%- for item in pain_items -%}
+ {%- assign t = item | strip -%}
+ {%- if t != blank -%}{{ t | escape }} {%- endif -%}
+ {%- endfor -%}
+
+
+
+
→
+
+
+ {%- if section.settings.gain_title != blank -%}
{{ section.settings.gain_title | escape }} {%- endif -%}
+
+ {%- assign gain_items = section.settings.gain_list | newline_to_br | split: ' ' -%}
+ {%- for item in gain_items -%}
+ {%- assign t = item | strip -%}
+ {%- if t != blank -%}{{ t | escape }} {%- endif -%}
+ {%- endfor -%}
+
+
+
+
+ {%- if section.settings.foot != blank -%}
+
+ {%- endif -%}
+
+
+{% schema %}
+{
+ "name": "Vault Bridge",
+ "settings": [
+ {
+ "type": "checkbox",
+ "id": "show_top_divider",
+ "label": "Show divider above section",
+ "default": true
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow",
+ "default": "The problem with scattered learning"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "STOP PIECING TOGETHER RANDOM GUITAR ADVICE"
+ },
+ {
+ "type": "textarea",
+ "id": "subhead",
+ "label": "Supporting copy",
+ "default": "You can spend years bouncing between clips, tabs, and half-explained tricks. Or you can grab one clean stash of Greg's chicken pickin', outside playing, tone, chord vocabulary, blues ideas, and clinic breakdowns."
+ },
+ {
+ "type": "header",
+ "content": "Pain column"
+ },
+ {
+ "type": "text",
+ "id": "pain_title",
+ "label": "Pain column title",
+ "default": "The scattered way"
+ },
+ {
+ "type": "textarea",
+ "id": "pain_list",
+ "label": "Pain points (one per line)",
+ "default": "Random licks from fifty different videos\nTabs that never quite line up\nHalf-explained tricks with no context\nNothing that connects into real playing"
+ },
+ {
+ "type": "header",
+ "content": "Gain column"
+ },
+ {
+ "type": "text",
+ "id": "gain_title",
+ "label": "Gain column title",
+ "default": "The Vault way"
+ },
+ {
+ "type": "textarea",
+ "id": "gain_list",
+ "label": "Gains (one per line)",
+ "default": "Eight full lessons in one place\nClinics, breakdowns, and technique\nThe exact picking, voicings, and settings\nA 12-page PDF that ties it together"
+ },
+ {
+ "type": "text",
+ "id": "foot",
+ "label": "Transition line",
+ "default": "Here’s what’s inside the free stash."
+ }
+ ],
+ "presets": [{ "name": "Vault Bridge" }]
+}
+{% endschema %}
diff --git a/sections/vault-cta.liquid b/sections/vault-cta.liquid
new file mode 100644
index 00000000000..bb41ce51eff
--- /dev/null
+++ b/sections/vault-cta.liquid
@@ -0,0 +1,67 @@
+{%- if section.settings.show_top_divider -%}
+
+{%- endif -%}
+
+
+
+ {%- if section.settings.heading != blank -%}
+
{{ section.settings.heading | escape }}
+ {%- endif -%}
+ {%- if section.settings.subhead != blank -%}
+
{{ section.settings.subhead | escape }}
+ {%- endif -%}
+ {%- if section.settings.button_link != blank -%}
+
{{ section.settings.button_label | escape }}
+ {%- else -%}
+
{{ section.settings.button_label | escape }}
+ {%- endif -%}
+ {%- if section.settings.consent != blank -%}
+
{{ section.settings.consent | escape }}
+ {%- endif -%}
+
+
+
+{% schema %}
+{
+ "name": "Vault CTA",
+ "settings": [
+ {
+ "type": "checkbox",
+ "id": "show_top_divider",
+ "label": "Show divider above section",
+ "default": false
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "4+ Hours. 8 Videos. 1 Master PDF. All Free."
+ },
+ {
+ "type": "text",
+ "id": "subhead",
+ "label": "Subhead",
+ "default": "Enter your email and Greg sends it straight to your inbox."
+ },
+ {
+ "type": "text",
+ "id": "button_label",
+ "label": "Button label",
+ "default": "YES, SEND ME THE VAULT →"
+ },
+ {
+ "type": "url",
+ "id": "button_link",
+ "label": "Button link (optional)",
+ "info": "Leave blank to scroll the visitor to the opt-in form and focus the first name field."
+ },
+ {
+ "type": "text",
+ "id": "consent",
+ "label": "Consent line",
+ "default": "Free. No credit card. No nonsense."
+ }
+ ],
+ "presets": [{ "name": "Vault CTA" }]
+}
+{% endschema %}
diff --git a/sections/vault-faq.liquid b/sections/vault-faq.liquid
new file mode 100644
index 00000000000..41d64a59a6e
--- /dev/null
+++ b/sections/vault-faq.liquid
@@ -0,0 +1,121 @@
+{%- if section.settings.show_top_divider -%}
+
+{%- endif -%}
+
+
+ {%- if section.settings.eyebrow != blank -%}
+ {{ section.settings.eyebrow | escape }}
+ {%- endif -%}
+ {%- if section.settings.heading != blank -%}
+ {{ section.settings.heading | escape }}
+ {%- endif -%}
+
+
+ {%- for block in section.blocks -%}
+
+
+
+ {{ block.settings.question | escape }}
+
+ {%- if block.settings.answer != blank -%}
+
{{ block.settings.answer | escape }}
+ {%- endif -%}
+
+ {%- endfor -%}
+
+
+
+{% schema %}
+{
+ "name": "Vault FAQ",
+ "settings": [
+ {
+ "type": "checkbox",
+ "id": "show_top_divider",
+ "label": "Show divider above section",
+ "default": true
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow",
+ "default": "Common questions"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "WAIT. IS THERE A CATCH?"
+ }
+ ],
+ "blocks": [
+ {
+ "type": "qa",
+ "name": "Question",
+ "settings": [
+ {
+ "type": "select",
+ "id": "icon",
+ "label": "Icon",
+ "default": "ti-circle-check",
+ "options": [
+ { "value": "ti-circle-check", "label": "Check" },
+ { "value": "ti-help-circle", "label": "Question" },
+ { "value": "ti-info-circle", "label": "Info" },
+ { "value": "ti-lock-open", "label": "Lock open" },
+ { "value": "ti-gift", "label": "Gift" }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "question",
+ "label": "Question",
+ "default": "Is this actually free?"
+ },
+ {
+ "type": "textarea",
+ "id": "answer",
+ "label": "Answer",
+ "default": "Yes. All eight videos and the PDF are free."
+ }
+ ]
+ }
+ ],
+ "max_blocks": 12,
+ "presets": [
+ {
+ "name": "Vault FAQ",
+ "blocks": [
+ {
+ "type": "qa",
+ "settings": {
+ "question": "Is this actually free?",
+ "answer": "Yes. All eight videos and the PDF are free. You will be added to Greg’s email list where he sends new content, show dates, and gear news. You can leave anytime."
+ }
+ },
+ {
+ "type": "qa",
+ "settings": {
+ "question": "Who is this for?",
+ "answer": "Guitar players who want to go deeper than pentatonic noodling. Whether you are into chicken picking, jazz harmony, or just want to understand how Greg gets that tone, there is something in here for you."
+ }
+ },
+ {
+ "type": "qa",
+ "settings": {
+ "question": "What happens after I sign up?",
+ "answer": "You will get an email with access to all 8 videos and a download link for the PDF. After that you will receive occasional emails from Greg with new content, show dates, and gear news. Unsubscribe anytime."
+ }
+ },
+ {
+ "type": "qa",
+ "settings": {
+ "question": "Is this the same as the Patreon?",
+ "answer": "Different thing entirely. The Patreon has lessons, backing tracks and more as an ongoing paid membership. The Vault is a standalone free resource. No overlap and nothing to buy on the other side."
+ }
+ }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/vault-final-cta.liquid b/sections/vault-final-cta.liquid
new file mode 100644
index 00000000000..410fa00db00
--- /dev/null
+++ b/sections/vault-final-cta.liquid
@@ -0,0 +1,47 @@
+{%- if section.settings.show_top_divider -%}
+
+{%- endif -%}
+
+
+ {%- if section.settings.button_link != blank -%}
+ {{ section.settings.button_label | escape }}
+ {%- else -%}
+ {{ section.settings.button_label | escape }}
+ {%- endif -%}
+ {%- if section.settings.consent != blank -%}
+ {{ section.settings.consent | escape }}
+ {%- endif -%}
+
+
+{% schema %}
+{
+ "name": "Vault Final CTA",
+ "settings": [
+ {
+ "type": "checkbox",
+ "id": "show_top_divider",
+ "label": "Show divider above section",
+ "default": false
+ },
+ {
+ "type": "text",
+ "id": "button_label",
+ "label": "Button label",
+ "default": "GET INSTANT ACCESS →"
+ },
+ {
+ "type": "url",
+ "id": "button_link",
+ "label": "Button link (optional)",
+ "info": "Leave blank to scroll the visitor to the opt-in form and focus the first name field."
+ },
+ {
+ "type": "text",
+ "id": "consent",
+ "label": "Consent line",
+ "default": "Free. No credit card. Unsubscribe anytime."
+ }
+ ],
+ "presets": [{ "name": "Vault Final CTA" }]
+}
+{% endschema %}
diff --git a/sections/vault-form.liquid b/sections/vault-form.liquid
new file mode 100644
index 00000000000..010ddbeed50
--- /dev/null
+++ b/sections/vault-form.liquid
@@ -0,0 +1,310 @@
+{%- liquid
+ assign kl_company = section.settings.klaviyo_company_id | default: 'XBDmgJ'
+ assign kl_list = section.settings.klaviyo_list_id | default: 'Wbqf9S'
+-%}
+
+
+
+
+
+ {%- comment -%} Photo card {%- endcomment -%}
+
+
+ {%- if section.settings.hero_image != blank -%}
+
+ {%- else -%}
+
+
+ {{ section.settings.photo_placeholder | escape }}
+
+ {%- endif -%}
+
+ {%- if section.blocks.size > 0 -%}
+
+ {%- for block in section.blocks -%}
+ {%- if block.type == 'stat' -%}
+
+ {{ block.settings.num | escape }}
+ {{ block.settings.label | escape }}
+
+ {%- endif -%}
+ {%- endfor -%}
+
+ {%- endif -%}
+
+
+ {%- comment -%} Form card (scroll anchor for every CTA button) {%- endcomment -%}
+
+
+
+
+
+
+{% schema %}
+{
+ "name": "Vault Opt-In Form",
+ "settings": [
+ {
+ "type": "header",
+ "content": "Photo"
+ },
+ {
+ "type": "image_picker",
+ "id": "hero_image",
+ "label": "Performance photo",
+ "info": "Leave blank to show a placeholder well."
+ },
+ {
+ "type": "text",
+ "id": "photo_placeholder",
+ "label": "Placeholder text",
+ "default": "Add performance photo in theme editor"
+ },
+ {
+ "type": "header",
+ "content": "Form"
+ },
+ {
+ "type": "text",
+ "id": "form_eyebrow",
+ "label": "Form eyebrow",
+ "default": "Free Instant Access"
+ },
+ {
+ "type": "text",
+ "id": "form_heading",
+ "label": "Form heading",
+ "default": "Get the Vault"
+ },
+ {
+ "type": "text",
+ "id": "form_note",
+ "label": "Form note",
+ "default": "Delivered to your inbox."
+ },
+ {
+ "type": "text",
+ "id": "first_name_placeholder",
+ "label": "First name placeholder",
+ "default": "First name"
+ },
+ {
+ "type": "text",
+ "id": "last_name_placeholder",
+ "label": "Last name placeholder",
+ "default": "Last name"
+ },
+ {
+ "type": "text",
+ "id": "email_placeholder",
+ "label": "Email placeholder",
+ "default": "Email address"
+ },
+ {
+ "type": "text",
+ "id": "submit_label",
+ "label": "Submit button label",
+ "default": "YES, SEND ME THE VAULT →"
+ },
+ {
+ "type": "text",
+ "id": "sending_label",
+ "label": "Submitting button label",
+ "default": "Sending…"
+ },
+ {
+ "type": "textarea",
+ "id": "consent",
+ "label": "Consent line",
+ "default": "By submitting you agree to receive emails from Greg Koch. Unsubscribe anytime."
+ },
+ {
+ "type": "text",
+ "id": "error_text",
+ "label": "Error message",
+ "default": "Something went wrong. Please check your email and try again."
+ },
+ {
+ "type": "text",
+ "id": "success_message",
+ "label": "Success message",
+ "default": "You are in. Check your inbox."
+ },
+ {
+ "type": "header",
+ "content": "Klaviyo"
+ },
+ {
+ "type": "text",
+ "id": "klaviyo_company_id",
+ "label": "Klaviyo public API key",
+ "default": "XBDmgJ",
+ "info": "Company ID / public key used to load Klaviyo and subscribe profiles."
+ },
+ {
+ "type": "text",
+ "id": "klaviyo_list_id",
+ "label": "Klaviyo list ID",
+ "default": "Wbqf9S",
+ "info": "The list new subscribers are added to."
+ }
+ ],
+ "blocks": [
+ {
+ "type": "stat",
+ "name": "Stat",
+ "settings": [
+ { "type": "text", "id": "num", "label": "Number", "default": "8" },
+ { "type": "text", "id": "label", "label": "Label", "default": "Videos" }
+ ]
+ }
+ ],
+ "max_blocks": 4,
+ "presets": [
+ {
+ "name": "Vault Opt-In Form",
+ "blocks": [
+ { "type": "stat", "settings": { "num": "8", "label": "Videos" } },
+ { "type": "stat", "settings": { "num": "4+", "label": "Hours" } },
+ { "type": "stat", "settings": { "num": "1", "label": "PDF" } },
+ { "type": "stat", "settings": { "num": "$0", "label": "Cost" } }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/vault-hero.liquid b/sections/vault-hero.liquid
new file mode 100644
index 00000000000..18706456e74
--- /dev/null
+++ b/sections/vault-hero.liquid
@@ -0,0 +1,133 @@
+
+
+{% schema %}
+{
+ "name": "Vault Hero",
+ "settings": [
+ {
+ "type": "text",
+ "id": "kicker",
+ "label": "Kicker",
+ "default": "The Gristle Vault · Free Access"
+ },
+ {
+ "type": "text",
+ "id": "heading_line1",
+ "label": "Headline line 1",
+ "default": "ACCESS THE"
+ },
+ {
+ "type": "text",
+ "id": "heading_line2",
+ "label": "Headline line 2 (accent color)",
+ "default": "GRISTLE VAULT"
+ },
+ {
+ "type": "text",
+ "id": "value_line",
+ "label": "Value line",
+ "info": "Shown in display type below the headline. HTML allowed for accent spans.",
+ "default": "8 Videos · 4+ Hours · 1 Master PDF · All Free"
+ },
+ {
+ "type": "text",
+ "id": "lead",
+ "label": "Lead line",
+ "default": "Stop digging through random clips. Get the actual stash."
+ },
+ {
+ "type": "textarea",
+ "id": "pain",
+ "label": "Pain copy",
+ "default": "Most players collect random licks, scattered YouTube clips, and half-finished lessons. The Vault gives you a clear stash of Greg's real lessons, clinics, and breakdowns in one place."
+ },
+ {
+ "type": "text",
+ "id": "button_label",
+ "label": "Button label",
+ "default": "UNLOCK THE FREE STASH →"
+ },
+ {
+ "type": "url",
+ "id": "button_link",
+ "label": "Button link (optional)",
+ "info": "Leave blank to scroll the visitor to the opt-in form and focus the first name field."
+ },
+ {
+ "type": "text",
+ "id": "microcopy",
+ "label": "Microcopy under button",
+ "default": "Free. No credit card. Instant access."
+ }
+ ],
+ "presets": [{ "name": "Vault Hero" }]
+}
+{% endschema %}
diff --git a/sections/vault-letter.liquid b/sections/vault-letter.liquid
new file mode 100644
index 00000000000..e9fff24cd11
--- /dev/null
+++ b/sections/vault-letter.liquid
@@ -0,0 +1,132 @@
+{%- if section.settings.show_top_divider -%}
+
+{%- endif -%}
+
+
+
+ {%- if section.settings.eyebrow != blank -%}
+
{{ section.settings.eyebrow | escape }}
+ {%- endif -%}
+ {%- if section.settings.heading != blank -%}
+
{{ section.settings.heading | escape }}
+ {%- endif -%}
+
+
+
+
+ {%- if section.settings.letter_image != blank -%}
+
+ {%- else -%}
+
+ {%- endif -%}
+
+ {%- if section.settings.caption != blank -%}
+
+ {{- section.settings.caption | escape -}}
+ {%- if section.settings.caption_role != blank -%}{{ section.settings.caption_role | escape }} {%- endif -%}
+
+ {%- endif -%}
+
+
+
+ {%- if section.settings.lead != blank -%}
+
{{ section.settings.lead | escape }}
+ {%- endif -%}
+ {{ section.settings.body }}
+
+
+
+ {%- if section.settings.pullquote_line1 != blank or section.settings.pullquote_line2 != blank -%}
+
+ {%- if section.settings.pullquote_line1 != blank -%}
+ {{ section.settings.pullquote_line1 | escape }}
+ {%- endif -%}
+ {%- if section.settings.pullquote_line2 != blank -%}
+ {{ section.settings.pullquote_line2 | escape }}
+ {%- endif -%}
+
+ {%- endif -%}
+
+
+
+{% schema %}
+{
+ "name": "Vault Letter",
+ "settings": [
+ {
+ "type": "checkbox",
+ "id": "show_top_divider",
+ "label": "Show divider above section",
+ "default": true
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow",
+ "default": "A note from Greg"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "WAIT. IS THIS ACTUALLY FREE?"
+ },
+ {
+ "type": "image_picker",
+ "id": "letter_image",
+ "label": "Letter photo",
+ "info": "Leave blank to show a placeholder well."
+ },
+ {
+ "type": "text",
+ "id": "caption",
+ "label": "Photo caption",
+ "default": "Greg Koch"
+ },
+ {
+ "type": "text",
+ "id": "caption_role",
+ "label": "Photo caption subtitle",
+ "default": "The Gristle Vault"
+ },
+ {
+ "type": "text",
+ "id": "lead",
+ "label": "Lead line (large)",
+ "default": "Yeah. It’s actually free."
+ },
+ {
+ "type": "richtext",
+ "id": "body",
+ "label": "Letter body",
+ "info": "Use bold for light emphasis and italic for orange emphasis.",
+ "default": "
Look, I have spent decades on stage and in clinics sharing this stuff with players who actually want to go deeper. The techniques in the Vault are the ones people ask about every single night after the show.
The chicken picking. The chord substitutions. The rig. How to play outside without sounding like you just fell down the stairs.
Most guitar content online is someone talking about playing. The Vault is eight sessions of me actually showing you the mechanics. The exact picking motions. The specific voicings. The actual pedal settings.
I recorded it. I compiled a 12-page reference PDF so you can keep it open while you watch. And I made the whole thing free because that is how I have always operated.
Give your people the real thing. They will stick around.
Greg Koch
"
+ },
+ {
+ "type": "header",
+ "content": "Pull quote"
+ },
+ {
+ "type": "text",
+ "id": "pullquote_line1",
+ "label": "Pull quote line 1",
+ "default": "This is not a teaser."
+ },
+ {
+ "type": "text",
+ "id": "pullquote_line2",
+ "label": "Pull quote line 2 (accent color)",
+ "default": "It is the full stash."
+ }
+ ],
+ "presets": [{ "name": "Vault Letter" }]
+}
+{% endschema %}
diff --git a/sections/vault-ps.liquid b/sections/vault-ps.liquid
new file mode 100644
index 00000000000..ff8030b660f
--- /dev/null
+++ b/sections/vault-ps.liquid
@@ -0,0 +1,30 @@
+
+
+ {%- if section.settings.label != blank -%}
+
{{ section.settings.label | escape }}
+ {%- endif -%}
+
{{ section.settings.body }}
+
+
+
+{% schema %}
+{
+ "name": "Vault P.S.",
+ "settings": [
+ {
+ "type": "text",
+ "id": "label",
+ "label": "Label",
+ "default": "P.S."
+ },
+ {
+ "type": "richtext",
+ "id": "body",
+ "label": "Body",
+ "info": "Use bold for the highlighted phrase.",
+ "default": "
If you scrolled straight to the bottom, here is the short version. Greg built a vault of 8 full-length guitar videos covering chicken picking, Travis picking, chord vocabulary, outside playing, his full live rig, blues soloing concepts, and note-for-note breakdowns of two originals. Plus a 12-page PDF that ties it all together. All of it is free. Put in your email above and he will send it to you.
"
+ }
+ ],
+ "presets": [{ "name": "Vault P.S." }]
+}
+{% endschema %}
diff --git a/sections/vault-stash.liquid b/sections/vault-stash.liquid
new file mode 100644
index 00000000000..63926f0bdaa
--- /dev/null
+++ b/sections/vault-stash.liquid
@@ -0,0 +1,201 @@
+{%- if section.settings.show_top_divider -%}
+
+{%- endif -%}
+
+
+ {%- if section.settings.eyebrow != blank -%}
+ {{ section.settings.eyebrow | escape }}
+ {%- endif -%}
+ {%- if section.settings.heading != blank -%}
+ {{ section.settings.heading | escape }}
+ {%- endif -%}
+ {%- if section.settings.subhead != blank -%}
+ {{ section.settings.subhead | escape }}
+ {%- endif -%}
+
+ {%- comment -%}
+ Each lesson gets a distinct scene + waveform. If a card has no emblem set
+ (for example after a theme-editor reset), fall back to a unique emblem by
+ position so the cards never collapse into eight identical wells.
+ {%- endcomment -%}
+ {%- assign emblem_fallbacks = "pick,travis,chords,outside,tone,blues,song,clinic" | split: "," -%}
+ {%- assign card_index = 0 -%}
+
+ {%- for block in section.blocks -%}
+ {%- if block.type == 'card' -%}
+ {%- assign emblem = block.settings.emblem -%}
+ {%- if emblem == blank -%}
+ {%- assign emblem = emblem_fallbacks[card_index] | default: 'pick' -%}
+ {%- endif -%}
+ {%- assign card_index = card_index | plus: 1 -%}
+
+
+ {%- if block.settings.free_label != blank -%}
+ {{ block.settings.free_label | escape }}
+ {%- endif -%}
+
+
+
+ {% render 'vault-scene', key: emblem %}
+
+
+
+
+ {%- if block.settings.title != blank -%}
+
{{ block.settings.title | escape }}
+ {%- endif -%}
+ {%- if block.settings.description != blank -%}
+
{{ block.settings.description | escape }}
+ {%- endif -%}
+
+
+ {%- endif -%}
+ {%- endfor -%}
+
+
+ {%- if section.settings.show_pdf -%}
+
+
{% render 'vault-emblem', key: 'pdf' %}
+
+ {%- if section.settings.pdf_kicker != blank -%}
+
{{ section.settings.pdf_kicker | escape }}
+ {%- endif -%}
+ {%- if section.settings.pdf_title != blank -%}
+
{{ section.settings.pdf_title | escape }}
+ {%- endif -%}
+ {%- if section.settings.pdf_desc != blank -%}
+
{{ section.settings.pdf_desc | escape }}
+ {%- endif -%}
+
+
+ {%- endif -%}
+
+
+{% schema %}
+{
+ "name": "Vault Stash",
+ "settings": [
+ {
+ "type": "checkbox",
+ "id": "show_top_divider",
+ "label": "Show divider above section",
+ "default": true
+ },
+ {
+ "type": "text",
+ "id": "eyebrow",
+ "label": "Eyebrow",
+ "default": "What is inside the vault"
+ },
+ {
+ "type": "text",
+ "id": "heading",
+ "label": "Heading",
+ "default": "THE FULL STASH."
+ },
+ {
+ "type": "textarea",
+ "id": "subhead",
+ "label": "Subhead",
+ "default": "Eight complete sessions. Every one a real lesson. Not a teaser. Not a highlight reel."
+ },
+ {
+ "type": "header",
+ "content": "PDF callout"
+ },
+ {
+ "type": "checkbox",
+ "id": "show_pdf",
+ "label": "Show PDF callout",
+ "default": true
+ },
+ {
+ "type": "text",
+ "id": "pdf_kicker",
+ "label": "PDF kicker",
+ "default": "Vault file · PDF included"
+ },
+ {
+ "type": "text",
+ "id": "pdf_title",
+ "label": "PDF title",
+ "default": "The Gristle Vault Master Reference"
+ },
+ {
+ "type": "textarea",
+ "id": "pdf_desc",
+ "label": "PDF description",
+ "default": "A 12-page document covering every technique, chord voicing, gear spec, and principle from all 8 videos. Built to keep open while you watch."
+ }
+ ],
+ "blocks": [
+ {
+ "type": "card",
+ "name": "Vault card",
+ "settings": [
+ {
+ "type": "select",
+ "id": "width",
+ "label": "Width",
+ "default": "third",
+ "options": [
+ { "value": "third", "label": "Third (1/3)" },
+ { "value": "half", "label": "Half (1/2)" },
+ { "value": "full", "label": "Full width" }
+ ]
+ },
+ {
+ "type": "select",
+ "id": "emblem",
+ "label": "Lesson emblem",
+ "default": "pick",
+ "options": [
+ { "value": "pick", "label": "Guitar pick medallion" },
+ { "value": "travis", "label": "Fingerpicking marks" },
+ { "value": "chords", "label": "Fretboard chord dots" },
+ { "value": "outside", "label": "Note breaking outside" },
+ { "value": "tone", "label": "Amp knob" },
+ { "value": "blues", "label": "String bend" },
+ { "value": "song", "label": "Film strip waveform" },
+ { "value": "clinic", "label": "Ribbon microphone" }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "free_label",
+ "label": "Header label",
+ "default": "FREE · 01"
+ },
+ {
+ "type": "text",
+ "id": "title",
+ "label": "Title",
+ "default": "Card title"
+ },
+ {
+ "type": "textarea",
+ "id": "description",
+ "label": "Description",
+ "default": "Card description."
+ }
+ ]
+ }
+ ],
+ "max_blocks": 16,
+ "presets": [
+ {
+ "name": "Vault Stash",
+ "blocks": [
+ { "type": "card", "settings": { "width": "third", "icon": "ti-guitar-pick", "free_label": "FREE · 01", "title": "Chicken Picking Masterclass", "description": "Thumb and finger foundation to full hybrid integration. The muted note, the pop, the banjo rolls, the Magic Sam lick. Everything." } },
+ { "type": "card", "settings": { "width": "third", "icon": "ti-music", "free_label": "FREE · 02", "title": "Travis Picking Deep Dive", "description": "Learned with a flat pick. How to build the boom-chuck foundation without speeding up before you are ready." } },
+ { "type": "card", "settings": { "width": "third", "icon": "ti-piano", "free_label": "FREE · 03", "title": "Chord Vocabulary", "description": "James Burton ninth chord bend, Robben Ford chord melody, Allan Holdsworth minor 11th, the Steely Dan sus chord." } },
+ { "type": "card", "settings": { "width": "third", "icon": "ti-wave-sine", "free_label": "FREE · 04", "title": "Outside Playing", "description": "Pentatonic substitutions, chromatic approaches, diminished arpeggios, the tritone sub, and the Mahavishnu scale. Sound outside without sounding lost." } },
+ { "type": "card", "settings": { "width": "third", "icon": "ti-adjustments", "free_label": "FREE · 05", "title": "Tone and Gear Rundown", "description": "The full live rig. Reverend guitars, Fishman Fluence pickups, Tone King Royalist, every pedal on the board with context for why each one gets used." } },
+ { "type": "card", "settings": { "width": "third", "icon": "ti-microphone", "free_label": "FREE · 06", "title": "Blues Soloing Concepts", "description": "Playing over changes instead of camping on pentatonic. Jeff Beck whammy techniques, self-accompanied blues, the Allman Brothers approach to major and minor." } },
+ { "type": "card", "settings": { "width": "half", "icon": "ti-file-music", "free_label": "FREE · 07", "title": "Song Breakdowns", "description": "Note-for-note construction of Tonus Diabolicus and Spank It. Where every idea came from, how it was mutated, and exactly how to play it." } },
+ { "type": "card", "settings": { "width": "half", "icon": "ti-video", "free_label": "FREE · 08", "title": "Live Clinics and Q&A", "description": "Full workshop recordings. A gear walkthrough, a backstage interview, and a live Q&A with working musicians." } }
+ ]
+ }
+ ]
+}
+{% endschema %}
diff --git a/sections/video.liquid b/sections/video.liquid
index 0f2725ed29a..14a3c0215bc 100644
--- a/sections/video.liquid
+++ b/sections/video.liquid
@@ -56,6 +56,8 @@
data-media-id="{{ video_id }}"
{% if poster != null %}
style="--ratio-percent: {{ 1 | divided_by: poster.aspect_ratio | times: 100 }}%;"
+ {% elsif section.settings.video == null and section.settings.video_url.type == 'youtube' %}
+ style="--ratio-percent: 56.25%;"
{% endif %}
>
{%- else -%}
{{ 'hero-apparel-3' | placeholder_svg_tag: 'placeholder-svg placeholder' }}
{%- endif -%}
diff --git a/snippets/gk-bandsintown-embed.liquid b/snippets/gk-bandsintown-embed.liquid
new file mode 100644
index 00000000000..ea3a704e935
--- /dev/null
+++ b/snippets/gk-bandsintown-embed.liquid
@@ -0,0 +1,31 @@
+{%- comment -%}
+ snippets/gk-bandsintown-embed.liquid
+ Renders the Bandsintown widget initializer element and loader script.
+ All CSS and JS are handled by the calling section file.
+
+ Required variables:
+ bit_artist {string} Artist name exactly as listed on Bandsintown
+{%- endcomment -%}
+
+
+
+
diff --git a/snippets/gk-tour-dates-shared.liquid b/snippets/gk-tour-dates-shared.liquid
new file mode 100644
index 00000000000..2fe6cecb4eb
--- /dev/null
+++ b/snippets/gk-tour-dates-shared.liquid
@@ -0,0 +1,205 @@
+{% comment %}
+ GK Shared Tour Dates — single source of truth
+ Snippets cannot contain {% schema %}.
+
+ Calling conventions supported:
+
+ render 'gk-tour-dates-shared', mode: 'render_home'
+ → outputs .gk-date-row markup (home section CSS)
+ → all rows output; JS hides beyond initial_visible via style.display
+
+ render 'gk-tour-dates-shared', mode: 'render_page', visible_count:
+ → outputs .gk-date markup
+ → rows beyond visible_count get class "is-hidden" (CSS hides, JS manages)
+
+ render 'gk-tour-dates-shared', mode: 'render', row_prefix: 'gk-date', visible_count: , use_hidden_class: true
+ → legacy explicit mode (same output as render_page when row_prefix='gk-date')
+
+ render 'gk-tour-dates-shared', mode: 'count'
+ → outputs only the integer count of upcoming dates
+
+ Data source (priority order):
+ 1. Theme Settings → settings.gk_tour_dates_data (textarea, one date per line)
+ Format per line:
+ YYYY-MM-DD | Descriptor (optional) | Venue | City | State | Ticket URL (optional) | sold_out (optional)
+ Example:
+ 2026-04-22 | support for Paul Gilbert | Barnato | Omaha | NE | https://tickets.com | false
+ 2. Fallback: _gk_dates_raw capture block below (used when settings textarea is blank)
+ Format: Date || Venue || City, State || Ticket URL || sold_out
+
+ Safe date filter:
+ show_ts == 0 → Liquid can't parse the date string → keep it visible
+ show_ts > 0 → hide the row if show is before today midnight UTC
+{% endcomment %}
+
+{%- liquid
+ assign today_ymd = 'now' | date: '%Y-%m-%d'
+ assign today_midnight_ts = today_ymd | date: '%s' | plus: 0
+
+ assign mode = mode | default: 'count'
+ assign visible_count = visible_count | default: 10
+
+ if mode == 'render_home'
+ assign row_prefix = 'gk-date-row'
+ assign apply_hidden = false
+ elsif mode == 'render_page'
+ assign row_prefix = 'gk-date'
+ assign apply_hidden = true
+ elsif mode == 'render'
+ assign row_prefix = row_prefix | default: 'gk-date'
+ assign apply_hidden = use_hidden_class | default: false
+ else
+ assign row_prefix = 'gk-date'
+ assign apply_hidden = false
+ endif
+-%}
+
+{%- comment -%}
+ ── DATA SOURCE ───────────────────────────────────────────────────
+ Priority 1 — Theme Settings textarea (settings.gk_tour_dates_data)
+ Format per line: YYYY-MM-DD | Descriptor | Venue | City | State | Ticket URL | sold_out
+ (Descriptor and fields after State are optional; trailing pipes may be omitted)
+ Priority 2 — Hardcoded fallback capture block below
+ Format per line: Date || Venue || City, State || Ticket URL || sold_out
+{%- endcomment -%}
+{%- capture _gk_dates_raw -%}
+June 26, 2026 || Summerfest, T-Mobile Stage || Milwaukee, WI || https://www.bandsintown.com/a/28503-greg-koch || false
+June 28, 2026 || The Dakota || Minneapolis, MN || https://www.bandsintown.com/a/28503-greg-koch || false
+October 1, 2026 || Live in concert || Bruhl, Germany || https://www.bandsintown.com/a/28503-greg-koch || false
+October 6, 2026 || The Penny Theatre || Canterbury, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+October 7, 2026 || Live in concert || London, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+October 8, 2026 || Live in concert || Witney, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+October 9, 2026 || Live in concert || Birmingham, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+October 10, 2026 || Live in concert || Sheffield, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+October 11, 2026 || Live in concert || Newcastle upon Tyne, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+October 12, 2026 || Live in concert || Glasgow, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+October 13, 2026 || Live in concert || Edinburgh, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+October 14, 2026 || Live in concert || Dublin, Ireland || https://www.bandsintown.com/a/28503-greg-koch || false
+October 15, 2026 || Live in concert || Belfast, UK || https://www.bandsintown.com/a/28503-greg-koch || false
+{%- endcapture -%}
+
+{%- comment -%}
+ Select active data source and whether to use the new pipe format.
+{%- endcomment -%}
+{%- if settings.gk_tour_dates_data != blank -%}
+ {%- assign _active_data = settings.gk_tour_dates_data -%}
+ {%- assign _settings_fmt = true -%}
+{%- else -%}
+ {%- assign _active_data = _gk_dates_raw -%}
+ {%- assign _settings_fmt = false -%}
+{%- endif -%}
+
+{%- assign _date_lines = _active_data | newline_to_br | split: ' ' -%}
+{%- assign render_index = 0 -%}
+{%- assign upcoming_count = 0 -%}
+
+{%- for _line in _date_lines -%}
+ {%- assign _trimmed = _line | strip -%}
+ {%- if _trimmed != blank -%}
+
+ {%- if _settings_fmt -%}
+ {%- comment -%}── Settings format: YYYY-MM-DD | Descriptor | Venue | City | State | URL | sold_out ──{%- endcomment -%}
+ {%- assign _p = _trimmed | split: ' | ' -%}
+ {%- assign raw_date = _p[0] | default: '' | strip -%}
+ {%- assign descriptor = _p[1] | default: '' | strip -%}
+ {%- assign venue = _p[2] | default: '' | strip -%}
+ {%- assign _city = _p[3] | default: '' | strip -%}
+ {%- assign _state = _p[4] | default: '' | strip -%}
+ {%- if _city != blank and _state != blank -%}
+ {%- assign city = _city | append: ', ' | append: _state -%}
+ {%- elsif _city != blank -%}
+ {%- assign city = _city -%}
+ {%- else -%}
+ {%- assign city = _state -%}
+ {%- endif -%}
+ {%- assign url = _p[5] | default: '' | strip -%}
+ {%- assign sold = _p[6] | default: 'false' | strip -%}
+ {%- assign display_date = raw_date | date: '%B %-d, %Y' -%}
+ {%- if display_date == blank -%}{%- assign display_date = raw_date -%}{%- endif -%}
+ {%- else -%}
+ {%- comment -%}── Fallback format: Date || Venue || City, State || URL || sold_out ──{%- endcomment -%}
+ {%- assign _p = _trimmed | split: ' || ' -%}
+ {%- assign raw_date = _p[0] | default: '' | strip -%}
+ {%- assign venue = _p[1] | default: '' | strip -%}
+ {%- assign city = _p[2] | default: '' | strip -%}
+ {%- assign url = _p[3] | default: '' | strip -%}
+ {%- assign sold = _p[4] | default: 'false' | strip -%}
+ {%- assign descriptor = '' -%}
+ {%- assign display_date = raw_date -%}
+ {%- endif -%}
+
+ {%- liquid
+ assign show_ts = raw_date | date: '%s' | plus: 0
+ assign is_upcoming = false
+ if raw_date != blank
+ if show_ts == 0
+ assign is_upcoming = true
+ elsif show_ts >= today_midnight_ts
+ assign is_upcoming = true
+ endif
+ endif
+ -%}
+
+ {%- if is_upcoming -%}
+ {%- assign upcoming_count = upcoming_count | plus: 1 -%}
+
+ {%- if mode == 'render_home' or mode == 'render_page' or mode == 'render' -%}
+
+ {%- assign extra_class = '' -%}
+ {%- if apply_hidden and render_index >= visible_count -%}
+ {%- assign extra_class = ' is-hidden' -%}
+ {%- endif -%}
+
+
+
+ {%- assign render_index = render_index | plus: 1 -%}
+ {%- endif -%}
+ {%- endif -%}
+
+ {%- endif -%}
+{%- endfor -%}
+
+{%- if mode == 'count' -%}
+ {{ upcoming_count }}
+{%- endif -%}
diff --git a/snippets/vault-emblem.liquid b/snippets/vault-emblem.liquid
new file mode 100644
index 00000000000..e5a154a42df
--- /dev/null
+++ b/snippets/vault-emblem.liquid
@@ -0,0 +1,92 @@
+{%- comment -%}
+ Premium per-lesson emblems for the Gristle Vault opt-in page.
+ Each is a unique inline SVG mark (not an icon-library glyph).
+ Usage: {% render 'vault-emblem', key: 'pick' %}
+ Keys: pick travis chords outside tone blues song clinic pdf
+{%- endcomment -%}
+{%- assign k = key | default: 'pick' -%}
+
+{%- case k -%}
+{%- when 'pick' -%}
+
+
+
+
+
+
+{%- when 'travis' -%}
+
+
+
+
+
+
+
+
+
+{%- when 'chords' -%}
+
+
+
+
+
+
+
+
+
+
+{%- when 'outside' -%}
+
+
+
+
+
+
+
+
+
+
+{%- when 'tone' -%}
+
+
+
+
+
+
+
+
+
+{%- when 'blues' -%}
+
+
+
+
+
+{%- when 'song' -%}
+
+
+
+
+
+
+
+
+{%- when 'clinic' -%}
+
+
+
+
+
+
+
+
+{%- when 'pdf' -%}
+
+
+
+
+
+
+
+{%- endcase -%}
+
diff --git a/snippets/vault-scene.liquid b/snippets/vault-scene.liquid
new file mode 100644
index 00000000000..affffcd6a09
--- /dev/null
+++ b/snippets/vault-scene.liquid
@@ -0,0 +1,99 @@
+{%- comment -%}
+ Per-lesson hero composition for the Gristle Vault lesson cards.
+ Renders the supporting graphics that frame the (separate) central
+ play button. Each lesson has its own silhouette + composition.
+ Usage: {% render 'vault-scene', key: 'pick' %}
+ Keys: pick travis chords outside tone blues song clinic
+{%- endcomment -%}
+{%- assign k = key | default: 'pick' -%}
+
+{%- case k -%}
+{%- when 'pick' -%}
+
+
+
+
+
+
+
+
+
+
+
+{%- when 'travis' -%}
+
+
+
+
+
+
+
+
+
+
+{%- when 'chords' -%}
+
+
+
+
+
+
+
+
+
+{%- when 'outside' -%}
+
+
+
+
+
+
+
+
+{%- when 'tone' -%}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{%- when 'blues' -%}
+
+
+
+
+
+
+{%- when 'song' -%}
+
+
+
+
+
+
+
+
+{%- when 'clinic' -%}
+
+
+
+
+
+
+
+
+
+
+
+{%- endcase -%}
+
diff --git a/templates/collection.json b/templates/collection.json
index d12dfab5447..fe5e47ed65d 100644
--- a/templates/collection.json
+++ b/templates/collection.json
@@ -1,3 +1,12 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
{
"sections": {
"banner": {
@@ -8,18 +17,115 @@
"color_scheme": "scheme-1"
}
},
+ "gk_shop_categories_tfaetK": {
+ "type": "gk-shop-categories",
+ "blocks": {
+ "category_UMLxAC": {
+ "type": "category",
+ "settings": {
+ "title": "NEW!",
+ "desc": "Latest drops and fresh arrivals.",
+ "cta": "Explore",
+ "collection": "new"
+ }
+ },
+ "category_ityGCR": {
+ "type": "category",
+ "settings": {
+ "title": "CDs",
+ "desc": "Studio albums and live records.",
+ "cta": "Explore",
+ "collection": "cds"
+ }
+ },
+ "category_6BM7nV": {
+ "type": "category",
+ "settings": {
+ "title": "CDs",
+ "desc": "Studio albums and live records.",
+ "cta": "Explore",
+ "collection": ""
+ }
+ },
+ "category_AqaeTn": {
+ "type": "category",
+ "settings": {
+ "title": "Vinyl",
+ "desc": "Wax. Analog. Real.",
+ "cta": "Explore",
+ "collection": "vinyl"
+ }
+ },
+ "category_7bBD8L": {
+ "type": "category",
+ "settings": {
+ "title": "Merch",
+ "desc": "Wear the gristle.",
+ "cta": "Explore",
+ "collection": "merch"
+ }
+ },
+ "category_tmbJC9": {
+ "type": "category",
+ "settings": {
+ "title": "Gear",
+ "desc": "Pedals, pickups, tone tools.",
+ "cta": "Explore",
+ "collection": "gear"
+ }
+ },
+ "category_BkTJfQ": {
+ "type": "category",
+ "settings": {
+ "title": "Instructional Books",
+ "desc": "Learn from the Gristleman.",
+ "cta": "Explore",
+ "collection": "instructional-books"
+ }
+ },
+ "category_DgjBa6": {
+ "type": "category",
+ "settings": {
+ "title": "DVDs",
+ "desc": "Classic guitar instruction.",
+ "cta": "Explore",
+ "collection": "dvds"
+ }
+ }
+ },
+ "block_order": [
+ "category_UMLxAC",
+ "category_ityGCR",
+ "category_6BM7nV",
+ "category_AqaeTn",
+ "category_7bBD8L",
+ "category_tmbJC9",
+ "category_BkTJfQ",
+ "category_DgjBa6"
+ ],
+ "name": "GK Shop Categories",
+ "settings": {
+ "kicker": "Browse the goods",
+ "heading": "The Gristle Shop",
+ "subtext": "Records. Gear. Tools of tone. Wear the sound.
"
+ }
+ },
"product-grid": {
"type": "main-collection-product-grid",
"settings": {
- "products_per_page": 16,
- "columns_desktop": 4,
- "image_ratio": "adapt",
- "show_secondary_image": false,
+ "products_per_page": 12,
+ "columns_desktop": 3,
+ "columns_mobile": "2",
+ "color_scheme": "",
+ "image_ratio": "portrait",
+ "image_shape": "default",
+ "show_secondary_image": true,
"show_vendor": false,
"show_rating": false,
+ "quick_add": "none",
"enable_filtering": true,
+ "filter_type": "horizontal",
"enable_sorting": true,
- "columns_mobile": "2",
"padding_top": 36,
"padding_bottom": 36
}
@@ -27,6 +133,7 @@
},
"order": [
"banner",
+ "gk_shop_categories_tfaetK",
"product-grid"
]
}
diff --git a/templates/index.json b/templates/index.json
index 92d10b71ece..4d32764761f 100644
--- a/templates/index.json
+++ b/templates/index.json
@@ -1,3 +1,12 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
{
"sections": {
"image_banner": {
@@ -6,14 +15,14 @@
"heading": {
"type": "heading",
"settings": {
- "heading": "Image banner",
+ "heading": "Home Of The Gristle",
"heading_size": "h0"
}
},
"text": {
"type": "text",
"settings": {
- "text": "Give customers details about the banner image(s) or content on the template.",
+ "text": "",
"text_style": "body"
}
},
@@ -35,110 +44,288 @@
"button"
],
"settings": {
+ "image": "shopify://shop_images/8059526f-19c9-4901-a9d8-9059596f1446.png",
"image_overlay_opacity": 40,
"image_height": "large",
+ "image_behavior": "none",
+ "gk_hero_bloom": true,
"desktop_content_position": "bottom-center",
- "show_text_box": false,
"desktop_content_alignment": "center",
+ "show_text_box": false,
"color_scheme": "scheme-3",
- "mobile_content_alignment": "center",
"stack_images_on_mobile": false,
+ "mobile_content_alignment": "center",
"show_text_below": false
}
},
- "rich_text": {
- "type": "rich-text",
- "blocks": {
- "heading": {
- "type": "heading",
- "settings": {
- "heading": "Talk about your brand",
- "heading_size": "h1"
- }
- },
- "text": {
- "type": "text",
- "settings": {
- "text": "Share information about your brand with your customers. Describe a product, make announcements, or welcome customers to your store.<\/p>"
- }
- }
- },
- "block_order": [
- "heading",
- "text"
- ],
+ "gk_tour_dates_home_dLWg9B": {
+ "type": "gk-tour-dates",
"settings": {
- "color_scheme": "scheme-1",
- "full_width": true,
- "padding_top": 40,
- "padding_bottom": 0
+ "eyebrow": "Tour Dates",
+ "heading": "GREG KOCH DATES",
+ "subtext": "See upcoming dates below.",
+ "empty_text": "No upcoming dates. Check back soon.",
+ "text_align": "left",
+ "home_visible_count": 3,
+ "home_reveal_step": 3,
+ "home_more_label": "Show more dates",
+ "page_visible_count": 10,
+ "page_reveal_step": 10,
+ "page_more_label": "Show more dates",
+ "page_less_label": "Show fewer dates",
+ "view_all_label": "View all dates",
+ "view_all_url": "",
+ "bg_color": "#0d0d0d",
+ "accent_color": "#e8690a",
+ "padding_top": 64,
+ "padding_bottom": 64
}
},
"featured_collection": {
"type": "featured-collection",
"settings": {
- "title": "Featured products",
- "heading_size": "h2",
"collection": "all",
"products_to_show": 8,
+ "title": "Shop the gristle",
+ "heading_size": "h1",
+ "description": "",
+ "show_description": false,
+ "description_style": "body",
"columns_desktop": 4,
- "color_scheme": "scheme-1",
+ "enable_desktop_slider": false,
+ "full_width": false,
"show_view_all": false,
- "swipe_on_mobile": false,
+ "view_all_style": "solid",
+ "color_scheme": "scheme-1",
"image_ratio": "adapt",
+ "image_shape": "default",
"show_secondary_image": true,
"show_vendor": false,
"show_rating": false,
+ "quick_add": "none",
"columns_mobile": "2",
+ "swipe_on_mobile": false,
"padding_top": 28,
"padding_bottom": 36
}
},
- "collage": {
- "type": "collage",
+ "gk_stream_follow_GVbNme": {
+ "type": "gk-stream-follow",
"blocks": {
- "collection-0": {
- "type": "collection",
+ "platform_link_q8HBBn": {
+ "type": "platform_link",
+ "settings": {
+ "column": "podcast",
+ "label": "Apple Podcasts",
+ "url": "https://podcasts.apple.com/us/podcast/chewing-the-gristle-with-greg-koch/id1525643497"
+ }
+ },
+ "platform_link_mLmVKg": {
+ "type": "platform_link",
+ "settings": {
+ "column": "podcast",
+ "label": "Buzzprout",
+ "url": "https://www.buzzsprout.com/1246721"
+ }
+ },
+ "platform_link_exYqQe": {
+ "type": "platform_link",
+ "settings": {
+ "column": "podcast",
+ "label": "Spotify Podcasts",
+ "url": "https://open.spotify.com/show/0J5kQaxZPd1iKqT3Vfzirc"
+ }
+ },
+ "platform_link_BQXf4F": {
+ "type": "platform_link",
+ "settings": {
+ "column": "podcast",
+ "label": "Deezer Podcasts",
+ "url": "https://www.deezer.com/us/show/1572042"
+ }
+ },
+ "platform_link_NYRx3L": {
+ "type": "platform_link",
+ "settings": {
+ "column": "watch_live",
+ "label": "YouTube",
+ "url": "https://www.youtube.com/@GregKochMusic/streams"
+ }
+ },
+ "platform_link_gTtWaD": {
+ "type": "platform_link",
+ "settings": {
+ "column": "watch_live",
+ "label": "Facebook",
+ "url": "https://www.facebook.com/GregKochMusic"
+ }
+ },
+ "platform_link_GLRmRE": {
+ "type": "platform_link",
+ "settings": {
+ "column": "stream_kmt",
+ "label": "Spotify",
+ "url": "https://open.spotify.com/artist/0S1IwDW6PhPmAuC9jtOo1L"
+ }
+ },
+ "platform_link_GjRh34": {
+ "type": "platform_link",
"settings": {
- "collection": ""
+ "column": "stream_kmt",
+ "label": "Apple Music",
+ "url": "https://music.apple.com/us/artist/koch-marshall-trio/1325215495"
}
},
- "product": {
- "type": "product",
+ "platform_link_YwtxXf": {
+ "type": "platform_link",
"settings": {
- "product": "",
- "second_image": false
+ "column": "stream_kmt",
+ "label": "YouTube Music",
+ "url": "https://music.youtube.com/channel/UCOCLy0S38jVy35han88h_JA"
}
},
- "collection-1": {
- "type": "collection",
+ "platform_link_aNzFB3": {
+ "type": "platform_link",
"settings": {
- "collection": ""
+ "column": "stream_greg",
+ "label": "Spotify",
+ "url": "https://open.spotify.com/artist/5Y6wPwVr2krTASRASpMLsC",
+ "icon": "shopify://shop_images/Spotify-Icon-Logo.wine.svg"
+ }
+ },
+ "platform_link_EbDTxj": {
+ "type": "platform_link",
+ "settings": {
+ "column": "stream_greg",
+ "label": "Apple Music",
+ "url": "https://music.apple.com/us/artist/greg-koch/5517890"
+ }
+ },
+ "platform_link_wR9JCm": {
+ "type": "platform_link",
+ "settings": {
+ "column": "stream_greg",
+ "label": "YouTube Music",
+ "url": "https://music.youtube.com/channel/UCX3rdX9oHrDLxb8Ql74Gwaw"
+ }
+ },
+ "platform_link_ytJhCB": {
+ "type": "platform_link",
+ "settings": {
+ "column": "stream_greg",
+ "label": "BandCamp",
+ "url": "https://gregkoch.bandcamp.com/album/live-on-the-radio-volume-2"
+ }
+ },
+ "platform_link_BpyBqF": {
+ "type": "platform_link",
+ "settings": {
+ "column": "stream_greg",
+ "label": "Deezer",
+ "url": "https://www.deezer.com/us/artist/386838"
+ }
+ },
+ "platform_link_iJMtQK": {
+ "type": "platform_link",
+ "settings": {
+ "column": "stream_greg",
+ "label": "Tidal",
+ "url": "https://tidal.com/artist/4515825"
+ }
+ },
+ "platform_link_jtx7X4": {
+ "type": "platform_link",
+ "settings": {
+ "column": "stream_greg",
+ "label": "Amazon Music",
+ "url": "https://www.amazon.com/music/player/artists/B0013QS4NU/greg-koch?shoppingPortalEnabled=true"
+ }
+ },
+ "follow_link_DkFUcd": {
+ "type": "follow_link",
+ "settings": {
+ "label": "Instagram",
+ "url": "https://www.instagram.com/gregkochmusic"
+ }
+ },
+ "follow_link_FNhrbc": {
+ "type": "follow_link",
+ "settings": {
+ "label": "FaceBook",
+ "url": "https://www.facebook.com/GregKochMusic"
+ }
+ },
+ "follow_link_wEcgbq": {
+ "type": "follow_link",
+ "settings": {
+ "label": "Youtube",
+ "url": "https://www.youtube.com/c/GregKochMusic"
+ }
+ },
+ "follow_link_jhpL4B": {
+ "type": "follow_link",
+ "settings": {
+ "label": "X",
+ "url": "https://x.com/Mansqwatch"
+ }
+ },
+ "follow_link_pbGjwr": {
+ "type": "follow_link",
+ "settings": {
+ "label": "Tiktok",
+ "url": "https://www.tiktok.com/@gregkochofficial"
}
}
},
"block_order": [
- "collection-0",
- "product",
- "collection-1"
+ "platform_link_q8HBBn",
+ "platform_link_mLmVKg",
+ "platform_link_exYqQe",
+ "platform_link_BQXf4F",
+ "platform_link_NYRx3L",
+ "platform_link_gTtWaD",
+ "platform_link_GLRmRE",
+ "platform_link_GjRh34",
+ "platform_link_YwtxXf",
+ "platform_link_aNzFB3",
+ "platform_link_EbDTxj",
+ "platform_link_wR9JCm",
+ "platform_link_ytJhCB",
+ "platform_link_BpyBqF",
+ "platform_link_iJMtQK",
+ "platform_link_jtx7X4",
+ "follow_link_DkFUcd",
+ "follow_link_FNhrbc",
+ "follow_link_wEcgbq",
+ "follow_link_jhpL4B",
+ "follow_link_pbGjwr"
],
+ "name": "GK Stream + Follow",
"settings": {
- "heading": "Multimedia collage",
- "heading_size": "h2",
- "desktop_layout": "left",
- "mobile_layout": "collage",
- "color_scheme": "scheme-1",
- "padding_top": 36,
- "padding_bottom": 36
+ "eyebrow": "LISTEN & CONNECT",
+ "heading": "STREAM + FOLLOW",
+ "subtext": "Find Greg Koch on every platform.",
+ "col_1_title": "STREAM GREG",
+ "col_2_title": "STREAM KMT",
+ "col_3_title": "PODCAST",
+ "col_4_title": "LIVE STREAMS",
+ "follow_heading": "FOLLOW",
+ "show_icons": false,
+ "show_dividers": true,
+ "empty_column_text": "Add links for this column in the section blocks.",
+ "pad_y": 72,
+ "bg_color": "#0d0d0d",
+ "text_color": "#ffffff"
}
},
"video": {
"type": "video",
"settings": {
"heading": "",
- "video_url": "https://www.youtube.com/watch?v=_9VUPq3SxOc",
"heading_size": "h1",
- "description": "",
+ "enable_video_looping": false,
+ "video_url": "https://www.youtube.com/watch?v=fNRCb3rriuo",
+ "description": "Greg Koch",
"full_width": false,
"color_scheme": "scheme-1",
"padding_top": 36,
@@ -151,8 +338,8 @@
"column1": {
"type": "column",
"settings": {
- "title": "Column",
- "text": "
Pair text with an image to focus on your chosen product, collection, or blog post. Add details on availability, style, or even provide a review.<\/p>",
+ "title": "Steve Vai",
+ "text": "
“Greg Koch is one of those rare guitarists that can blend various styles with a light-hearted approach and a tremendous amount of technique. Hearing him play is inspiring to a guitar player to try to achieve greatness on the instrument.”
",
"link_label": "",
"link": ""
}
@@ -160,17 +347,8 @@
"column2": {
"type": "column",
"settings": {
- "title": "Column",
- "text": "Pair text with an image to focus on your chosen product, collection, or blog post. Add details on availability, style, or even provide a review.<\/p>",
- "link_label": "",
- "link": ""
- }
- },
- "column3": {
- "type": "column",
- "settings": {
- "title": "Column",
- "text": "
Pair text with an image to focus on your chosen product, collection, or blog post. Add details on availability, style, or even provide a review.<\/p>",
+ "title": "Joe Bonamassa",
+ "text": "
“I believe Greg Koch is pound for pound the best guitar player in the world today. His tone, feel and style are unrivaled in today’s guitar playing community. He is scary good.”
",
"link_label": "",
"link": ""
}
@@ -178,22 +356,127 @@
},
"block_order": [
"column1",
- "column2",
- "column3"
+ "column2"
],
"settings": {
"title": "",
"heading_size": "h1",
"image_width": "third",
"image_ratio": "adapt",
- "columns_desktop": 3,
- "column_alignment": "center",
- "background_style": "none",
"button_label": "",
"button_link": "",
- "swipe_on_mobile": false,
+ "columns_desktop": 2,
+ "column_alignment": "center",
+ "background_style": "none",
"color_scheme": "scheme-1",
"columns_mobile": "1",
+ "swipe_on_mobile": false,
+ "padding_top": 36,
+ "padding_bottom": 36
+ }
+ },
+ "gk_spotify_embed_k4K4EF": {
+ "type": "gk-spotify-embed",
+ "disabled": true,
+ "name": "GK Spotify Embed",
+ "settings": {
+ "enable_animation": true,
+ "eyebrow": ".",
+ "heading": "Listen on Spotify",
+ "subheading": ".",
+ "embed_src": "https://open.spotify.com/embed/artist/5Y6wPwVr2krTASRASpMLsC?utm_source=generator",
+ "open_url": "https://open.spotify.com/artist/5Y6wPwVr2krTASRASpMLsC",
+ "show_open_button": true,
+ "height": 352,
+ "accent": "#e8690a",
+ "padding_top": 44,
+ "padding_bottom": 52
+ }
+ },
+ "gk_sponsors_RgU39c": {
+ "type": "gk-sponsors",
+ "blocks": {
+ "sponsor_Dm49jt": {
+ "type": "sponsor",
+ "settings": {
+ "logo": "shopify://shop_images/ChatGPT_Image_Feb_25_2026_10_12_11_AM.png",
+ "label": ".",
+ "url": "",
+ "open_new": true,
+ "nofollow": false
+ }
+ },
+ "sponsor_cTyXDJ": {
+ "type": "sponsor",
+ "settings": {
+ "logo": "shopify://shop_images/ChatGPT_Image_Feb_25_2026_10_13_52_AM.png",
+ "label": ".",
+ "url": "",
+ "open_new": true,
+ "nofollow": false
+ }
+ },
+ "sponsor_4ik4ji": {
+ "type": "sponsor",
+ "settings": {
+ "logo": "shopify://shop_images/ChatGPT_Image_Feb_25_2026_10_16_45_AM.png",
+ "label": ".",
+ "url": "",
+ "open_new": true,
+ "nofollow": false
+ }
+ },
+ "sponsor_NFAMKW": {
+ "type": "sponsor",
+ "settings": {
+ "logo": "shopify://shop_images/ChatGPT_Image_Feb_25_2026_10_19_23_AM.png",
+ "label": ".",
+ "url": "",
+ "open_new": true,
+ "nofollow": false
+ }
+ },
+ "sponsor_bBEEPy": {
+ "type": "sponsor",
+ "settings": {
+ "logo": "shopify://shop_images/ChatGPT_Image_Feb_25_2026_10_32_53_AM.png",
+ "label": ".",
+ "url": "",
+ "open_new": true,
+ "nofollow": false
+ }
+ },
+ "sponsor_7DTkG6": {
+ "type": "sponsor",
+ "settings": {
+ "label": ".",
+ "url": "",
+ "open_new": true,
+ "nofollow": false
+ }
+ }
+ },
+ "block_order": [
+ "sponsor_Dm49jt",
+ "sponsor_cTyXDJ",
+ "sponsor_4ik4ji",
+ "sponsor_NFAMKW",
+ "sponsor_bBEEPy",
+ "sponsor_7DTkG6"
+ ],
+ "name": "GK Sponsors",
+ "settings": {
+ "heading": "Sponsors",
+ "subheading": ".",
+ "accent": "#e8690a",
+ "columns_desktop": 5,
+ "columns_tablet": 4,
+ "columns_mobile": 2,
+ "gap": 31,
+ "logo_height": 110,
+ "logo_boost": 140,
+ "hover_scale": 110,
+ "glow_strength": 98,
"padding_top": 36,
"padding_bottom": 36
}
@@ -201,10 +484,12 @@
},
"order": [
"image_banner",
- "rich_text",
+ "gk_tour_dates_home_dLWg9B",
"featured_collection",
- "collage",
+ "gk_stream_follow_GVbNme",
"video",
- "multicolumn"
+ "multicolumn",
+ "gk_spotify_embed_k4K4EF",
+ "gk_sponsors_RgU39c"
]
}
diff --git a/templates/page.about.json b/templates/page.about.json
new file mode 100644
index 00000000000..da58f89993b
--- /dev/null
+++ b/templates/page.about.json
@@ -0,0 +1,109 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "sections": {
+ "main": {
+ "type": "main-page",
+ "disabled": true,
+ "settings": {
+ "padding_top": 28,
+ "padding_bottom": 28
+ }
+ },
+ "gk_about_feature_NcbxQh": {
+ "type": "gk-about-feature",
+ "name": "GK About Feature",
+ "settings": {
+ "enable_animation": true,
+ "eyebrow": "",
+ "heading": "About Greg",
+ "image": "shopify://shop_images/gregkoch-hallway-1317-2025cjfoeckler_1.jpg",
+ "photo_credit": "above photo credit: ©2025CJFoeckler",
+ "subheading": ".",
+ "body": "It is not a stretch to say that Milwaukee native Greg Koch is one of the most famous unknown guitar players in the world. His fierce creative spirit and crazed sense of fun fused with a tremendous degree of versatility has made him an island of six-stringed mirth in a sea of guitar warlords. Fifteen critically acclaimed CD’s featuring his unique and incendiary brand of playing and composing, international tours as band leader, fourteen best-selling guitar instructional materials for the Hal Leonard Publishing empire, articles and columns in some the biggest guitar magazines, a lengthy past tenure as an ambassador for Fender Guitars and a similar position in that capacity for Fishman Transducers has generated a respectable following for Greg throughout the world. Ultimately, Greg's 4000 plus videos exceeding 50 million views for Wildwood Guitars of Louisville Colorado showcasing Greg’s wild guitar test drives and random humorous commentary have made him a household name for guitar players throughout the galaxy.
Greg’s latest original music outlet, The Koch-Marshall Trio, is perhaps the best vehicle yet to convey his bold improvisational explorations and ever increasing arsenal of original material. The trio blends the explosive guitar manipulations of Greg, the groove-centric, power-pocket playing of his son Dylan on drums (who share many telepathic musical moments) and the glorious, Hammond organ stylings of the uber-talented Toby Marshall, Greg’s compositions are properly portrayed in the blues drenched, funk, chicken-fried, gospelly, jazz-rock panorama in which they were conceived. Their first release, “Toby Arrives” will be released in the February 23, 2018 on the Mascot Label Group / Players Club Imprint and features the first moments of their unexpected musical partnership captured at an extemporaneous jam session earlier in the year.
",
+ "button_label": ".",
+ "button_link": "",
+ "accent": "#e8690a",
+ "padding_top": 40,
+ "padding_bottom": 52
+ }
+ },
+ "gk_about_gallery_Yn9Rwx": {
+ "type": "gk-about-gallery",
+ "name": "GK About Gallery",
+ "settings": {
+ "enable_animation": true,
+ "eyebrow": "",
+ "heading": "About the Koch Marshall Trio",
+ "main_image": "shopify://shop_images/gregkoch-couch-1025-2025cjfoeckler_orig.jpg",
+ "main_credit": "above photo credit: ©2025CJFoeckler",
+ "thumb_1": "shopify://shop_images/IMG_4137.jpg",
+ "thumb_alt_1": ".",
+ "thumb_2": "shopify://shop_images/Untitled_design.jpg",
+ "thumb_alt_2": ".",
+ "thumb_3": "shopify://shop_images/unnamed_2.jpg",
+ "thumb_alt_3": ".",
+ "thumb_4": "shopify://shop_images/Screenshot_2026-02-24_at_4.04.43_PM.png",
+ "thumb_alt_4": ".",
+ "body": "Koch-Marshall Trio , consists of American guitarist Greg Koch, his son Dylan Koch on drums and Hammond B3 specialist Toby Lee Marshall. At the heart of this organ trio is a blues sensibility - but Koch's compositions are an amalgam of rock, funk, jazz and country served up with heavy grooves and dynamic improvisations delivered with no small dose of humor and occasional wild abandon.
Milwaukee native Greg Koch has forged a successful career as a guitar player's guitarist. He has been called \"fiendishly talented\" by author and former editor- in-chief of Guitar Player Magazine Tom Wheeler and \"scary good\" by guitar phenom Joe Bonamassa. In addition to his 15 releases on multiple record labels which feature his unique take on a variety of American guitar styles and his versatile compositions, Koch is widely known for his lengthy tenure as an international ambassador for Fender Guitars which listed him in their “Top Ten Unsung Guitarists” on Fender.com. He is also a best-selling author and video instructor for music publisher Hal Leonard. Greg is a contributing columnist for a variety of guitar magazines including Guitar Player Magazine which listed Greg’s “Chief’s Blues” in their “40 Badass Blues Solos You Must Hear” and Premier Guitar. For the last few years Greg is renowned for his wildly popular internet videos (which number in the thousands with tens of millions of views) originating from the legendary Colorado guitar shop Wildwood Guitars. Furthermore, Koch is internationally known for his work with Fishman Transducers as a clinician and for his contributions to the development of the highly acclaimed Greg Koch Signature Gristletone Pickups for Telecaster guitar.
Dylan Koch gravitated to the drums early on in his life using kitchen utensils to play along with music as soon as he could walk. After digesting an early diet of Ginger Baker, Keith Moon, Mitch Mitchell and John Bonham, Dylan was mentored by the legendary Tom Brechtlein (Chick Corea/Robben Ford). In high school Dylan participated in the Jazz Institute at the Wisconsin Conservatory of Music and furthered his studies at the McNally Smith School of Music in the Twin Cities. While still in his teens he performed with young guitar guns Tallan Noble Latz and Jared James Nichols and has performed alongside his father with such artists as Robben Ford, Little Feat's Paul Barrere, Jon Cleary, David Grissom, Roscoe Beck and Malford Milligan. Dylan was recently nominated for drummer of the year by the Wisconsin Area Music Awards (WAMI).
Toby Lee Marshall's screaming B3 is the perfect compliment to the musical stew that is the Koch songbook. Hailing from the Twin Cities area he came from a musical family, playing piano for years until falling under the spell of the sound of the organ while at a baseball game at age seven. His fascination for the Hammond B3 took hold after his Dad took him to see Steve Cherewan playing with Dr. Mambo's Combo at their legendary residency at Bunker's in Minneapolis. Steve mentored Toby in the ways of the B3 and he hit the ground running landing a gig with bluesman Lonnie Brooks while still a teen. He would go on to travel the world as a member of Bernard Allison's band. After taking a hiatus to spend some family time, Toby is returning to music with a vehemence and the Koch-Marshall format gives him a long leash to let his freak flag fly, providing groovy bass lines, sinuous chordal work and incendiary solos.
",
+ "accent": "#e8690a",
+ "padding_top": 44,
+ "padding_bottom": 52
+ }
+ },
+ "video_RXDmDP": {
+ "type": "video",
+ "name": "t:sections.video.presets.name",
+ "settings": {
+ "heading": "",
+ "heading_size": "h1",
+ "enable_video_looping": false,
+ "video_url": "https://www.youtube.com/watch?v=L4Ntl4dRyp4",
+ "cover_image": "shopify://shop_images/Screenshot_2026-02-25_at_8.54.17_AM.png",
+ "description": "",
+ "full_width": false,
+ "color_scheme": "",
+ "padding_top": 36,
+ "padding_bottom": 36
+ }
+ },
+ "1772034515a67f069c": {
+ "type": "apps",
+ "settings": {
+ "include_margins": true
+ }
+ },
+ "gk_spotify_embed_FgThYi": {
+ "type": "gk-spotify-embed",
+ "name": "GK Spotify Embed",
+ "settings": {
+ "enable_animation": true,
+ "eyebrow": ".",
+ "heading": "Listen on Spotify",
+ "subheading": ".",
+ "embed_src": "https://open.spotify.com/embed/artist/5Y6wPwVr2krTASRASpMLsC?utm_source=generator",
+ "open_url": "https://open.spotify.com/artist/5Y6wPwVr2krTASRASpMLsC",
+ "show_open_button": true,
+ "height": 380,
+ "accent": "#e8690a",
+ "padding_top": 44,
+ "padding_bottom": 52
+ }
+ }
+ },
+ "order": [
+ "main",
+ "gk_about_feature_NcbxQh",
+ "gk_about_gallery_Yn9Rwx",
+ "video_RXDmDP",
+ "1772034515a67f069c",
+ "gk_spotify_embed_FgThYi"
+ ]
+}
diff --git a/templates/page.contact-gk.json b/templates/page.contact-gk.json
new file mode 100644
index 00000000000..6262b3ff60c
--- /dev/null
+++ b/templates/page.contact-gk.json
@@ -0,0 +1,67 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "sections": {
+ "gk_contact": {
+ "type": "gk-contact-page",
+ "blocks": {
+ "email_general": {
+ "type": "info_item",
+ "settings": {
+ "label": "General",
+ "value": "info@gregkoch.com"
+ }
+ },
+ "email_booking": {
+ "type": "info_item",
+ "settings": {
+ "label": "Booking",
+ "value": "booking@gregkoch.com"
+ }
+ },
+ "email_press": {
+ "type": "info_item",
+ "settings": {
+ "label": "Press",
+ "value": "press@gregkoch.com"
+ }
+ }
+ },
+ "block_order": [
+ "email_general",
+ "email_booking",
+ "email_press"
+ ],
+ "settings": {
+ "bg_color": "#0D0D0D",
+ "eyebrow": "Get in Touch",
+ "heading": "CONTACT",
+ "subtext": "For booking, press, lessons, or general inquiries.",
+ "name_label": "Name",
+ "name_placeholder": "Your name",
+ "email_label": "Email",
+ "email_placeholder": "your@email.com",
+ "show_phone": false,
+ "message_label": "Message",
+ "message_placeholder": "What's on your mind?",
+ "submit_label": "SEND MESSAGE",
+ "success_message": "Thanks for reaching out! We'll get back to you soon.",
+ "button_alignment": "left",
+ "button_width": "auto",
+ "form_width": 700,
+ "padding_top": 60,
+ "padding_bottom": 60
+ }
+ }
+ },
+ "order": [
+ "gk_contact"
+ ]
+}
diff --git a/templates/page.dates.json b/templates/page.dates.json
new file mode 100644
index 00000000000..4f90d598f8e
--- /dev/null
+++ b/templates/page.dates.json
@@ -0,0 +1,20 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "sections": {
+ "gk_dates": {
+ "type": "gk-tour-dates",
+ "settings": {}
+ }
+ },
+ "order": [
+ "gk_dates"
+ ]
+}
diff --git a/templates/page.gristle-vault.json b/templates/page.gristle-vault.json
new file mode 100644
index 00000000000..dd292d308a4
--- /dev/null
+++ b/templates/page.gristle-vault.json
@@ -0,0 +1,119 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "layout": "vault",
+ "sections": {
+ "gristle-vault": {
+ "type": "gristle-vault",
+ "blocks": {
+ "video_1": {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=q3tf2NnffAs",
+ "video_title": "Rhythm, Groove and the C9",
+ "video_description": "Inside, Greg walks through the core rhythm approach using a C9 groove, how to move through a blues progression with feel, and a handful of simple tricks that make a part sound big and musical.\n\nFrom there, he gets into lead playing: not from a “more scales” angle, but how to phrase, leave space, and make it sound like a conversation.\n\nThe big takeaway: you don’t need a million notes to sound good. A few solid ideas, good time, and the right attitude will take you a long way.",
+ "video_tag": "Rhythm · Phrasing"
+ }
+ },
+ "video_2": {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=LBHZn4yqqa0",
+ "video_title": "One Guitar, Full Band",
+ "video_description": "This session starts with a straight-up blues, but quickly turns into a deeper look at how to make one guitar sound like a full band.\n\nGreg breaks down how he builds solo arrangements by combining rhythm, bass movement, and lead lines all at once.. pulling from blues, Travis picking, and fingerstyle approaches.\n\nAlong the way, he shares chord shapes, turnarounds, and little “in-between” ideas that help fill space and keep things sounding full and musical, even when you’re playing alone.\n\nThe big takeaway: developing your own sound comes from collecting small ideas over time.. ittle licks, chord moves, and textures. Plus learning how to pull them out naturally when you play.",
+ "video_tag": "Solo Guitar · Arrangement"
+ }
+ },
+ "video_3": {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=BmCQbpYT-T8",
+ "video_title": "Clinic: Gear, Chord Techniques and Tonus Diabolicus",
+ "video_description": "Greg runs through a live clinic covering the gear he travels with, a handful of chord techniques he's picked up from players like James Burton and Robben Ford, and the story behind his composition \"Tonus Diabolicus.\"\n\nYou'll see how he builds tones from a single grab-and-go pedal setup, how to use 9th chord bends and harmonized chord-melody lines across a blues scale, and how the \"Mahavishnu scale\" (a stripped-down Mixolydian) unlocks an exotic sound without a lot of fuss.\n\nThe Q&A wraps with a straight-talk breakdown of hybrid picking development — banjo rolls, triads, and a lot of honest reps. The big takeaway: almost every cool thing Greg plays traces back to something from someone else and how he mutated it until it became his own.",
+ "video_tag": "Clinic · Tone · Theory"
+ }
+ },
+ "video_4": {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=oPiIXRel65U",
+ "video_title": "Jeff Beck and The Grip",
+ "video_description": "Greg shares his deep admiration for Jeff Beck, what made Beck unlike any other player of his generation, then performs \"The Grip,\" a track he wrote as a direct nod to that influence.\n\nThe breakdown covers the hybrid picking mechanics behind the main riff, how Greg uses pinch harmonics and palm-muted bridge tones to get that signature snarl, and the whammy bar and left-hand hammer-on tricks he absorbed from watching Beck up close. The tone breakdown is equally practical: overdrive stacked with a boost and OTS circuit to push into near-fuzz territory.\n\nThe big takeaway: Beck's most unsettling habits, the slightly sharp bends, the harmonica-like whammy warbles, the unpredictable note choices over changes, are exactly what made him impossible to copy and worth studying anyway.",
+ "video_tag": "Technique · Influence"
+ }
+ },
+ "video_5": {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=Y_SlPtbsnSI",
+ "video_title": "Chicken and Travis Picking Deep Dive",
+ "video_description": "Greg breaks down two of the most requested right-hand techniques in his arsenal, chicken picking and Travis picking, covering both the thumb-and-fingers approach and the pick-and-fingers hybrid method for each.\n\nYou'll learn what actually makes a chicken pick (a muted note paired with a popped note, not just string snapping), how to build the coordination between thumb and first finger, and how to eventually transfer that feel to a flat pick setup. The Travis picking section covers the boom-chuck foundation, how to balance volume between pick and fingers, and why slowing it way down is the only honest way to get there.\n\nThe big takeaway: both techniques live or die on the muted note, and until that",
+ "video_tag": "Right Hand · Country · Fingerstyle"
+ }
+ },
+ "video_6": {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=H4bPfA9CVzI",
+ "video_title": "Harmonic Color and Weaponized Open Strings",
+ "video_description": "Greg walks through a set of practical tools for adding harmonic color to a straight dominant seventh setting, then digs into how open strings can be weaponized in a chicken picking context.\n\nThe outside playing section covers chromatic approaches, half-step key substitutions, diminished arpeggios, pentatonic swaps (C minor, B minor, E minor over an A center), and a Mixolydian flat-five idea over the five chord. The open strings section shows how string skipping and hybrid picking with open notes create that cascading country sparkle in keys like G and A, and how landing on a slightly \"wrong\" open string can actually be the best note in the room.\n\nThe big takeaway: you don't need to think in scales to play outside, you just need to know where one half step away from home is and trust what your ear tells you to do with it.",
+ "video_tag": "Harmony · Outside Playing"
+ }
+ },
+ "video_7": {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=nCEhYhFhS0E",
+ "video_title": "Live Rig Breakdown: Italian Tour",
+ "video_description": "Greg sits down for a backstage interview during his Italian tour and walks through every piece of his live rig, from his Reverend signature guitars with Fishman Fluence pickups to the Tone King Royalist amp he runs nearly clean at three, with the Kochness Monster Supreme and a boomster keeping the foundation warm.\n\nHe covers the modulation options he cycles through live (Univibe, Waterfall as a Leslie substitute, Harmonious Monk), two delays including the preset he uses specifically for Tonus Diabolicus, and why the whole thing fits on one small board. He also touches briefly on the realities of building a music career today and why having a direct line to your audience matters more than chasing a follower count.\n\nThe big takeaway: a simple, well-chosen rig played at the right volume will always beat a complicated one, and the amp has to sound good on its own before any pedal earns its spot on the board.",
+ "video_tag": "Gear · Tone"
+ }
+ },
+ "video_8": {
+ "type": "video",
+ "settings": {
+ "youtube_url": "https://www.youtube.com/watch?v=M2EE6kbKFtE",
+ "video_title": "Spank It: The 1988 Riff Decoded",
+ "video_description": "Greg breaks down \"Spank It,\" a riff he wrote in 1988 that became a cornerstone of his playing, walking through the exact right-hand mechanics that make it work.\n\nThe lesson covers the thumb-and-finger approach he used before switching to hybrid picking, how the muted chicken pick note sets up each phrase, the specific chord voicings involved (a seven sharp nine, a D over G, an A13), and how the four and five chord movements are built from the same physical logic as the main riff. It is a tight, practical look at how one deceptively simple idea can generate an entire tune.\n\nThe big takeaway: the riff sounds wild but it is really just two fingers alternating on adjacent strings, and once that motion is in your hands the rest falls into place.",
+ "video_tag": "Riff Breakdown · Technique"
+ }
+ },
+ "pdf_guide": {
+ "type": "pdf",
+ "settings": {
+ "pdf_title": "The Gristle Vault Master Guide",
+ "pdf_description": "Every concept from all eight sessions in one reference document. Techniques, tones, and theory from a lifetime of playing.",
+ "pdf_url": "https://cdn.shopify.com/s/files/1/0976/0210/9761/files/gristle_vault_guide.pdf?v=1782747864"
+ }
+ }
+ },
+ "block_order": [
+ "video_1",
+ "video_2",
+ "video_3",
+ "video_4",
+ "video_5",
+ "video_6",
+ "video_7",
+ "video_8",
+ "pdf_guide"
+ ],
+ "settings": {
+ "hero_logo": "shopify://shop_images/gristle-vault-logo-wide.png",
+ "heading": "The Gristle Vault",
+ "subheading": "Technique. Tone. Theory.",
+ "body_text": "Eight sessions of real guitar knowledge. The kind that takes decades to collect.. Phrasing, tone, theory, and the slightly-wrong choices that make a player impossible to copy."
+ }
+ }
+ },
+ "order": [
+ "gristle-vault"
+ ]
+}
diff --git a/templates/page.json b/templates/page.json
index f2ee79be1f7..f7b7c286939 100644
--- a/templates/page.json
+++ b/templates/page.json
@@ -1,14 +1,41 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
{
"sections": {
"main": {
"type": "main-page",
+ "disabled": true,
"settings": {
"padding_top": 28,
"padding_bottom": 28
}
+ },
+ "gk_bandsintown_page_y47w9C": {
+ "type": "gk-bandsintown-page",
+ "name": "GK Bandsintown (Page)",
+ "settings": {
+ "eyebrow": "Tour Dates",
+ "heading": "TOUR DATES",
+ "subtext": "See upcoming dates below.",
+ "artist_name": "Greg Koch",
+ "initial_visible_count": 10,
+ "reveal_step": 10,
+ "show_more_label": "SHOW MORE DATES",
+ "bg_color": "#0D0D0D",
+ "padding_top": 64,
+ "padding_bottom": 64
+ }
}
},
"order": [
- "main"
+ "main",
+ "gk_bandsintown_page_y47w9C"
]
}
diff --git a/templates/page.lessons.json b/templates/page.lessons.json
new file mode 100644
index 00000000000..4e09ade7a58
--- /dev/null
+++ b/templates/page.lessons.json
@@ -0,0 +1,69 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "sections": {
+ "gk_lessons": {
+ "type": "gk-lessons-page",
+
+ "blocks": {
+ "virtual": {
+ "type": "lesson_card",
+ "settings": {
+ "label": "Private",
+ "title": "Virtual Lessons",
+ "description": "One-on-one virtual guitar lessons with Greg Koch via Zoom. All skill levels welcome — from fundamentals to advanced gristle techniques.",
+ "features": "60 minute sessions|All skill levels|Personalized instruction|Zoom video call",
+ "price": "",
+ "button_label": "BOOK A LESSON"
+ }
+ },
+ "on_demand": {
+ "type": "lesson_card",
+ "settings": {
+ "label": "On Demand",
+ "title": "On-Demand Courses",
+ "description": "Self-paced video courses covering technique, tone, and the gristle approach to guitar playing.",
+ "features": "Watch at your own pace|HD video lessons|Downloadable tabs|Lifetime access",
+ "price": "",
+ "button_label": "BROWSE COURSES"
+ }
+ },
+ "truefire": {
+ "type": "lesson_card",
+ "settings": {
+ "label": "TrueFire",
+ "title": "TrueFire Courses",
+ "description": "Full-length instructional courses available on the TrueFire platform with interactive tools.",
+ "features": "Professional production|Interactive tabs|Loop & slow down tools|Mobile app access",
+ "price": "",
+ "button_label": "VIEW ON TRUEFIRE"
+ }
+ }
+ },
+ "block_order": [
+ "virtual",
+ "on_demand",
+ "truefire"
+ ],
+ "settings": {
+ "bg_color": "#0D0D0D",
+ "eyebrow": "Learn from the Gristleman",
+ "heading": "LESSONS",
+ "subtext": "Level up your playing with virtual lessons, on-demand courses, and deep-dive instructional content from Greg Koch.",
+ "columns": "3",
+ "padding_top": 60,
+ "padding_bottom": 60
+ }
+ }
+ },
+ "order": [
+ "gk_lessons"
+ ]
+}
diff --git a/templates/page.page-shop.json b/templates/page.page-shop.json
new file mode 100644
index 00000000000..173de4a5fe6
--- /dev/null
+++ b/templates/page.page-shop.json
@@ -0,0 +1,115 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "sections": {
+ "main": {
+ "type": "main-page",
+ "disabled": true,
+ "settings": {
+ "padding_top": 28,
+ "padding_bottom": 28
+ }
+ },
+ "gk_shop_categories_jhEKdU": {
+ "type": "gk-shop-categories",
+ "blocks": {
+ "category_EnefxE": {
+ "type": "category",
+ "settings": {
+ "collection": "new",
+ "title": "NEW!",
+ "description": "Latest drops and fresh arrivals.",
+ "icon": "new",
+ "featured": true
+ }
+ },
+ "category_fjLqRH": {
+ "type": "category",
+ "settings": {
+ "collection": "cds",
+ "title": "CDs",
+ "description": "Studio albums and live records.",
+ "icon": "cds",
+ "featured": false
+ }
+ },
+ "category_yXfR4W": {
+ "type": "category",
+ "settings": {
+ "collection": "vinyl",
+ "title": "Vinyl",
+ "description": "Wax. Analog. Real.",
+ "icon": "vinyl",
+ "featured": false
+ }
+ },
+ "category_wCWXhd": {
+ "type": "category",
+ "settings": {
+ "collection": "merch",
+ "title": "Merch",
+ "description": "Wear the gristle.",
+ "icon": "merch",
+ "featured": false
+ }
+ },
+ "category_JDyWJn": {
+ "type": "category",
+ "settings": {
+ "collection": "gear",
+ "title": "Gear",
+ "description": "Pickups, pedals, tone tools.",
+ "icon": "gear",
+ "featured": false
+ }
+ },
+ "category_r7z3hp": {
+ "type": "category",
+ "settings": {
+ "collection": "instructional-books",
+ "title": "Instructional Books",
+ "description": "Learn from the Gristleman.",
+ "icon": "books",
+ "featured": false
+ }
+ },
+ "category_RJjqz6": {
+ "type": "category",
+ "settings": {
+ "collection": "dvds",
+ "title": "DVDs",
+ "description": "Classic guitar instruction.",
+ "icon": "dvds",
+ "featured": false
+ }
+ }
+ },
+ "block_order": [
+ "category_EnefxE",
+ "category_fjLqRH",
+ "category_yXfR4W",
+ "category_wCWXhd",
+ "category_JDyWJn",
+ "category_r7z3hp",
+ "category_RJjqz6"
+ ],
+ "name": "GK Shop Categories",
+ "settings": {
+ "kicker": "Browse the goods",
+ "heading": "The Gristle Shop",
+ "subheading": "Records. Gear. Tools of tone. Wear the sound.
"
+ }
+ }
+ },
+ "order": [
+ "main",
+ "gk_shop_categories_jhEKdU"
+ ]
+}
diff --git a/templates/page.press.json b/templates/page.press.json
new file mode 100644
index 00000000000..729a69f7135
--- /dev/null
+++ b/templates/page.press.json
@@ -0,0 +1,142 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "sections": {
+ "main": {
+ "type": "main-page",
+ "disabled": true,
+ "settings": {
+ "padding_top": 28,
+ "padding_bottom": 28
+ }
+ },
+ "gk_press_hero_QATeQj": {
+ "type": "gk-press-hero",
+ "name": "GK Press Hero",
+ "settings": {
+ "eyebrow": "In the Press",
+ "heading": "Press & Media",
+ "subheading": "Greg Koch has been featured in leading guitar publications, interviews, and music media outlets around the world.",
+ "intro_text": "",
+ "press_kit_url": "https://admin.shopify.com/store/brs3em-kw/content/files/54766409253185?selectedView=all",
+ "press_kit_label": "Download Press Kit",
+ "show_featured_in": true,
+ "pub_1": "Relix Magazine",
+ "pub_2": "Vintage Guitar Magazine",
+ "pub_3": "Guitar Player",
+ "pub_4": "Premier Guitar",
+ "pub_5": "Guitar World",
+ "pub_6": "Palm Beach Arts Paper",
+ "padding_top": 96,
+ "padding_bottom": 96
+ }
+ },
+ "gk_press_media_4FUTwT": {
+ "type": "gk-press-media",
+ "blocks": {
+ "article_card_BJTgTw": {
+ "type": "article_card",
+ "settings": {
+ "publication": "Relix Magazine",
+ "title": "All Blues: Greg Koch Connects with Devon Allman and Revisits His Record Collection",
+ "description": "A deep dive into Greg Koch's influences, record collection, and connection with Devon Allman.",
+ "url": "https://relix.com/articles/detail/all-blues-greg-koch-connects-with-devon-allman-and-revisits-his-record-collection/"
+ }
+ },
+ "article_card_zhyEQM": {
+ "type": "article_card",
+ "settings": {
+ "publication": "Vintage Guitar Magazine",
+ "title": "Greg Koch Feature Interview",
+ "description": "Vintage Guitar Magazine explores Greg Koch's career, tone philosophy, and unique playing style.",
+ "url": "https://www.vintageguitar.com/88432/greg-koch-3/"
+ }
+ },
+ "article_card_dbxeKw": {
+ "type": "article_card",
+ "settings": {
+ "publication": "Palm Beach Arts Paper",
+ "title": "The Best Guitarist Working Today? That Might Be Greg Koch",
+ "description": "A feature exploring Greg Koch's reputation as one of the most dynamic guitarists performing today.",
+ "url": "https://palmbeachartspaper.com/the-best-guitarist-working-today-that-might-be-greg-koch/"
+ }
+ }
+ },
+ "block_order": [
+ "article_card_BJTgTw",
+ "article_card_zhyEQM",
+ "article_card_dbxeKw"
+ ],
+ "name": "GK Press Media",
+ "settings": {
+ "video_eyebrow": "Featured Interview",
+ "video_heading": "Greg Koch Interview with Rick Beato",
+ "video_description": "Legendary guitar educator and YouTube creator Rick Beato sits down with Greg Koch for a wide-ranging conversation about tone, technique, and the pursuit of musical truth.",
+ "video_url": "https://www.youtube.com/watch?v=oLOg9ZLiHtg",
+ "articles_eyebrow": "In the Press",
+ "articles_heading": "Featured Coverage",
+ "section_gap": 64,
+ "padding_top": 64,
+ "padding_bottom": 64
+ }
+ },
+ "gk_press_quotes_nHhdmE": {
+ "type": "gk-press-quotes",
+ "blocks": {
+ "quote_block_AgmtfQ": {
+ "type": "quote_block",
+ "settings": {
+ "quote": "The best guitarist working today.",
+ "attribution": "Palm Beach Arts Paper",
+ "source": "",
+ "emphasis": true
+ }
+ },
+ "quote_block_g7FGhy": {
+ "type": "quote_block",
+ "settings": {
+ "quote": "A master of tone, groove, and musical personality.",
+ "attribution": "Vintage Guitar Magazine",
+ "source": "",
+ "emphasis": false
+ }
+ },
+ "quote_block_gF6PVg": {
+ "type": "quote_block",
+ "settings": {
+ "quote": "I believe Greg Koch is pound for pound the\nbest guitar player in the world today. His, tone,\nfeel and style are unrivaled in today’s guitar\nplaying community. He is scary good.",
+ "attribution": "Joe Bonamassa",
+ "source": "",
+ "emphasis": false
+ }
+ }
+ },
+ "block_order": [
+ "quote_block_AgmtfQ",
+ "quote_block_g7FGhy",
+ "quote_block_gF6PVg"
+ ],
+ "name": "GK Press Quotes",
+ "settings": {
+ "show_header": true,
+ "eyebrow": "What They're Saying",
+ "heading": "Press Praise",
+ "padding_top": 64,
+ "padding_bottom": 64
+ }
+ }
+ },
+ "order": [
+ "main",
+ "gk_press_hero_QATeQj",
+ "gk_press_media_4FUTwT",
+ "gk_press_quotes_nHhdmE"
+ ]
+}
diff --git a/templates/page.vault-optin.json b/templates/page.vault-optin.json
new file mode 100644
index 00000000000..fbd8de1c2e4
--- /dev/null
+++ b/templates/page.vault-optin.json
@@ -0,0 +1,304 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "layout": "vault-optin",
+ "sections": {
+ "hero": {
+ "type": "vault-hero",
+ "settings": {
+ "kicker": "The Gristle Vault · Free Access",
+ "heading_line1": "ACCESS THE",
+ "heading_line2": "GRISTLE VAULT",
+ "value_line": "8 Videos · 4+ Hours · 1 Master PDF · All Free",
+ "lead": "Stop digging through random clips. Get the actual stash.",
+ "pain": "Most players collect random licks, scattered YouTube clips, and half-finished lessons. The Vault gives you a clear stash of Greg's real lessons, clinics, and breakdowns in one place.",
+ "button_label": "UNLOCK THE FREE STASH →",
+ "button_link": "",
+ "microcopy": "Free. No credit card. Instant access."
+ }
+ },
+ "form": {
+ "type": "vault-form",
+ "blocks": {
+ "stat_videos": {
+ "type": "stat",
+ "settings": {
+ "num": "8",
+ "label": "Videos"
+ }
+ },
+ "stat_hours": {
+ "type": "stat",
+ "settings": {
+ "num": "4+",
+ "label": "Hours"
+ }
+ },
+ "stat_pdf": {
+ "type": "stat",
+ "settings": {
+ "num": "1",
+ "label": "Master PDF"
+ }
+ },
+ "stat_cost": {
+ "type": "stat",
+ "settings": {
+ "num": "$0",
+ "label": "Cost"
+ }
+ }
+ },
+ "block_order": [
+ "stat_videos",
+ "stat_hours",
+ "stat_pdf",
+ "stat_cost"
+ ],
+ "settings": {
+ "hero_image": "shopify://shop_images/Screenshot_2026-06-29_at_5.20.39_PM.png",
+ "photo_placeholder": "Add performance photo in theme editor",
+ "form_eyebrow": "Free Instant Access",
+ "form_heading": "Get the Vault",
+ "form_note": "8 videos and the master PDF, straight to your inbox.",
+ "first_name_placeholder": "First name",
+ "last_name_placeholder": "Last name",
+ "email_placeholder": "Email address",
+ "submit_label": "YES, SEND ME THE VAULT →",
+ "sending_label": "Sending…",
+ "consent": "By submitting you agree to receive emails from Greg Koch. Unsubscribe anytime.",
+ "error_text": "Something went wrong. Please check your email and try again.",
+ "success_message": "You are in. Check your inbox.",
+ "klaviyo_company_id": "XBDmgJ",
+ "klaviyo_list_id": "Wbqf9S"
+ }
+ },
+ "stash": {
+ "type": "vault-stash",
+ "blocks": {
+ "card_1": {
+ "type": "card",
+ "settings": {
+ "width": "third",
+ "emblem": "pick",
+ "free_label": "FREE · 01",
+ "title": "Chicken Picking Masterclass",
+ "description": "Thumb and finger foundation to full hybrid integration. The muted note, the pop, the banjo rolls, the Magic Sam lick. Everything."
+ }
+ },
+ "card_2": {
+ "type": "card",
+ "settings": {
+ "width": "third",
+ "emblem": "travis",
+ "free_label": "FREE · 02",
+ "title": "Travis Picking Deep Dive",
+ "description": "Learned with a flat pick. How to build the boom-chuck foundation without speeding up before you are ready."
+ }
+ },
+ "card_3": {
+ "type": "card",
+ "settings": {
+ "width": "third",
+ "emblem": "chords",
+ "free_label": "FREE · 03",
+ "title": "Chord Vocabulary",
+ "description": "James Burton ninth chord bend, Robben Ford chord melody, Allan Holdsworth minor 11th, the Steely Dan sus chord."
+ }
+ },
+ "card_4": {
+ "type": "card",
+ "settings": {
+ "width": "third",
+ "emblem": "outside",
+ "free_label": "FREE · 04",
+ "title": "Outside Playing",
+ "description": "Pentatonic substitutions, chromatic approaches, diminished arpeggios, the tritone sub, and the Mahavishnu scale. Sound outside without sounding lost."
+ }
+ },
+ "card_5": {
+ "type": "card",
+ "settings": {
+ "width": "third",
+ "emblem": "tone",
+ "free_label": "FREE · 05",
+ "title": "Tone and Gear Rundown",
+ "description": "The full live rig. Reverend guitars, Fishman Fluence pickups, Tone King Royalist, every pedal on the board with context for why each one gets used."
+ }
+ },
+ "card_6": {
+ "type": "card",
+ "settings": {
+ "width": "third",
+ "emblem": "blues",
+ "free_label": "FREE · 06",
+ "title": "Blues Soloing Concepts",
+ "description": "Playing over changes instead of camping on pentatonic. Jeff Beck whammy techniques, self-accompanied blues, the Allman Brothers approach to major and minor."
+ }
+ },
+ "card_7": {
+ "type": "card",
+ "settings": {
+ "width": "half",
+ "emblem": "song",
+ "free_label": "FREE · 07",
+ "title": "Song Breakdowns",
+ "description": "Note-for-note construction of Tonus Diabolicus and Spank It. Where every idea came from, how it was mutated, and exactly how to play it."
+ }
+ },
+ "card_8": {
+ "type": "card",
+ "settings": {
+ "width": "half",
+ "emblem": "clinic",
+ "free_label": "FREE · 08",
+ "title": "Live Clinics and Q&A",
+ "description": "Full workshop recordings. A gear walkthrough, a backstage interview, and a live Q&A with working musicians."
+ }
+ }
+ },
+ "block_order": [
+ "card_1",
+ "card_2",
+ "card_3",
+ "card_4",
+ "card_5",
+ "card_6",
+ "card_7",
+ "card_8"
+ ],
+ "settings": {
+ "show_top_divider": true,
+ "eyebrow": "What is inside the vault",
+ "heading": "THE FULL STASH.",
+ "subhead": "Eight complete sessions. Every one a real lesson. Not a teaser. Not a highlight reel.",
+ "show_pdf": true,
+ "pdf_icon": "ti-file-description",
+ "pdf_title": "The Gristle Vault Master Reference",
+ "pdf_desc": "A 12-page document covering every technique, chord voicing, gear spec, and principle from all 8 videos. Built to keep open while you watch."
+ }
+ },
+ "bridge": {
+ "type": "vault-bridge",
+ "settings": {
+ "show_top_divider": true,
+ "eyebrow": "The problem with scattered learning",
+ "heading": "STOP PIECING TOGETHER RANDOM GUITAR ADVICE",
+ "subhead": "You can spend years bouncing between clips, tabs, and half-explained tricks. Or you can grab one clean stash of Greg's chicken pickin', outside playing, tone, chord vocabulary, blues ideas, and clinic breakdowns.",
+ "pain_title": "The scattered way",
+ "pain_list": "Random clips\nIsolated licks\nNo clear next step\nHard to know what matters",
+ "gain_title": "The Vault way",
+ "gain_list": "Greg's real lessons in one place\nTechniques, clinics, breakdowns, and PDF\nA clear stash you can return to",
+ "foot": "Here’s what’s inside the free stash."
+ }
+ },
+ "cta": {
+ "type": "vault-cta",
+ "settings": {
+ "show_top_divider": false,
+ "heading": "4+ Hours. 8 Videos. 1 Master PDF. All Free.",
+ "subhead": "Enter your email and Greg sends the whole stash straight to your inbox.",
+ "button_label": "YES, SEND ME THE VAULT →",
+ "button_link": "",
+ "consent": "Free. No credit card. No nonsense."
+ }
+ },
+ "letter": {
+ "type": "vault-letter",
+ "settings": {
+ "show_top_divider": true,
+ "eyebrow": "A note from Greg",
+ "heading": "WAIT. IS THIS ACTUALLY FREE?",
+ "letter_image": "shopify://shop_images/s180342207891963160_p100_i6_w960.jpg",
+ "caption": "Greg Koch",
+ "caption_role": "The Gristle Vault",
+ "lead": "Yeah. It’s actually free.",
+ "body": "Look, I have spent decades up on stages and holed up in clinics handing this stuff over to players who actually want to go deeper into the Ways of Gristle.
The techniques in the Vault are the ones folks have asked me about backstage more times than I can count , in the deep and abiding Ways of Gristle.
The chicken picking. The chord substitutions. The rig. How to play outside without sounding like you just tumbled down a flight of stairs mid-solo.
It has all been compiled into a 12-page reference PDF so you can keep it propped open while you watch, I can dig it. And the whole thing is free, because the real payment is you actually using it instead of letting it gather dust in some forgotten browser tab.
Give your People of the Gristle Night the real thing. They will stick around. We ride!
Greg Koch
",
+ "pullquote_line1": "This is not a teaser.",
+ "pullquote_line2": "It is the full stash."
+ }
+ },
+ "faq": {
+ "type": "vault-faq",
+ "blocks": {
+ "q1": {
+ "type": "qa",
+ "settings": {
+ "icon": "ti-circle-check",
+ "question": "Is this actually free?",
+ "answer": "Yes. All eight videos and the PDF are free. You will be added to Greg’s email list where he sends new content, show dates, and gear news. You can leave anytime."
+ }
+ },
+ "q2": {
+ "type": "qa",
+ "settings": {
+ "icon": "ti-circle-check",
+ "question": "Who is this for?",
+ "answer": "Guitar players who want to go deeper than pentatonic noodling. Whether you are into chicken picking, jazz harmony, or just want to understand how Greg gets that tone, there is something in here for you."
+ }
+ },
+ "q3": {
+ "type": "qa",
+ "settings": {
+ "icon": "ti-circle-check",
+ "question": "What happens after I sign up?",
+ "answer": "You will get an email with access to all 8 videos and a download link for the PDF. After that you will receive occasional emails from Greg with new content, show dates, and gear news. Unsubscribe anytime."
+ }
+ },
+ "q4": {
+ "type": "qa",
+ "settings": {
+ "icon": "ti-circle-check",
+ "question": "Is this the same as the Patreon?",
+ "answer": "Different thing entirely. The Patreon has lessons, backing tracks and more as an ongoing paid membership. The Vault is a standalone free resource. No overlap and nothing to buy on the other side."
+ }
+ }
+ },
+ "block_order": [
+ "q1",
+ "q2",
+ "q3",
+ "q4"
+ ],
+ "settings": {
+ "show_top_divider": true,
+ "eyebrow": "Common questions",
+ "heading": "WAIT. WHATS THE DEAL?"
+ }
+ },
+ "ps": {
+ "type": "vault-ps",
+ "settings": {
+ "label": "P.S.",
+ "body": "If you scrolled straight to the bottom, here is the short version. Greg built a vault of 8 full-length guitar videos covering chicken picking, Travis picking, chord vocabulary, outside playing, his full live rig, blues soloing concepts, and note-for-note breakdowns of two originals. Plus a 12-page PDF that ties it all together. All of it is free. Put in your email above and he will send it to you.
"
+ }
+ },
+ "final": {
+ "type": "vault-final-cta",
+ "settings": {
+ "show_top_divider": true,
+ "button_label": "GET INSTANT ACCESS →",
+ "button_link": "",
+ "consent": "Free. No credit card. Unsubscribe anytime."
+ }
+ }
+ },
+ "order": [
+ "hero",
+ "form",
+ "stash",
+ "bridge",
+ "cta",
+ "letter",
+ "faq",
+ "ps",
+ "final"
+ ]
+}
diff --git a/templates/page.vault.json b/templates/page.vault.json
new file mode 100644
index 00000000000..cc091086695
--- /dev/null
+++ b/templates/page.vault.json
@@ -0,0 +1,139 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
+{
+ "sections": {
+ "main": {
+ "type": "main-page",
+ "disabled": true,
+ "settings": {
+ "padding_top": 28,
+ "padding_bottom": 28
+ }
+ },
+ "gk_vault_optin": {
+ "type": "gk-vault-optin",
+ "blocks": {
+ "item_chicken": {
+ "type": "vault_item",
+ "settings": {
+ "title": "Chicken Picking Masterclass",
+ "description": "The complete breakdown of Greg's most requested technique, from the thumb-and-finger foundation to full hybrid picking integration.",
+ "bonus": false
+ }
+ },
+ "item_travis": {
+ "type": "vault_item",
+ "settings": {
+ "title": "Travis Picking Deep Dive",
+ "description": "How Greg learned it with a flat pick instead of a thumb pick, and how to build the boom-chuck foundation without rushing.",
+ "bonus": false
+ }
+ },
+ "item_chords": {
+ "type": "vault_item",
+ "settings": {
+ "title": "Chord Vocabulary Breakdown",
+ "description": "The James Burton ninth bend, Robben Ford chord melody, artificial harmonics, the Allan Holdsworth minor 11th, the Steely Dan sus chord.",
+ "bonus": false
+ }
+ },
+ "item_outside": {
+ "type": "vault_item",
+ "settings": {
+ "title": "Outside Playing & Harmonic Color",
+ "description": "Pentatonic substitutions, chromatic approaches, diminished arpeggios, the tritone sub, and the Mahavishnu scale.",
+ "bonus": false
+ }
+ },
+ "item_tone": {
+ "type": "vault_item",
+ "settings": {
+ "title": "Tone & Gear Rundown",
+ "description": "The full live rig: Reverend signature guitars, Fishman Fluence pickups, the Tone King Royalist, and every pedal on the board.",
+ "bonus": false
+ }
+ },
+ "item_blues": {
+ "type": "vault_item",
+ "settings": {
+ "title": "Blues Soloing Concepts",
+ "description": "Playing over changes, the Jeff Beck whammy and harmonic techniques, self-accompanied blues, the Allman Brothers approach.",
+ "bonus": false
+ }
+ },
+ "item_tonus": {
+ "type": "vault_item",
+ "settings": {
+ "title": "Song Breakdown: Tonus Diabolicus",
+ "description": "Note-for-note construction of a signature composition and where every idea came from.",
+ "bonus": false
+ }
+ },
+ "item_spank": {
+ "type": "vault_item",
+ "settings": {
+ "title": "Song Breakdown: Spank It",
+ "description": "The 1988 riff that became a cornerstone, with exact right-hand mechanics.",
+ "bonus": false
+ }
+ },
+ "item_pdf": {
+ "type": "vault_item",
+ "settings": {
+ "title": "The Gristle Vault Master Reference PDF",
+ "description": "A 12-page compiled reference covering every technique, concept, voicing, gear spec, and principle from all 8 videos. Built to keep open while you watch.",
+ "bonus": true
+ }
+ }
+ },
+ "block_order": [
+ "item_chicken",
+ "item_travis",
+ "item_chords",
+ "item_outside",
+ "item_tone",
+ "item_blues",
+ "item_tonus",
+ "item_spank",
+ "item_pdf"
+ ],
+ "settings": {
+ "kicker": "The Gristle Vault",
+ "heading": "Access the Gristle Vault",
+ "highlight_text": "Gristle Vault",
+ "subhead": "8 videos. 4+ hours. One PDF that ties it all together. All of it free.",
+ "italic_line": "Every secret Greg probably shouldn't have shared.",
+ "stat_1_num": "8",
+ "stat_1_label": "Video Lessons",
+ "stat_2_num": "4+",
+ "stat_2_label": "Hours",
+ "stat_3_num": "1",
+ "stat_3_label": "Master PDF",
+ "greg_photo": "shopify://shop_images/vault.png",
+ "form_kicker": "Free Instant Access",
+ "form_heading": "Get the Vault",
+ "consent_label": "I agree to receiving marketing and promotional materials from Greg Koch.",
+ "submit_label": "GET INSTANT ACCESS",
+ "success_message": "Check your email for vault access.",
+ "klaviyo_api_key": "XBDmgJ",
+ "klaviyo_list_id": "REPLACE_WITH_VAULT_LIST_ID",
+ "inside_kicker": "The Full Stash",
+ "inside_heading": "What's Inside the Vault",
+ "inside_intro": "Not one throwaway lesson. A full stash of Greg's core techniques, tone ideas, harmonic concepts, gear breakdowns, and real-world playing insights from multiple full-length sessions.",
+ "closing_line": "Total value: 4+ hours of instruction, 8 sessions, 1 reference guide. All free.",
+ "closing_highlight": "All free."
+ }
+ }
+ },
+ "order": [
+ "main",
+ "gk_vault_optin"
+ ]
+}
diff --git a/templates/product.json b/templates/product.json
index 62fb0ab6af7..3f3ffb4c96c 100644
--- a/templates/product.json
+++ b/templates/product.json
@@ -1,3 +1,12 @@
+/*
+ * ------------------------------------------------------------
+ * IMPORTANT: The contents of this file are auto-generated.
+ *
+ * This file may be updated by the Shopify admin theme editor
+ * or related systems. Please exercise caution as any changes
+ * made to this file may be overwritten.
+ * ------------------------------------------------------------
+ */
{
"sections": {
"main": {
@@ -11,7 +20,8 @@
}
},
"title": {
- "type": "title"
+ "type": "title",
+ "settings": {}
},
"caption": {
"type": "text",
@@ -21,16 +31,19 @@
}
},
"price": {
- "type": "price"
+ "type": "price",
+ "settings": {}
},
"variant_picker": {
"type": "variant_picker",
"settings": {
- "picker_type": "button"
+ "picker_type": "button",
+ "swatch_shape": "circle"
}
},
"quantity_selector": {
- "type": "quantity_selector"
+ "type": "quantity_selector",
+ "settings": {}
},
"buy_buttons": {
"type": "buy_buttons",
@@ -40,7 +53,8 @@
}
},
"description": {
- "type": "description"
+ "type": "description",
+ "settings": {}
},
"collapsible-row-0": {
"type": "collapsible_tab",
@@ -102,106 +116,34 @@
],
"settings": {
"enable_sticky_info": true,
- "gallery_layout": "stacked",
+ "color_scheme": "",
"media_size": "large",
"constrain_to_viewport": true,
+ "media_fit": "contain",
+ "gallery_layout": "stacked",
"mobile_thumbnails": "hide",
+ "media_position": "left",
+ "image_zoom": "lightbox",
"hide_variants": true,
"enable_video_looping": false,
"padding_top": 36,
"padding_bottom": 12
}
},
- "image-with-text": {
- "type": "image-with-text",
- "blocks": {
- "image-with-text-0": {
- "type": "heading",
- "settings": {
- "heading": "Image with text",
- "heading_size": "h1"
- }
- },
- "image-with-text-1": {
- "type": "text",
- "settings": {
- "text": "Pair text with an image to focus on your chosen product, collection, or blog post. Add details on availability, style, or even provide a review.<\/p>",
- "text_style": "body"
- }
- }
- },
- "block_order": [
- "image-with-text-0",
- "image-with-text-1"
- ],
- "settings": {
- "height": "small",
- "desktop_image_width": "medium",
- "layout": "text_first",
- "desktop_content_position": "top",
- "desktop_content_alignment": "left",
- "content_layout": "no-overlap",
- "color_scheme": "scheme-2",
- "mobile_content_alignment": "left",
- "padding_top": 36,
- "padding_bottom": 36
- }
- },
- "multicolumn": {
- "type": "multicolumn",
- "blocks": {
- "column-0": {
- "type": "column",
- "settings": {
- "title": "Free Shipping",
- "text": "
Pair text with an image to focus on your chosen product, collection, or blog post. Add details on availability, style, or even provide a review.<\/p>",
- "link_label": "",
- "link": ""
- }
- },
- "column-1": {
- "type": "column",
- "settings": {
- "title": "Hassle-Free Exchanges",
- "text": "
Pair text with an image to focus on your chosen product, collection, or blog post. Add details on availability, style, or even provide a review.<\/p>",
- "link_label": "",
- "link": ""
- }
- }
- },
- "block_order": [
- "column-0",
- "column-1"
- ],
- "settings": {
- "title": "",
- "heading_size": "h1",
- "image_width": "full",
- "image_ratio": "adapt",
- "columns_desktop": 2,
- "column_alignment": "left",
- "background_style": "none",
- "button_label": "",
- "button_link": "",
- "swipe_on_mobile": false,
- "color_scheme": "scheme-1",
- "columns_mobile": "1",
- "padding_top": 36,
- "padding_bottom": 36
- }
- },
"related-products": {
"type": "related-products",
"settings": {
"heading": "You may also like",
"heading_size": "h2",
+ "products_to_show": 4,
"columns_desktop": 4,
+ "columns_mobile": "2",
"color_scheme": "scheme-1",
"image_ratio": "square",
+ "image_shape": "default",
"show_secondary_image": true,
"show_vendor": false,
"show_rating": false,
- "columns_mobile": "2",
"padding_top": 36,
"padding_bottom": 28
}
@@ -209,8 +151,6 @@
},
"order": [
"main",
- "image-with-text",
- "multicolumn",
"related-products"
]
}