diff --git a/assets/section-tt-event-header.css b/assets/section-tt-event-header.css new file mode 100644 index 00000000000..f3972f89c27 --- /dev/null +++ b/assets/section-tt-event-header.css @@ -0,0 +1,218 @@ +/* + * section-tt-event-header.css + * Trainers Travel — event collection page header + */ + +.tt-eh { + --tt-navy: #1A1A2E; + --tt-gold: #C8A96E; + --tt-off-white: #F2F0EB; + --tt-mid: #4a4a6a; + --tt-border: #d8d4cc; + + background: var(--tt-navy); + border-bottom: 2px solid var(--tt-gold); + color: var(--tt-off-white); +} + +.tt-eh__inner { + max-width: 1080px; + margin: 0 auto; + padding: 32px 32px 36px; +} + +/* Back link + badge row */ +.tt-eh__top { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; + flex-wrap: wrap; +} + +.tt-eh__back { + font-size: 0.8rem; + color: rgba(242, 240, 235, 0.55); + text-decoration: none; + transition: color 0.15s; +} +.tt-eh__back:hover { color: var(--tt-gold); } + +/* Status badges — same system as homepage cards */ +.tt-eh__badge { + display: inline-block; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + padding: 3px 8px; + border-radius: 3px; +} + +.tt-eh__badge--available { + background: rgba(39, 174, 96, 0.18); + color: #58d68d; +} +.tt-eh__badge--selling-fast { + background: rgba(200, 169, 110, 0.2); + color: var(--tt-gold); +} +.tt-eh__badge--coming-soon { + background: rgba(255, 255, 255, 0.08); + color: rgba(242, 240, 235, 0.6); +} +.tt-eh__badge--sold-out { + background: rgba(192, 57, 43, 0.18); + color: #e74c3c; +} + +/* Title */ +.tt-eh__title { + font-size: clamp(1.8rem, 4.5vw, 3rem); + font-weight: 800; + color: var(--tt-off-white); + margin: 0 0 0.4rem; + letter-spacing: -0.02em; + line-height: 1.1; +} + +/* Date / city meta */ +.tt-eh__meta { + font-size: 0.88rem; + color: rgba(242, 240, 235, 0.55); + margin: 0 0 1.25rem; +} + +/* Collection description — written in Shopify admin */ +.tt-eh__description { + font-size: 0.92rem; + color: rgba(242, 240, 235, 0.75); + line-height: 1.65; + max-width: 680px; + margin-bottom: 1.5rem; +} + +.tt-eh__description p { margin: 0 0 0.75em; } +.tt-eh__description p:last-child { margin-bottom: 0; } +.tt-eh__description strong { color: var(--tt-off-white); } +.tt-eh__description a { color: var(--tt-gold); text-decoration: none; } +.tt-eh__description a:hover { text-decoration: underline; } + +/* Bottom bar */ +.tt-eh__footer-bar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + flex-wrap: wrap; + padding-top: 1rem; + border-top: 1px solid rgba(255, 255, 255, 0.08); +} + +.tt-eh__pricing-note { + font-size: 0.88rem; + color: rgba(242, 240, 235, 0.65); + margin: 0; +} +.tt-eh__pricing-note strong { + color: var(--tt-off-white); + font-size: 1rem; +} + +.tt-eh__rooms-count { + font-size: 0.78rem; + color: rgba(242, 240, 235, 0.4); + margin: 0; +} + +/* ─── Coming soon body ───────────────────────────────────── */ +.tt-eh__coming-soon-body { + margin-top: 1.5rem; + padding-top: 1.5rem; + border-top: 1px solid rgba(255, 255, 255, 0.08); +} + +.tt-eh__cs-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 24px 40px; + margin-bottom: 2rem; +} + +@media (max-width: 560px) { + .tt-eh__cs-grid { + grid-template-columns: 1fr; + gap: 20px; + } +} + +.tt-eh__cs-label { + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--tt-gold); + margin: 0 0 0.75rem; +} + +.tt-eh__cs-list { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 8px; +} + +.tt-eh__cs-list li { + font-size: 0.88rem; + color: rgba(242, 240, 235, 0.7); + line-height: 1.45; + padding-left: 14px; + position: relative; +} + +.tt-eh__cs-list li::before { + content: '—'; + position: absolute; + left: 0; + color: var(--tt-gold); + opacity: 0.6; + font-size: 0.75rem; + top: 0.1em; +} + +.tt-eh__cs-cta { + padding-top: 1.5rem; + border-top: 1px solid rgba(255, 255, 255, 0.06); + display: flex; + align-items: center; + gap: 20px; + flex-wrap: wrap; +} + +.tt-eh__cs-cta p { + font-size: 0.85rem; + color: rgba(242, 240, 235, 0.45); + margin: 0; + flex: 1; + min-width: 180px; +} + +.tt-eh__cs-btn { + display: inline-block; + font-size: 0.82rem; + font-weight: 700; + color: var(--tt-gold); + text-decoration: none; + border: 1px solid rgba(200, 169, 110, 0.35); + padding: 8px 16px; + border-radius: 4px; + white-space: nowrap; + transition: border-color 0.15s, background 0.15s; +} + +.tt-eh__cs-btn:hover { + border-color: var(--tt-gold); + background: rgba(200, 169, 110, 0.08); +} diff --git a/assets/section-tt-home.css b/assets/section-tt-home.css new file mode 100644 index 00000000000..b4a6a49e219 --- /dev/null +++ b/assets/section-tt-home.css @@ -0,0 +1,400 @@ +/* + * section-tt-home.css + * Trainers Travel — multi-event homepage + * + * The tt-home section renders its own header, so we hide the Dawn global + * header/announcement bar on the homepage (template-index body class). + */ + +.template-index .shopify-section-group-header-group { + display: none !important; +} + +/* ─── Tokens ──────────────────────────────────────────────── */ +.tt-home { + --tt-navy: #1A1A2E; + --tt-gold: #C8A96E; + --tt-off-white: #F2F0EB; + --tt-mid: #4a4a6a; + --tt-border: #d8d4cc; + + --tt-max-w: 1080px; + --tt-pad-h: 32px; + + font-family: inherit; + color: var(--tt-navy); + background: var(--tt-off-white); +} + +.tt-home *, +.tt-home *::before, +.tt-home *::after { + box-sizing: border-box; +} + +/* ─── Container ───────────────────────────────────────────── */ +.tt-home__container { + max-width: var(--tt-max-w); + margin: 0 auto; + padding: 0 var(--tt-pad-h); +} + +/* ─── Shared ──────────────────────────────────────────────── */ +.tt-home__section-title { + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--tt-gold); + margin: 0 0 1.25rem; +} + +/* ─── 1. HEADER ───────────────────────────────────────────── */ +.tt-home__header { + background: var(--tt-navy); + padding: 14px var(--tt-pad-h); +} + +.tt-home__header-inner { + max-width: var(--tt-max-w); + margin: 0 auto; + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + flex-wrap: wrap; +} + +.tt-home__wordmark { + font-size: 1rem; + font-weight: 700; + letter-spacing: 0.02em; + color: var(--tt-off-white); +} + +.tt-home__header-email { + font-size: 0.8rem; + color: var(--tt-gold); + text-decoration: none; + opacity: 0.85; + transition: opacity 0.15s; +} +.tt-home__header-email:hover { opacity: 1; } + +/* ─── 2. HERO ─────────────────────────────────────────────── */ +.tt-home__hero { + background: var(--tt-navy); + padding: 64px 0 60px; + border-bottom: 2px solid var(--tt-gold); +} + +.tt-home__hero-heading { + font-size: clamp(2.4rem, 5vw, 4rem); + font-weight: 800; + color: var(--tt-off-white); + margin: 0 0 1rem; + line-height: 1.08; + letter-spacing: -0.03em; + max-width: 680px; +} + +.tt-home__hero-sub { + font-size: 1.05rem; + color: rgba(242, 240, 235, 0.6); + margin: 0 0 2rem; + max-width: 540px; + line-height: 1.6; +} + +.tt-home__hero-actions { + display: flex; + align-items: center; + gap: 20px; + flex-wrap: wrap; +} + +.tt-home__hero-proof { + font-size: 0.8rem; + color: rgba(242, 240, 235, 0.35); +} + +/* ─── Buttons ─────────────────────────────────────────────── */ +.tt-home__btn { + display: inline-block; + padding: 11px 22px; + font-size: 0.88rem; + font-weight: 700; + border-radius: 4px; + cursor: pointer; + text-decoration: none; + border: none; + line-height: 1; + transition: background 0.15s, color 0.15s, opacity 0.15s; + white-space: nowrap; +} + +.tt-home__btn--primary { + background: var(--tt-gold); + color: var(--tt-navy); +} +.tt-home__btn--primary:hover { background: #d4b87c; } + +/* ─── 3. EVENTS GRID ──────────────────────────────────────── */ +.tt-home__events { + background: var(--tt-off-white); + padding: 40px 0; + border-bottom: 1px solid var(--tt-border); +} + +.tt-home__events-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); + gap: 16px; +} + +/* Event card */ +.tt-home__event-card { + display: flex; + flex-direction: column; + background: #fff; + border: 1px solid var(--tt-border); + border-radius: 6px; + text-decoration: none; + color: inherit; + overflow: hidden; + transition: border-color 0.15s, box-shadow 0.15s; +} + +.tt-home__event-card:hover { + border-color: var(--tt-gold); + box-shadow: 0 2px 12px rgba(26, 26, 46, 0.08); +} + +.tt-home__event-card--sold-out { + opacity: 0.65; +} + +.tt-home__event-card-top { + padding: 12px 14px 0; +} + +/* Status badges */ +.tt-home__event-badge { + display: inline-block; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + padding: 3px 8px; + border-radius: 3px; +} + +.tt-home__event-badge--available { + background: rgba(39, 174, 96, 0.12); + color: #1e8449; +} + +.tt-home__event-badge--selling-fast { + background: rgba(200, 169, 110, 0.18); + color: #8a6a2a; +} + +.tt-home__event-badge--coming-soon { + background: rgba(74, 74, 106, 0.1); + color: var(--tt-mid); +} + +.tt-home__event-badge--sold-out { + background: rgba(192, 57, 43, 0.1); + color: #922b21; +} + +.tt-home__event-card-body { + padding: 12px 14px 10px; + flex: 1; +} + +.tt-home__event-card-title { + font-size: 1rem; + font-weight: 700; + color: var(--tt-navy); + margin: 0 0 4px; + line-height: 1.25; +} + +.tt-home__event-card-meta { + font-size: 0.78rem; + color: var(--tt-mid); + margin: 0 0 8px; +} + +.tt-home__event-card-desc { + font-size: 0.82rem; + color: var(--tt-mid); + margin: 0; + line-height: 1.5; +} + +.tt-home__event-card-footer { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 10px 14px 14px; + border-top: 1px solid #f0ede6; + margin-top: auto; +} + +.tt-home__event-card-price { + font-size: 0.95rem; + font-weight: 700; + color: var(--tt-navy); +} + +.tt-home__event-card-price-note { + font-size: 0.72rem; + font-weight: 400; + color: var(--tt-mid); +} + +.tt-home__event-card-cta { + font-size: 0.78rem; + font-weight: 700; + color: var(--tt-gold); + white-space: nowrap; +} + +/* Empty state */ +.tt-home__events-empty { + padding: 40px 0; + font-size: 0.9rem; + color: var(--tt-mid); + line-height: 1.6; +} + +.tt-home__events-empty a { + color: var(--tt-gold); + text-decoration: none; +} +.tt-home__events-empty a:hover { text-decoration: underline; } + +/* ─── 4. FAQ ──────────────────────────────────────────────── */ +.tt-home__faq { + background: var(--tt-off-white); + padding: 40px 0; + border-bottom: 1px solid var(--tt-border); +} + +.tt-home__faq-list { + margin: 0; + padding: 0; +} + +.tt-home__faq-item { + border-bottom: 1px solid var(--tt-border); +} + +.tt-home__faq-item:first-child { + border-top: 1px solid var(--tt-border); +} + +.tt-home__faq-q { margin: 0; } + +.tt-home__faq-btn { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 15px 0; + font-size: 0.9rem; + font-weight: 600; + color: var(--tt-navy); + background: none; + border: none; + cursor: pointer; + text-align: left; + gap: 12px; +} +.tt-home__faq-btn:hover { color: var(--tt-gold); } + +.tt-home__faq-icon { + flex-shrink: 0; + width: 16px; + height: 16px; + position: relative; +} + +.tt-home__faq-icon::before, +.tt-home__faq-icon::after { + content: ''; + position: absolute; + background: currentColor; + border-radius: 1px; + transition: transform 0.2s, opacity 0.2s; +} + +.tt-home__faq-icon::before { + top: 50%; left: 0; right: 0; + height: 2px; + transform: translateY(-50%); +} + +.tt-home__faq-icon::after { + top: 0; bottom: 0; left: 50%; + width: 2px; + transform: translateX(-50%); +} + +.tt-home__faq-btn[aria-expanded="true"] .tt-home__faq-icon::after { + opacity: 0; + transform: translateX(-50%) rotate(90deg); +} + +.tt-home__faq-a { + padding: 0 0 16px; + font-size: 0.88rem; + color: var(--tt-mid); + line-height: 1.6; + margin: 0; +} + +.tt-home__faq-a a { + color: var(--tt-gold); + text-decoration: none; +} +.tt-home__faq-a a:hover { text-decoration: underline; } + +/* ─── 5. FOOTER ───────────────────────────────────────────── */ +.tt-home__footer { + background: var(--tt-navy); + padding: 28px 0; +} + +.tt-home__footer-inner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + flex-wrap: wrap; +} + +.tt-home__footer-tagline { + font-size: 0.82rem; + color: rgba(242, 240, 235, 0.45); + margin: 0; +} + +.tt-home__footer-links { + display: flex; + align-items: center; + gap: 16px; + flex-wrap: wrap; +} + +.tt-home__footer-link { + font-size: 0.82rem; + color: rgba(242, 240, 235, 0.6); + text-decoration: none; + transition: color 0.15s; +} +.tt-home__footer-link:hover { color: var(--tt-gold); } diff --git a/assets/section-tt-sponsored.css b/assets/section-tt-sponsored.css new file mode 100644 index 00000000000..d427ef9cf20 --- /dev/null +++ b/assets/section-tt-sponsored.css @@ -0,0 +1,185 @@ +/* + * section-tt-sponsored.css + * Trainers Travel — Sponsored Players page + */ + +.tt-sp { + --tt-navy: #1A1A2E; + --tt-gold: #C8A96E; + --tt-off-white: #F2F0EB; + --tt-mid: #4a4a6a; + --tt-border: #d8d4cc; + --tt-max-w: 860px; + --tt-pad-h: 24px; + + background: var(--tt-off-white); + color: var(--tt-navy); + font-family: inherit; +} + +.tt-sp *, +.tt-sp *::before, +.tt-sp *::after { + box-sizing: border-box; +} + +.tt-sp__container { + max-width: var(--tt-max-w); + margin: 0 auto; + padding: 0 var(--tt-pad-h); +} + +/* ─── Hero ───────────────────────────────────────────────── */ +.tt-sp__hero { + background: var(--tt-navy); + padding: 48px 0 40px; + border-bottom: 2px solid var(--tt-gold); +} + +.tt-sp__eyebrow { + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--tt-gold); + margin: 0 0 0.5rem; +} + +.tt-sp__heading { + font-size: clamp(1.8rem, 4vw, 2.8rem); + font-weight: 800; + color: var(--tt-off-white); + margin: 0 0 0.6rem; + letter-spacing: -0.02em; + line-height: 1.1; +} + +.tt-sp__sub { + font-size: 0.92rem; + color: rgba(242, 240, 235, 0.6); + margin: 0; + max-width: 480px; +} + +/* ─── Player grid ────────────────────────────────────────── */ +.tt-sp__grid-wrap { + padding: 40px 0; +} + +.tt-sp__grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); + gap: 20px; +} + +.tt-sp__card { + background: #fff; + border: 1px solid var(--tt-border); + border-radius: 6px; + overflow: hidden; + display: flex; + flex-direction: column; +} + +/* ─── Avatar ─────────────────────────────────────────────── */ +.tt-sp__avatar { + width: 100%; + aspect-ratio: 1; + overflow: hidden; + background: var(--tt-navy); + display: flex; + align-items: center; + justify-content: center; +} + +.tt-sp__avatar img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.tt-sp__avatar--placeholder { + background: var(--tt-navy); +} + +.tt-sp__avatar--placeholder span { + font-size: 3rem; + font-weight: 800; + color: var(--tt-gold); + line-height: 1; +} + +/* ─── Card body ──────────────────────────────────────────── */ +.tt-sp__card-body { + padding: 18px 18px 20px; + display: flex; + flex-direction: column; + gap: 4px; + flex: 1; +} + +.tt-sp__player-name { + font-size: 1rem; + font-weight: 700; + color: var(--tt-navy); + margin: 0; +} + +.tt-sp__player-handle { + font-size: 0.8rem; + color: var(--tt-gold); + margin: 0; + font-weight: 600; +} + +.tt-sp__player-bio { + font-size: 0.82rem; + color: var(--tt-mid); + margin: 6px 0 0; + line-height: 1.5; +} + +.tt-sp__player-link { + display: inline-block; + margin-top: 12px; + font-size: 0.82rem; + font-weight: 700; + color: var(--tt-navy); + text-decoration: none; + border: 1px solid var(--tt-navy); + padding: 6px 14px; + border-radius: 3px; + align-self: flex-start; + transition: background 0.15s, color 0.15s; +} + +.tt-sp__player-link:hover { + background: var(--tt-navy); + color: var(--tt-off-white); +} + +/* ─── Empty state ────────────────────────────────────────── */ +.tt-sp__empty { + padding: 60px 0; + text-align: center; + font-size: 0.92rem; + color: var(--tt-mid); +} + +/* ─── Footer note ────────────────────────────────────────── */ +.tt-sp__footer-note { + border-top: 1px solid var(--tt-border); + padding: 28px 0; + font-size: 0.82rem; + color: var(--tt-mid); +} + +.tt-sp__footer-note a { + color: var(--tt-gold); + text-decoration: none; +} + +.tt-sp__footer-note a:hover { + text-decoration: underline; +} diff --git a/assets/trainers-travel-brand.css b/assets/trainers-travel-brand.css new file mode 100644 index 00000000000..a3dc61acbd9 --- /dev/null +++ b/assets/trainers-travel-brand.css @@ -0,0 +1,437 @@ +/* ============================================================ + TRAINERS TRAVEL — BRAND STYLESHEET + Navy #1A1A2E | Gold #C8A96E | Off-white #F2F0EB + Headings: Playfair Display | Body: DM Sans + ============================================================ */ + +/* ——— Brand Tokens ——————————————————————————————————————— */ +:root { + --tt-navy: #1A1A2E; + --tt-navy-mid: #252545; + --tt-navy-dark: #0F0F1E; + --tt-gold: #C8A96E; + --tt-gold-light: #D9BF8F; + --tt-gold-dark: #A88B4E; + --tt-offwhite: #F2F0EB; + --tt-offwhite-dim: rgba(242, 240, 235, 0.65); + --tt-gold-line: rgba(200, 169, 110, 0.22); +} + +/* ——— Color Scheme Overrides ————————————————————————————— */ +/* scheme-1 (default / :root) — Navy primary */ +:root, +.color-scheme-1 { + --color-background: 26, 26, 46; + --gradient-background: #1A1A2E; + --color-foreground: 242, 240, 235; + --color-background-contrast: 37, 37, 69; + --color-shadow: 10, 10, 18; + --color-button: 200, 169, 110; + --color-button-text: 26, 26, 46; + --color-secondary-button: 26, 26, 46; + --color-secondary-button-text: 200, 169, 110; + --color-link: 200, 169, 110; + --color-badge-foreground: 26, 26, 46; + --color-badge-background: 200, 169, 110; + --color-badge-border: 200, 169, 110; + --payment-terms-background-color: rgb(26, 26, 46); +} + +/* scheme-2 — Mid-navy (used for cards) */ +.color-scheme-2 { + --color-background: 37, 37, 69; + --gradient-background: #252545; + --color-foreground: 242, 240, 235; + --color-background-contrast: 50, 50, 90; + --color-shadow: 10, 10, 18; + --color-button: 200, 169, 110; + --color-button-text: 26, 26, 46; + --color-secondary-button: 37, 37, 69; + --color-secondary-button-text: 200, 169, 110; + --color-link: 200, 169, 110; + --color-badge-foreground: 242, 240, 235; + --color-badge-background: 37, 37, 69; + --color-badge-border: 200, 169, 110; + --payment-terms-background-color: rgb(37, 37, 69); +} + +/* scheme-3 — Deep navy accent */ +.color-scheme-3 { + --color-background: 30, 30, 53; + --gradient-background: #1E1E35; + --color-foreground: 242, 240, 235; + --color-background-contrast: 45, 45, 75; + --color-shadow: 10, 10, 18; + --color-button: 200, 169, 110; + --color-button-text: 26, 26, 46; + --color-secondary-button: 30, 30, 53; + --color-secondary-button-text: 200, 169, 110; + --color-link: 200, 169, 110; + --color-badge-foreground: 242, 240, 235; + --color-badge-background: 30, 30, 53; + --color-badge-border: 200, 169, 110; + --payment-terms-background-color: rgb(30, 30, 53); +} + +/* scheme-4 — Darkest navy */ +.color-scheme-4 { + --color-background: 15, 15, 30; + --gradient-background: #0F0F1E; + --color-foreground: 242, 240, 235; + --color-background-contrast: 26, 26, 46; + --color-shadow: 0, 0, 0; + --color-button: 200, 169, 110; + --color-button-text: 15, 15, 30; + --color-secondary-button: 15, 15, 30; + --color-secondary-button-text: 200, 169, 110; + --color-link: 200, 169, 110; + --color-badge-foreground: 242, 240, 235; + --color-badge-background: 15, 15, 30; + --color-badge-border: 200, 169, 110; + --payment-terms-background-color: rgb(15, 15, 30); +} + +/* scheme-5 — Gold accent (sale badges, CTAs) */ +.color-scheme-5 { + --color-background: 200, 169, 110; + --gradient-background: #C8A96E; + --color-foreground: 26, 26, 46; + --color-background-contrast: 168, 139, 78; + --color-shadow: 10, 10, 18; + --color-button: 26, 26, 46; + --color-button-text: 200, 169, 110; + --color-secondary-button: 200, 169, 110; + --color-secondary-button-text: 26, 26, 46; + --color-link: 26, 26, 46; + --color-badge-foreground: 26, 26, 46; + --color-badge-background: 200, 169, 110; + --color-badge-border: 26, 26, 46; + --payment-terms-background-color: rgb(200, 169, 110); +} + +/* ——— Font Overrides ————————————————————————————————————— */ +/* Google Fonts take precedence over Shopify CDN fallbacks */ +:root { + --font-heading-family: 'Playfair Display', Georgia, 'Times New Roman', serif; + --font-heading-style: normal; + --font-heading-weight: 700; + --font-body-family: 'DM Sans', 'Helvetica Neue', Arial, sans-serif; + --font-body-style: normal; + --font-body-weight: 400; + --font-body-weight-bold: 700; +} + +/* ——— Typography ————————————————————————————————————————— */ +h1, h2, h3, h4, h5, h6, +.h0, .h1, .h2, .h3, .h4, .h5, .hxl, .hxxl { + font-family: var(--font-heading-family); + font-weight: var(--font-heading-weight); + letter-spacing: 0.01em; +} + +/* Subtle gold accent on primary display headings */ +.banner__heading, +.section-heading { + color: rgb(var(--color-foreground)); +} + +/* ——— Buttons ———————————————————————————————————————————— */ +.button, +.button--primary { + background-color: var(--tt-gold); + color: var(--tt-navy); + border-color: var(--tt-gold); + font-family: var(--font-body-family); + font-weight: 600; + letter-spacing: 0.1em; + text-transform: uppercase; + font-size: 1.2rem; + transition: background-color 0.2s ease, border-color 0.2s ease; +} + +.button:hover, +.button--primary:hover { + background-color: var(--tt-gold-light); + border-color: var(--tt-gold-light); + color: var(--tt-navy); +} + +.button--secondary { + border-color: var(--tt-gold); + color: var(--tt-gold); + background-color: transparent; + transition: background-color 0.2s ease; +} + +.button--secondary:hover { + background-color: rgba(200, 169, 110, 0.12); + color: var(--tt-gold-light); +} + +/* ——— Links ——————————————————————————————————————————————— */ +a { + color: var(--tt-gold); +} + +a:hover { + color: var(--tt-gold-light); +} + +/* ——— Header / Navigation ————————————————————————————————— */ +.header, +.header-wrapper { + background-color: var(--tt-navy); + border-bottom: 1px solid var(--tt-gold-line); +} + +.header__heading-link, +.header__menu-item { + color: var(--tt-offwhite); +} + +.header__menu-item:hover, +.header__menu-item:focus { + color: var(--tt-gold); +} + +/* ——— Hero Banner ————————————————————————————————————————— */ +/* + Navy base with repeating gold geometric diamond grid. + The SVG tile (80×80px) contains: + - A diamond outline (stroke gold @ 12% opacity) + - Subtle gold dots at diamond center and tile corners (15% opacity) + A soft radial gradient adds depth at the viewport center. + The background sits behind .banner__media — when a store owner + adds an image via the editor, it covers the pattern naturally. +*/ +.banner { + background-color: var(--tt-navy); + background-image: + radial-gradient( + ellipse 80% 60% at 50% 50%, + rgba(37, 37, 69, 0.55) 0%, + rgba(26, 26, 46, 0) 70% + ), + url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='80'%3E%3Cpath d='M40 5 L75 40 L40 75 L5 40 Z' fill='none' stroke='%23C8A96E' stroke-opacity='0.12' stroke-width='1'/%3E%3Ccircle cx='40' cy='40' r='2' fill='%23C8A96E' fill-opacity='0.14'/%3E%3Ccircle cx='0' cy='0' r='2' fill='%23C8A96E' fill-opacity='0.14'/%3E%3Ccircle cx='80' cy='0' r='2' fill='%23C8A96E' fill-opacity='0.14'/%3E%3Ccircle cx='0' cy='80' r='2' fill='%23C8A96E' fill-opacity='0.14'/%3E%3Ccircle cx='80' cy='80' r='2' fill='%23C8A96E' fill-opacity='0.14'/%3E%3C/svg%3E"); + background-size: 100% 100%, 80px 80px; + background-repeat: no-repeat, repeat; +} + +/* Gold rule below hero */ +.banner { + box-shadow: 0 3px 0 0 rgba(200, 169, 110, 0.25); +} + +/* Text content box on the hero — subtle glass effect */ +.banner__box { + background-color: rgba(26, 26, 46, 0.72); + border: 1px solid var(--tt-gold-line); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); +} + +/* On desktop transparent variant, remove the box background */ +@media screen and (min-width: 750px) { + .banner--desktop-transparent .banner__box { + background-color: transparent; + border: none; + backdrop-filter: none; + -webkit-backdrop-filter: none; + } +} + +/* Gold decorative line above heading inside banner */ +.banner__box .banner__heading::before { + content: ''; + display: block; + width: 3.2rem; + height: 2px; + background-color: var(--tt-gold); + margin: 0 auto 1.2rem; + opacity: 0.85; +} + +.banner--content-align-left .banner__box .banner__heading::before, +.banner--content-align-mobile-left .banner__box .banner__heading::before { + margin-left: 0; +} + +.banner--content-align-right .banner__box .banner__heading::before, +.banner--content-align-mobile-right .banner__box .banner__heading::before { + margin-right: 0; + margin-left: auto; +} + +/* ——— Cards ——————————————————————————————————————————————— */ +.card-wrapper .card, +.card-wrapper.card { + background-color: var(--tt-navy-mid); + border-color: var(--tt-gold-line); + transition: border-color 0.2s ease, transform 0.2s ease; +} + +.card-wrapper .card:hover, +.card-wrapper.card:hover { + border-color: rgba(200, 169, 110, 0.45); +} + +.card__heading a { + color: var(--tt-offwhite); +} + +.card__heading a:hover { + color: var(--tt-gold); +} + +/* Price */ +.price__regular, +.price__sale { + color: var(--tt-offwhite); +} + +.price__sale { + color: var(--tt-gold); +} + +/* ——— Collection Banner / Hero ———————————————————————————— */ +.collection-hero { + background-color: var(--tt-navy); + border-bottom: 1px solid var(--tt-gold-line); +} + +/* ——— Forms & Inputs ————————————————————————————————————— */ +.field__input, +.select__select, +.customer .field__input { + background-color: var(--tt-navy-mid); + border-color: rgba(200, 169, 110, 0.3); + color: var(--tt-offwhite); +} + +.field__input:focus, +.select__select:focus { + border-color: var(--tt-gold); + box-shadow: 0 0 0 1px var(--tt-gold); + outline: none; +} + +.field__label, +.select__label { + color: var(--tt-offwhite-dim); + background-color: transparent; +} + +/* ——— Footer ——————————————————————————————————————————————— */ +.footer { + background-color: var(--tt-navy-dark); + border-top: 1px solid var(--tt-gold-line); + color: var(--tt-offwhite); +} + +.footer__heading { + color: var(--tt-gold); + font-family: var(--font-heading-family); + letter-spacing: 0.05em; + text-transform: uppercase; + font-size: 1.2rem; +} + +.footer a { + color: var(--tt-offwhite-dim); +} + +.footer a:hover { + color: var(--tt-gold); +} + +/* ——— Cart Drawer / Notification ————————————————————————— */ +.cart-notification, +.cart-drawer { + background-color: var(--tt-navy-mid); + border-color: var(--tt-gold-line); +} + +.cart-notification__heading, +.cart-drawer__heading { + color: var(--tt-offwhite); +} + +/* ——— Predictive Search ——————————————————————————————————— */ +.predictive-search { + background-color: var(--tt-navy-mid); + border-color: var(--tt-gold-line); +} + +.predictive-search__item:hover, +.predictive-search__item:focus { + background-color: rgba(200, 169, 110, 0.08); +} + +/* ——— Menu Drawer (mobile nav) ———————————————————————————— */ +.menu-drawer, +.menu-drawer__navigation { + background-color: var(--tt-navy); +} + +.menu-drawer__menu-item, +.menu-drawer__close-button { + color: var(--tt-offwhite); +} + +.menu-drawer__menu-item:hover { + color: var(--tt-gold); +} + +/* ——— Breadcrumbs ————————————————————————————————————————— */ +.breadcrumb, +.breadcrumb__item { + color: var(--tt-offwhite-dim); +} + +.breadcrumb__item a:hover { + color: var(--tt-gold); +} + +/* ——— Pagination ————————————————————————————————————————— */ +.pagination__item--current { + background-color: var(--tt-gold); + color: var(--tt-navy); + border-color: var(--tt-gold); +} + +.pagination__item:hover:not(.pagination__item--current) { + border-color: var(--tt-gold); + color: var(--tt-gold); +} + +/* ——— Product Page ——————————————————————————————————————— */ +.product__title { + color: var(--tt-offwhite); +} + +.product-form__submit { + background-color: var(--tt-gold); + color: var(--tt-navy); + border-color: var(--tt-gold); +} + +.product-form__submit:hover { + background-color: var(--tt-gold-light); + border-color: var(--tt-gold-light); +} + +/* Variant pills */ +.swatch-input__button--active, +.swatch-input__button:checked + label { + border-color: var(--tt-gold); + color: var(--tt-gold); +} + +/* ——— Responsive adjustments ————————————————————————————— */ +@media screen and (max-width: 749px) { + /* Tighter decorative line on mobile banners */ + .banner__box .banner__heading::before { + width: 2.4rem; + margin-bottom: 0.8rem; + } +} diff --git a/config/settings_data.json b/config/settings_data.json index 0f7a06db992..3d9d40e3b1c 100644 --- a/config/settings_data.json +++ b/config/settings_data.json @@ -6,63 +6,63 @@ "color_schemes": { "scheme-1": { "settings": { - "background": "#FFFFFF", + "background": "#1A1A2E", "background_gradient": "", - "text": "#121212", - "button": "#121212", - "button_label": "#FFFFFF", - "secondary_button_label": "#121212", - "shadow": "#121212" + "text": "#F2F0EB", + "button": "#C8A96E", + "button_label": "#1A1A2E", + "secondary_button_label": "#C8A96E", + "shadow": "#0A0A12" } }, "scheme-2": { "settings": { - "background": "#F3F3F3", + "background": "#252545", "background_gradient": "", - "text": "#121212", - "button": "#121212", - "button_label": "#F3F3F3", - "secondary_button_label": "#121212", - "shadow": "#121212" + "text": "#F2F0EB", + "button": "#C8A96E", + "button_label": "#1A1A2E", + "secondary_button_label": "#C8A96E", + "shadow": "#0A0A12" } }, "scheme-3": { "settings": { - "background": "#242833", + "background": "#1E1E35", "background_gradient": "", - "text": "#FFFFFF", - "button": "#FFFFFF", - "button_label": "#000000", - "secondary_button_label": "#FFFFFF", - "shadow": "#121212" + "text": "#F2F0EB", + "button": "#C8A96E", + "button_label": "#1A1A2E", + "secondary_button_label": "#C8A96E", + "shadow": "#0A0A12" } }, "scheme-4": { "settings": { - "background": "#121212", + "background": "#0F0F1E", "background_gradient": "", - "text": "#FFFFFF", - "button": "#FFFFFF", - "button_label": "#121212", - "secondary_button_label": "#FFFFFF", - "shadow": "#121212" + "text": "#F2F0EB", + "button": "#C8A96E", + "button_label": "#0F0F1E", + "secondary_button_label": "#C8A96E", + "shadow": "#000000" } }, "scheme-5": { "settings": { - "background": "#334FB4", + "background": "#C8A96E", "background_gradient": "", - "text": "#FFFFFF", - "button": "#FFFFFF", - "button_label": "#334FB4", - "secondary_button_label": "#FFFFFF", - "shadow": "#121212" + "text": "#1A1A2E", + "button": "#1A1A2E", + "button_label": "#C8A96E", + "secondary_button_label": "#1A1A2E", + "shadow": "#0A0A12" } } }, - "type_header_font": "assistant_n4", - "heading_scale": 100, - "type_body_font": "assistant_n4", + "type_header_font": "playfair_display_n4", + "heading_scale": 110, + "type_body_font": "dm_sans_n4", "body_scale": 100, "page_width": 1200, "spacing_sections": 0, @@ -93,8 +93,8 @@ "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": 20, "card_corner_radius": 0, "card_shadow_opacity": 0, "card_shadow_horizontal_offset": 0, @@ -104,8 +104,8 @@ "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": 20, "collection_card_corner_radius": 0, "collection_card_shadow_opacity": 0, "collection_card_shadow_horizontal_offset": 0, @@ -115,8 +115,8 @@ "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": 20, "blog_card_corner_radius": 0, "blog_card_shadow_opacity": 0, "blog_card_shadow_horizontal_offset": 0, diff --git a/config/settings_schema.json b/config/settings_schema.json index bcaab5b5d2a..30174cd22b1 100644 --- a/config/settings_schema.json +++ b/config/settings_schema.json @@ -44,7 +44,7 @@ "type": "color", "id": "background", "label": "t:settings_schema.colors.settings.background.label", - "default": "#FFFFFF" + "default": "#1A1A2E" }, { "type": "color_background", @@ -56,31 +56,31 @@ "type": "color", "id": "text", "label": "t:settings_schema.colors.settings.text.label", - "default": "#121212" + "default": "#F2F0EB" }, { "type": "color", "id": "button", "label": "t:settings_schema.colors.settings.button_background.label", - "default": "#121212" + "default": "#C8A96E" }, { "type": "color", "id": "button_label", "label": "t:settings_schema.colors.settings.button_label.label", - "default": "#FFFFFF" + "default": "#1A1A2E" }, { "type": "color", "id": "secondary_button_label", "label": "t:settings_schema.colors.settings.secondary_button_label.label", - "default": "#121212" + "default": "#C8A96E" }, { "type": "color", "id": "shadow", "label": "t:settings_schema.colors.settings.shadow.label", - "default": "#121212" + "default": "#0A0A12" } ], "role": { @@ -111,7 +111,7 @@ { "type": "font_picker", "id": "type_header_font", - "default": "assistant_n4", + "default": "playfair_display_n4", "label": "t:settings_schema.typography.settings.type_header_font.label" }, { @@ -131,7 +131,7 @@ { "type": "font_picker", "id": "type_body_font", - "default": "assistant_n4", + "default": "dm_sans_n4", "label": "t:settings_schema.typography.settings.type_body_font.label" }, { diff --git a/layout/theme.liquid b/layout/theme.liquid index 70db635823b..638f0555bf4 100644 --- a/layout/theme.liquid +++ b/layout/theme.liquid @@ -15,6 +15,10 @@ {%- endunless -%} + + + + {{ page_title }} {%- if current_tags %} – tagged "{{ current_tags | join: ', ' }}"{% endif -%} @@ -256,6 +260,7 @@ {% endstyle %} {{ 'base.css' | asset_url | stylesheet_tag }} + {{ 'trainers-travel-brand.css' | asset_url | stylesheet_tag }} <link rel="stylesheet" href="{{ 'component-cart-items.css' | asset_url }}" media="print" onload="this.media='all'"> {%- if settings.cart_type == 'drawer' -%} diff --git a/sections/footer-group.json b/sections/footer-group.json index a9263d9b541..cbeb8effdbe 100644 --- a/sections/footer-group.json +++ b/sections/footer-group.json @@ -4,46 +4,19 @@ "sections": { "footer": { "type": "footer", - "blocks": { - "footer-0": { - "type": "link_list", - "settings": { - "heading": "Quick links", - "menu": "footer" - } - }, - "footer-1": { - "type": "link_list", - "settings": { - "heading": "Info", - "menu": "footer" - } - }, - "footer-2": { - "type": "text", - "settings": { - "heading": "Our mission", - "subtext": "<p>Share contact information, store details, and brand content with your customers.<\/p>" - } - } - }, - "block_order": [ - "footer-0", - "footer-1", - "footer-2" - ], + "blocks": {}, + "block_order": [], "settings": { "color_scheme": "scheme-1", - "newsletter_enable": true, - "newsletter_heading": "Subscribe to our emails", - "show_social": true, + "newsletter_enable": false, + "show_social": false, "enable_country_selector": false, "enable_language_selector": false, - "payment_enable": true, + "payment_enable": false, "show_policy": false, - "margin_top": 48, - "padding_top": 36, - "padding_bottom": 36 + "margin_top": 0, + "padding_top": 20, + "padding_bottom": 20 } } }, diff --git a/sections/header-group.json b/sections/header-group.json index a9ac3a08a0d..f07015391ff 100644 --- a/sections/header-group.json +++ b/sections/header-group.json @@ -2,43 +2,25 @@ "name": "t:sections.header.name", "type": "header", "sections": { - "announcement-bar": { - "type": "announcement-bar", - "blocks": { - "announcement-bar-0": { - "type": "announcement", - "settings": { - "text": "Welcome to our store", - "text_alignment": "center", - "color_scheme": "scheme-1", - "link": "" - } - } - }, - "block_order": [ - "announcement-bar-0" - ] - }, "header": { "type": "header", "settings": { "color_scheme": "scheme-1", "logo_position": "middle-left", - "menu": "main-menu", + "menu": "", "menu_type_desktop": "dropdown", - "sticky_header_type": "on-scroll-up", - "show_line_separator": true, - "enable_country_selector": true, - "enable_language_selector": true, + "sticky_header_type": "none", + "show_line_separator": false, + "enable_country_selector": false, + "enable_language_selector": false, "mobile_logo_position": "center", "margin_bottom": 0, - "padding_top": 20, - "padding_bottom": 20 + "padding_top": 16, + "padding_bottom": 16 } } }, "order": [ - "announcement-bar", "header" ] } diff --git a/sections/tt-event-header.liquid b/sections/tt-event-header.liquid new file mode 100644 index 00000000000..47d54179527 --- /dev/null +++ b/sections/tt-event-header.liquid @@ -0,0 +1,162 @@ +{% comment %} + Trainers Travel — Event collection header + File: sections/tt-event-header.liquid + + Used in templates/collection.event.json. + Shows the collection title and description prominently at the top of an + event collection page. All event-specific details (hotel name, venue + proximity, dates, price comparison notes) live in the collection + description written in Shopify admin — no theme edits required. + + Also reads product tags to derive a status badge and starting price, + and surfaces an "all-in pricing" note inline. +{% endcomment %} + +{{ 'section-tt-event-header.css' | asset_url | stylesheet_tag }} + +{%- assign col = collection -%} + +{%- comment -%}Derive status and pricing from collection products{%- endcomment -%} +{%- assign eh_min_price = nil -%} +{%- assign eh_all_sold_out = true -%} +{%- assign eh_status_tag = '' -%} +{%- assign eh_date_str = '' -%} +{%- assign eh_city_str = '' -%} + +{%- for product in col.products limit: 20 -%} + {%- if product.available -%} + {%- assign eh_all_sold_out = false -%} + {%- endif -%} + {%- if eh_min_price == nil or product.price_min < eh_min_price -%} + {%- assign eh_min_price = product.price_min -%} + {%- endif -%} + {%- for tag in product.tags -%} + {%- if tag == 'status:selling-fast' and eh_status_tag == '' -%} + {%- assign eh_status_tag = 'selling-fast' -%} + {%- elsif tag == 'status:coming-soon' and eh_status_tag == '' -%} + {%- assign eh_status_tag = 'coming-soon' -%} + {%- endif -%} + {%- if tag contains 'event-date:' and eh_date_str == '' -%} + {%- assign eh_date_str = tag | remove: 'event-date:' -%} + {%- endif -%} + {%- if tag contains 'city:' and eh_city_str == '' -%} + {%- assign eh_city_str = tag | remove: 'city:' | capitalize -%} + {%- endif -%} + {%- endfor -%} +{%- endfor -%} + +{%- if col.products_count == 0 -%} + {%- assign eh_status_tag = 'coming-soon' -%} +{%- elsif eh_all_sold_out -%} + {%- assign eh_status_tag = 'sold-out' -%} +{%- elsif eh_status_tag == '' -%} + {%- assign eh_status_tag = 'available' -%} +{%- endif -%} + +{%- comment -%}When the collection is empty, hide the Dawn product grid that follows{%- endcomment -%} +{%- if col.products_count == 0 -%} + <style>.shopify-section-{{ section.id }} ~ .shopify-section { display: none !important; }</style> +{%- endif -%} + +<div class="tt-eh"> + <div class="tt-eh__inner"> + + <div class="tt-eh__top"> + <a href="/" class="tt-eh__back">← All events</a> + <span class="tt-eh__badge tt-eh__badge--{{ eh_status_tag }}"> + {%- case eh_status_tag -%} + {%- when 'sold-out' -%}Sold Out + {%- when 'selling-fast' -%}Selling Fast + {%- when 'coming-soon' -%}Coming Soon + {%- else -%}Now Booking + {%- endcase -%} + </span> + </div> + + <h1 class="tt-eh__title">{{ col.title }}</h1> + + {%- if eh_city_str != '' or eh_date_str != '' -%} + <p class="tt-eh__meta"> + {%- if eh_city_str != '' -%}{{ eh_city_str }}{%- endif -%} + {%- if eh_city_str != '' and eh_date_str != '' -%} · {%- endif -%} + {%- if eh_date_str != '' -%}{{ eh_date_str }}{%- endif -%} + </p> + {%- endif -%} + + {%- if col.description != blank -%} + <div class="tt-eh__description"> + {{ col.description }} + </div> + {%- endif -%} + + {%- if eh_status_tag == 'coming-soon' -%} + <div class="tt-eh__coming-soon-body"> + <div class="tt-eh__cs-grid"> + <div class="tt-eh__cs-col"> + <p class="tt-eh__cs-label">What’s confirmed</p> + <ul class="tt-eh__cs-list"> + {%- if eh_date_str != '' -%} + <li>{{ eh_date_str }}</li> + {%- elsif col.description contains 'June' or col.description contains 'July' or col.description contains 'August' or col.description contains 'May' -%} + {%- comment -%}date in description, skip — already shown above{%- endcomment -%} + {%- endif -%} + {%- if eh_city_str != '' -%} + <li>{{ eh_city_str }}</li> + {%- endif -%} + {%- if col.description != blank -%} + {%- assign desc_text = col.description | strip_html -%} + <li>{{ desc_text | truncate: 120 }}</li> + {%- endif -%} + </ul> + </div> + <div class="tt-eh__cs-col"> + <p class="tt-eh__cs-label">What’s coming</p> + <ul class="tt-eh__cs-list"> + <li>Group hotel block at a negotiated rate</li> + <li>All-in pricing — taxes and fees included</li> + <li>Venue-proximity selection</li> + <li>One-click booking, no loyalty account needed</li> + </ul> + </div> + </div> + <div class="tt-eh__cs-cta"> + <p>We’ll announce when rooms open. Follow us or reach out directly.</p> + <a href="mailto:{{ section.settings.notify_email | default: 'contact@trainerstravel.com' }}" class="tt-eh__cs-btn"> + contact@trainerstravel.com + </a> + </div> + </div> + {%- else -%} + <div class="tt-eh__footer-bar"> + {%- if eh_min_price != nil -%} + <p class="tt-eh__pricing-note"> + {%- if eh_status_tag == 'sold-out' -%} + All rooms sold out. + {%- else -%} + From <strong>{{ eh_min_price | money }}</strong> — all taxes & fees included. + {%- endif -%} + </p> + {%- endif -%} + <p class="tt-eh__rooms-count">{{ col.products_count }} room type{%- if col.products_count != 1 -%}s{%- endif -%} available</p> + </div> + {%- endif -%} + + </div> +</div> + +{% schema %} +{ + "name": "Event Header", + "tag": "div", + "class": "section", + "limit": 1, + "settings": [ + { + "type": "text", + "id": "notify_email", + "label": "Contact email (coming soon CTA)", + "default": "contact@trainerstravel.com" + } + ] +} +{% endschema %} diff --git a/sections/tt-home.liquid b/sections/tt-home.liquid new file mode 100644 index 00000000000..b93717b5d39 --- /dev/null +++ b/sections/tt-home.liquid @@ -0,0 +1,364 @@ +{% comment %} + Trainers Travel — Homepage + File: sections/tt-home.liquid + + Multi-event architecture. No hardcoded event names here — ever. + The events grid reads from a Shopify navigation menu whose handle is + configured in section settings (default: "event-collections"). To add a + new event to the homepage: create the collection in admin, then add a link + to that collection in the "Event Collections" navigation menu. Done. + + Page structure: + 1. Header — minimal wordmark + contact link + 2. Hero — evergreen brand copy + CTA + 3. Events — dynamic grid from navigation menu + 4. FAQ — evergreen answers + 5. Footer — email + social +{% endcomment %} + +{{ 'section-tt-home.css' | asset_url | stylesheet_tag }} + +<div class="tt-home"> + + {%- comment -%}═══════════════════════════════════════════════════════ + 1. HEADER + ═══════════════════════════════════════════════════════{%- endcomment -%} + <header class="tt-home__header"> + <div class="tt-home__header-inner"> + <span class="tt-home__wordmark">Trainers Travel</span> + {%- if section.settings.contact_email != blank -%} + <a href="mailto:{{ section.settings.contact_email }}" class="tt-home__header-email"> + {{ section.settings.contact_email }} + </a> + {%- endif -%} + </div> + </header> + + {%- comment -%}═══════════════════════════════════════════════════════ + 2. HERO + ═══════════════════════════════════════════════════════{%- endcomment -%} + <section class="tt-home__hero"> + <div class="tt-home__container"> + <h1 class="tt-home__hero-heading">Travel smarter.<br>Compete harder.</h1> + <p class="tt-home__hero-sub"> + Group hotel blocks for the competitive Pokémon TCG community. + We negotiate the rate and include every tax and fee upfront — the price you see is what you pay. + </p> + <div class="tt-home__hero-actions"> + <a href="{{ section.settings.events_cta_link | default: '/collections/all' }}" class="tt-home__btn tt-home__btn--primary"> + {{ section.settings.events_cta_text | default: 'View Events' }} + </a> + </div> + </div> + </section> + + {%- comment -%}═══════════════════════════════════════════════════════ + 3. EVENTS GRID + Priority order: + 1. Nav menu (handle: events_menu setting) — automatic, scales forever + 2. Section blocks — manual collection pickers, use these right now + 3. Empty state — only shows if neither is configured + ═══════════════════════════════════════════════════════{%- endcomment -%} + <section class="tt-home__events"> + <div class="tt-home__container"> + <h2 class="tt-home__section-title">Upcoming events</h2> + + {%- assign events_menu = linklists[section.settings.events_menu] -%} + {%- assign use_menu = false -%} + {%- if events_menu != blank and events_menu.links.size > 0 -%} + {%- assign use_menu = true -%} + {%- endif -%} + + {%- comment -%}Build the list of collections to render{%- endcomment -%} + {%- assign ec_cols = '' -%} + + {%- if use_menu or section.blocks.size > 0 -%} + <div class="tt-home__events-grid"> + + {%- comment -%}——— Source: nav menu ———{%- endcomment -%} + {%- if use_menu -%} + {%- for link in events_menu.links -%} + {%- assign col = link.object -%} + {%- if col == blank -%}{%- continue -%}{%- endif -%} + {%- render 'tt-event-card', col: col -%} + {%- endfor -%} + + {%- comment -%}——— Source: section blocks ———{%- endcomment -%} + {%- else -%} + {%- for block in section.blocks -%} + {%- if block.type == 'event' -%} + {%- assign col = collections[block.settings.collection] -%} + {%- if col == blank -%}{%- continue -%}{%- endif -%} + {%- render 'tt-event-card', col: col, block: block -%} + {%- endif -%} + {%- endfor -%} + {%- endif -%} + + </div> + + {%- else -%} + <div class="tt-home__events-empty"> + <p>Events coming soon — check back shortly or follow us for updates.</p> + {%- if section.settings.contact_email != blank -%} + <p> + Want early access? + <a href="mailto:{{ section.settings.contact_email }}">{{ section.settings.contact_email }}</a> + </p> + {%- endif -%} + </div> + {%- endif -%} + + </div> + </section> + + {%- comment -%}═══════════════════════════════════════════════════════ + 4. FAQ + ═══════════════════════════════════════════════════════{%- endcomment -%} + <section class="tt-home__faq"> + <div class="tt-home__container"> + <h2 class="tt-home__section-title">Questions</h2> + <dl class="tt-home__faq-list"> + + <div class="tt-home__faq-item"> + <dt class="tt-home__faq-q"> + <button class="tt-home__faq-btn" aria-expanded="false" aria-controls="faq-1"> + How does booking work? + <span class="tt-home__faq-icon" aria-hidden="true"></span> + </button> + </dt> + <dd class="tt-home__faq-a" id="faq-1" hidden> + Browse available hotel blocks for upcoming events, pick your room type, and check out directly on our site. We handle the group reservation with the hotel — you just show up with your confirmation. No phone calls, no loyalty accounts, no back-and-forth required. + </dd> + </div> + + <div class="tt-home__faq-item"> + <dt class="tt-home__faq-q"> + <button class="tt-home__faq-btn" aria-expanded="false" aria-controls="faq-2"> + What does all-in pricing mean? + <span class="tt-home__faq-icon" aria-hidden="true"></span> + </button> + </dt> + <dd class="tt-home__faq-a" id="faq-2" hidden> + The price you see is the price you pay. Hotel sites and Google show rates before taxes, which typically adds 15–20% at checkout. We build all taxes and fees into our listed price upfront so there are no surprises. What you see is what you pay. + </dd> + </div> + + <div class="tt-home__faq-item"> + <dt class="tt-home__faq-q"> + <button class="tt-home__faq-btn" aria-expanded="false" aria-controls="faq-3"> + Can I cancel? + <span class="tt-home__faq-icon" aria-hidden="true"></span> + </button> + </dt> + <dd class="tt-home__faq-a" id="faq-3" hidden> + Cancellation terms vary by event and are listed on each product page. We hold group room blocks with hotels, so last-minute cancellations can impact our ability to offer blocks at future events. We recommend reviewing the cancellation window before purchasing and only booking if you plan to attend. + </dd> + </div> + + <div class="tt-home__faq-item"> + <dt class="tt-home__faq-q"> + <button class="tt-home__faq-btn" aria-expanded="false" aria-controls="faq-4"> + How many people per room? + <span class="tt-home__faq-icon" aria-hidden="true"></span> + </button> + </dt> + <dd class="tt-home__faq-a" id="faq-4" hidden> + It depends on the room type. Double Queen rooms comfortably sleep 2–4 people. King rooms are best for 1–2. Each listing notes the bed configuration. You can split the cost with teammates however you like — we just need one person to place the order. + </dd> + </div> + + <div class="tt-home__faq-item"> + <dt class="tt-home__faq-q"> + <button class="tt-home__faq-btn" aria-expanded="false" aria-controls="faq-5"> + Where is the hotel? + <span class="tt-home__faq-icon" aria-hidden="true"></span> + </button> + </dt> + <dd class="tt-home__faq-a" id="faq-5" hidden> + Every hotel we select is chosen specifically for proximity to the tournament venue. We prioritize hotels with covered or direct walking access to the event hall whenever possible, so you can move between your room and the tournament floor without dealing with traffic or weather. + </dd> + </div> + + <div class="tt-home__faq-item"> + <dt class="tt-home__faq-q"> + <button class="tt-home__faq-btn" aria-expanded="false" aria-controls="faq-6"> + Do I need a hotel loyalty account? + <span class="tt-home__faq-icon" aria-hidden="true"></span> + </button> + </dt> + <dd class="tt-home__faq-a" id="faq-6" hidden> + No. Our rates are available to anyone. No IHG One, World of Hyatt, Marriott Bonvoy, or any other membership required. We negotiate group access so you don’t have to jump through those hoops. + </dd> + </div> + + <div class="tt-home__faq-item"> + <dt class="tt-home__faq-q"> + <button class="tt-home__faq-btn" aria-expanded="false" aria-controls="faq-7"> + What if I want to arrive early or stay late? + <span class="tt-home__faq-icon" aria-hidden="true"></span> + </button> + </dt> + <dd class="tt-home__faq-a" id="faq-7" hidden> + We do our best to negotiate group rate extensions for the days surrounding the event. If extended stay options are available, they’ll be listed on the product page. Reach out to us at <a href="mailto:{{ section.settings.contact_email }}">{{ section.settings.contact_email }}</a> if you have specific needs. + </dd> + </div> + + <div class="tt-home__faq-item"> + <dt class="tt-home__faq-q"> + <button class="tt-home__faq-btn" aria-expanded="false" aria-controls="faq-8"> + Who is Trainers Travel? + <span class="tt-home__faq-icon" aria-hidden="true"></span> + </button> + </dt> + <dd class="tt-home__faq-a" id="faq-8" hidden> + Trainers Travel is a hotel coordination service built for the competitive Pokémon TCG community. We negotiate group room blocks at major events, then offer rooms at all-in prices that are typically cheaper than booking direct — with better terms and no hidden fees. Booking hotels for tournaments has always been a frustrating experience. We’re fixing that. + </dd> + </div> + + </dl> + </div> + </section> + + {%- comment -%}═══════════════════════════════════════════════════════ + 5. FOOTER + ═══════════════════════════════════════════════════════{%- endcomment -%} + <footer class="tt-home__footer"> + <div class="tt-home__container"> + <div class="tt-home__footer-inner"> + <p class="tt-home__footer-tagline">Built by players, for players.</p> + <div class="tt-home__footer-links"> + {%- if section.settings.contact_email != blank -%} + <a href="mailto:{{ section.settings.contact_email }}" class="tt-home__footer-link"> + {{ section.settings.contact_email }} + </a> + {%- endif -%} + {%- if section.settings.social_x != blank -%} + <a href="{{ section.settings.social_x }}" class="tt-home__footer-link" target="_blank" rel="noopener noreferrer">X / Twitter</a> + {%- endif -%} + {%- if section.settings.social_instagram != blank -%} + <a href="{{ section.settings.social_instagram }}" class="tt-home__footer-link" target="_blank" rel="noopener noreferrer">Instagram</a> + {%- endif -%} + {%- if section.settings.social_discord != blank -%} + <a href="{{ section.settings.social_discord }}" class="tt-home__footer-link" target="_blank" rel="noopener noreferrer">Discord</a> + {%- endif -%} + </div> + </div> + </div> + </footer> + +</div> + +<script> + (function () { + var btns = document.querySelectorAll('.tt-home__faq-btn'); + btns.forEach(function (btn) { + btn.addEventListener('click', function () { + var expanded = this.getAttribute('aria-expanded') === 'true'; + var answer = document.getElementById(this.getAttribute('aria-controls')); + this.setAttribute('aria-expanded', String(!expanded)); + answer.hidden = expanded; + }); + }); + })(); +</script> + +{% schema %} +{ + "name": "TT Home", + "tag": "div", + "class": "section", + "limit": 1, + "disabled_on": { + "groups": ["header", "footer", "aside"] + }, + "settings": [ + { + "type": "header", + "content": "Events" + }, + { + "type": "text", + "id": "events_menu", + "label": "Event collections menu handle", + "default": "event-collections", + "info": "Advanced: create a navigation menu in Online Store → Navigation with this handle, add each event collection as a link, and the grid populates automatically. While that menu doesn't exist, the 'Event' blocks below are used instead." + }, + { + "type": "header", + "content": "Hero CTA" + }, + { + "type": "text", + "id": "events_cta_text", + "label": "Button text", + "default": "View Events" + }, + { + "type": "url", + "id": "events_cta_link", + "label": "Button link" + }, + { + "type": "header", + "content": "Contact & Social" + }, + { + "type": "text", + "id": "contact_email", + "label": "Contact email", + "default": "contact@trainerstravel.com" + }, + { + "type": "url", + "id": "social_x", + "label": "X / Twitter URL" + }, + { + "type": "url", + "id": "social_instagram", + "label": "Instagram URL" + }, + { + "type": "url", + "id": "social_discord", + "label": "Discord URL" + } + ], + "blocks": [ + { + "type": "event", + "name": "Event", + "settings": [ + { + "type": "collection", + "id": "collection", + "label": "Event collection", + "info": "Pick an event collection. The card title, description, pricing, and status badge are all read from the collection automatically." + }, + { + "type": "text", + "id": "event_date", + "label": "Date override", + "info": "Shown on the card. Use this when the collection has no products yet (e.g. coming soon events). Example: June 12–14, 2026" + }, + { + "type": "text", + "id": "event_city", + "label": "City override", + "info": "Shown on the card alongside the date. Example: New Orleans, LA" + } + ] + } + ], + "presets": [ + { + "name": "TT Home", + "settings": { + "events_menu": "event-collections", + "events_cta_text": "View Events", + "contact_email": "contact@trainerstravel.com" + } + } + ] +} +{% endschema %} diff --git a/sections/tt-sponsored.liquid b/sections/tt-sponsored.liquid new file mode 100644 index 00000000000..dad6c767e93 --- /dev/null +++ b/sections/tt-sponsored.liquid @@ -0,0 +1,153 @@ +{% comment %} + Trainers Travel — Sponsored Players page + File: sections/tt-sponsored.liquid + + Template: page.sponsored-players + Add players via the schema blocks in the theme editor. +{% endcomment %} + +{{ 'section-tt-sponsored.css' | asset_url | stylesheet_tag }} + +<div class="tt-sp"> + + <div class="tt-sp__hero"> + <div class="tt-sp__container"> + <p class="tt-sp__eyebrow">Trainers Travel</p> + <h1 class="tt-sp__heading">Sponsored Players</h1> + <p class="tt-sp__sub"> + These are the players we support. Follow them, root for them, watch their content. + </p> + </div> + </div> + + {%- if section.blocks.size > 0 -%} + <div class="tt-sp__grid-wrap"> + <div class="tt-sp__container"> + <div class="tt-sp__grid"> + {%- for block in section.blocks -%} + {%- if block.type == 'player' -%} + <div class="tt-sp__card" {{ block.shopify_attributes }}> + + {%- if block.settings.avatar != blank -%} + <div class="tt-sp__avatar"> + <img + src="{{ block.settings.avatar | image_url: width: 200 }}" + alt="{{ block.settings.name | escape }}" + width="100" + height="100" + loading="lazy" + > + </div> + {%- else -%} + <div class="tt-sp__avatar tt-sp__avatar--placeholder" aria-hidden="true"> + <span>{{ block.settings.name | slice: 0 | upcase }}</span> + </div> + {%- endif -%} + + <div class="tt-sp__card-body"> + <p class="tt-sp__player-name">{{ block.settings.name }}</p> + + {%- if block.settings.handle != blank -%} + <p class="tt-sp__player-handle">@{{ block.settings.handle }}</p> + {%- endif -%} + + {%- if block.settings.bio != blank -%} + <p class="tt-sp__player-bio">{{ block.settings.bio }}</p> + {%- endif -%} + + {%- if block.settings.link != blank -%} + <a href="{{ block.settings.link }}" class="tt-sp__player-link" target="_blank" rel="noopener noreferrer"> + {{ block.settings.link_label | default: 'Follow' }} + </a> + {%- endif -%} + </div> + + </div> + {%- endif -%} + {%- endfor -%} + </div> + </div> + </div> + {%- else -%} + <div class="tt-sp__empty"> + <div class="tt-sp__container"> + <p>Players coming soon.</p> + </div> + </div> + {%- endif -%} + + <div class="tt-sp__footer-note"> + <div class="tt-sp__container"> + <p> + Interested in a sponsorship? Reach out at + <a href="mailto:{{ section.settings.contact_email }}">{{ section.settings.contact_email }}</a>. + </p> + </div> + </div> + +</div> + +{% schema %} +{ + "name": "Sponsored Players", + "tag": "div", + "class": "section", + "limit": 1, + "disabled_on": { + "groups": ["header", "footer", "aside"] + }, + "settings": [ + { + "type": "text", + "id": "contact_email", + "label": "Contact email", + "default": "contact@trainerstravel.com" + } + ], + "blocks": [ + { + "type": "player", + "name": "Player", + "settings": [ + { + "type": "text", + "id": "name", + "label": "Player name" + }, + { + "type": "text", + "id": "handle", + "label": "Social handle", + "info": "Without the @ symbol" + }, + { + "type": "image_picker", + "id": "avatar", + "label": "Profile photo" + }, + { + "type": "textarea", + "id": "bio", + "label": "Short bio" + }, + { + "type": "url", + "id": "link", + "label": "Profile link" + }, + { + "type": "text", + "id": "link_label", + "label": "Link label", + "default": "Follow" + } + ] + } + ], + "presets": [ + { + "name": "Sponsored Players" + } + ] +} +{% endschema %} diff --git a/snippets/tt-event-card.liquid b/snippets/tt-event-card.liquid new file mode 100644 index 00000000000..4c9351efb7f --- /dev/null +++ b/snippets/tt-event-card.liquid @@ -0,0 +1,89 @@ +{% comment %} + Renders a single event card. + Usage: {% render 'tt-event-card', col: collection_object, block: block %} + + - Status badge + min price derived from product tags. + - city: and event-date: product tags populate the meta line. + - block.settings.event_date / event_city override the meta line when + no products exist yet (coming soon events). +{% endcomment %} + +{%- assign ec_min_price = nil -%} +{%- assign ec_all_sold_out = true -%} +{%- assign ec_status_tag = '' -%} +{%- assign ec_date_str = '' -%} +{%- assign ec_city_str = '' -%} + +{%- for product in col.products limit: 20 -%} + {%- if product.available -%} + {%- assign ec_all_sold_out = false -%} + {%- endif -%} + {%- if ec_min_price == nil or product.price_min < ec_min_price -%} + {%- assign ec_min_price = product.price_min -%} + {%- endif -%} + {%- for tag in product.tags -%} + {%- if tag == 'status:selling-fast' and ec_status_tag == '' -%} + {%- assign ec_status_tag = 'selling-fast' -%} + {%- elsif tag == 'status:coming-soon' and ec_status_tag == '' -%} + {%- assign ec_status_tag = 'coming-soon' -%} + {%- endif -%} + {%- if tag contains 'event-date:' and ec_date_str == '' -%} + {%- assign ec_date_str = tag | remove: 'event-date:' -%} + {%- endif -%} + {%- if tag contains 'city:' and ec_city_str == '' -%} + {%- assign ec_city_str = tag | remove: 'city:' | capitalize -%} + {%- endif -%} + {%- endfor -%} +{%- endfor -%} + +{%- comment -%}Block overrides — used for coming soon events with no products{%- endcomment -%} +{%- if ec_date_str == '' and block != blank and block.settings.event_date != blank -%} + {%- assign ec_date_str = block.settings.event_date -%} +{%- endif -%} +{%- if ec_city_str == '' and block != blank and block.settings.event_city != blank -%} + {%- assign ec_city_str = block.settings.event_city -%} +{%- endif -%} + +{%- if col.products_count == 0 -%} + {%- assign ec_status_tag = 'coming-soon' -%} +{%- elsif ec_all_sold_out -%} + {%- assign ec_status_tag = 'sold-out' -%} +{%- elsif ec_status_tag == '' -%} + {%- assign ec_status_tag = 'available' -%} +{%- endif -%} + +<a href="{{ col.url }}" class="tt-home__event-card tt-home__event-card--{{ ec_status_tag }}"> + <div class="tt-home__event-card-top"> + <span class="tt-home__event-badge tt-home__event-badge--{{ ec_status_tag }}"> + {%- case ec_status_tag -%} + {%- when 'sold-out' -%}Sold Out + {%- when 'selling-fast' -%}Selling Fast + {%- when 'coming-soon' -%}Coming Soon + {%- else -%}Now Booking + {%- endcase -%} + </span> + </div> + <div class="tt-home__event-card-body"> + <p class="tt-home__event-card-title">{{ col.title }}</p> + {%- if ec_city_str != '' or ec_date_str != '' -%} + <p class="tt-home__event-card-meta"> + {%- if ec_city_str != '' -%}{{ ec_city_str }}{%- endif -%} + {%- if ec_city_str != '' and ec_date_str != '' -%} · {%- endif -%} + {%- if ec_date_str != '' -%}{{ ec_date_str }}{%- endif -%} + </p> + {%- endif -%} + {%- if col.description != blank -%} + <p class="tt-home__event-card-desc">{{ col.description | strip_html | truncate: 120 }}</p> + {%- endif -%} + </div> + <div class="tt-home__event-card-footer"> + {%- if ec_min_price != nil and ec_status_tag != 'sold-out' and ec_status_tag != 'coming-soon' -%} + <span class="tt-home__event-card-price"> + From {{ ec_min_price | money }} <span class="tt-home__event-card-price-note">all-in</span> + </span> + {%- endif -%} + <span class="tt-home__event-card-cta"> + {%- if ec_status_tag == 'coming-soon' -%}Notify me →{%- else -%}View rooms →{%- endif -%} + </span> + </div> +</a> diff --git a/templates/collection.event.json b/templates/collection.event.json new file mode 100644 index 00000000000..b5f190f779e --- /dev/null +++ b/templates/collection.event.json @@ -0,0 +1,28 @@ +{ + "sections": { + "tt_event_header": { + "type": "tt-event-header", + "settings": {} + }, + "product-grid": { + "type": "main-collection-product-grid", + "settings": { + "products_per_page": 16, + "columns_desktop": 3, + "image_ratio": "adapt", + "show_secondary_image": false, + "show_vendor": false, + "show_rating": false, + "enable_filtering": false, + "enable_sorting": false, + "columns_mobile": "1", + "padding_top": 28, + "padding_bottom": 36 + } + } + }, + "order": [ + "tt_event_header", + "product-grid" + ] +} diff --git a/templates/index.json b/templates/index.json index 92d10b71ece..91321e715a6 100644 --- a/templates/index.json +++ b/templates/index.json @@ -1,210 +1,44 @@ { "sections": { - "image_banner": { - "type": "image-banner", + "tt_home": { + "type": "tt-home", "blocks": { - "heading": { - "type": "heading", + "indy-2026": { + "type": "event", "settings": { - "heading": "Image banner", - "heading_size": "h0" + "collection": "indianapolis-regional-2026", + "event_date": "May 29\u201331, 2026", + "event_city": "Indianapolis, IN" } }, - "text": { - "type": "text", + "naic-2026": { + "type": "event", "settings": { - "text": "Give customers details about the banner image(s) or content on the template.", - "text_style": "body" + "collection": "naic-2026", + "event_date": "June 12\u201314, 2026", + "event_city": "New Orleans, LA" } }, - "button": { - "type": "buttons", + "worlds-2026": { + "type": "event", "settings": { - "button_label_1": "Shop all", - "button_link_1": "shopify://collections/all", - "button_style_secondary_1": true, - "button_label_2": "", - "button_link_2": "", - "button_style_secondary_2": false + "collection": "worlds-2026", + "event_date": "August 28\u201330, 2026", + "event_city": "San Francisco, CA" } } }, - "block_order": [ - "heading", - "text", - "button" - ], + "block_order": ["indy-2026", "naic-2026", "worlds-2026"], "settings": { - "image_overlay_opacity": 40, - "image_height": "large", - "desktop_content_position": "bottom-center", - "show_text_box": false, - "desktop_content_alignment": "center", - "color_scheme": "scheme-3", - "mobile_content_alignment": "center", - "stack_images_on_mobile": false, - "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": "<p>Share information about your brand with your customers. Describe a product, make announcements, or welcome customers to your store.<\/p>" - } - } - }, - "block_order": [ - "heading", - "text" - ], - "settings": { - "color_scheme": "scheme-1", - "full_width": true, - "padding_top": 40, - "padding_bottom": 0 - } - }, - "featured_collection": { - "type": "featured-collection", - "settings": { - "title": "Featured products", - "heading_size": "h2", - "collection": "all", - "products_to_show": 8, - "columns_desktop": 4, - "color_scheme": "scheme-1", - "show_view_all": false, - "swipe_on_mobile": false, - "image_ratio": "adapt", - "show_secondary_image": true, - "show_vendor": false, - "show_rating": false, - "columns_mobile": "2", - "padding_top": 28, - "padding_bottom": 36 - } - }, - "collage": { - "type": "collage", - "blocks": { - "collection-0": { - "type": "collection", - "settings": { - "collection": "" - } - }, - "product": { - "type": "product", - "settings": { - "product": "", - "second_image": false - } - }, - "collection-1": { - "type": "collection", - "settings": { - "collection": "" - } - } - }, - "block_order": [ - "collection-0", - "product", - "collection-1" - ], - "settings": { - "heading": "Multimedia collage", - "heading_size": "h2", - "desktop_layout": "left", - "mobile_layout": "collage", - "color_scheme": "scheme-1", - "padding_top": 36, - "padding_bottom": 36 - } - }, - "video": { - "type": "video", - "settings": { - "heading": "", - "video_url": "https://www.youtube.com/watch?v=_9VUPq3SxOc", - "heading_size": "h1", - "description": "", - "full_width": false, - "color_scheme": "scheme-1", - "padding_top": 36, - "padding_bottom": 36 - } - }, - "multicolumn": { - "type": "multicolumn", - "blocks": { - "column1": { - "type": "column", - "settings": { - "title": "Column", - "text": "<p>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": "" - } - }, - "column2": { - "type": "column", - "settings": { - "title": "Column", - "text": "<p>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": "<p>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": [ - "column1", - "column2", - "column3" - ], - "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, - "color_scheme": "scheme-1", - "columns_mobile": "1", - "padding_top": 36, - "padding_bottom": 36 + "events_menu": "event-collections", + "events_cta_text": "View Events", + "events_cta_link": "", + "contact_email": "contact@trainerstravel.com", + "social_x": "", + "social_instagram": "", + "social_discord": "" } } }, - "order": [ - "image_banner", - "rich_text", - "featured_collection", - "collage", - "video", - "multicolumn" - ] + "order": ["tt_home"] } diff --git a/templates/page.sponsored-players.json b/templates/page.sponsored-players.json new file mode 100644 index 00000000000..1ff6ca43504 --- /dev/null +++ b/templates/page.sponsored-players.json @@ -0,0 +1,13 @@ +{ + "sections": { + "tt_sponsored": { + "type": "tt-sponsored", + "blocks": {}, + "block_order": [], + "settings": { + "contact_email": "contact@trainerstravel.com" + } + } + }, + "order": ["tt_sponsored"] +}