--- categories: true carousel: {{theme_settings.homepage_show_carousel}} products: new: limit: {{theme_settings.homepage_new_products_count}} featured: limit: {{theme_settings.homepage_featured_products_count}} top_sellers: limit: {{theme_settings.homepage_top_products_count}} blog: recent_posts: limit: {{theme_settings.homepage_blog_posts_count}} summary: 300 brands: shop_by_brand: limit: 10 gql: "query HomeMakers { site { brands(first: 12) { edges { node { name path defaultImage { url(width: 320) } } } } } }" --- {{#partial "hero"}} {{!-- BigCommerce Marketing Banners (Control Panel > Marketing > Banners). Platform auto-filters by page + position + visibility + date rule, so the theme only needs to render them. Independent of yen-topbar. Rendered at the very top of the page (above the hero carousel) so the "top" banner position is consistent with category/brand/search pages. --}} {{#if banners.top}}
{{#each banners.top}}
{{{this}}}
{{/each}}
{{/if}} {{{region name="home_below_menu"}}} {{!-- Ember Theme: Hero Carousel (3-slide, content-synced) --}} {{{region name="home_below_carousel"}}} {{!-- Market preset: the trust claims as a slim strip here, instead of the tiles below. --}} {{#if theme_settings.yen-layout-preset '===' 'market'}}{{> components/home/market/trust-strip}}{{/if}} {{/partial}} {{#partial "page"}} {{!-- Promotion notices sit on the page gutter like every other block, not edge to edge. --}} {{#if shipping_messages}}
{{#each shipping_messages}} {{> components/common/alert/alert-info message}} {{/each}}
{{/if}}
{{!-- Shop by Category --}} {{#if categories.length}}

{{lang 'categories.shop_by'}}

{{!-- Five framed cards fill the classic row; the market preset sets its aisles four to a row as photographs, so it shows eight in two rows. --}} {{assignVar 'yenCatCount' 5}}{{#if theme_settings.yen-layout-preset '===' 'market'}}{{assignVar 'yenCatCount' 8}}{{/if}}
{{#each (limit categories (getVar 'yenCatCount'))}} {{> components/category/yen-cat-card}} {{/each}}
{{/if}} {{!-- Shop by Brand --}} {{#if brands.length}}

{{lang 'homepage.shop_by_brand'}}

{{/if}} {{!-- Promo Banner. The market preset pairs it with the Lookbook further down instead (components/home/market/offers.html). --}} {{#if theme_settings.yen-layout-preset '===' 'market'}}{{else}} {{#if theme_settings.yen-show-promo-banner}} {{> components/home/promo-url}} {{#if (getVar 'yenViewallUrl')}}
{{#if theme_settings.yen-promo-banner-tag}}{{theme_settings.yen-promo-banner-tag}}{{else}}{{lang 'homepage.promo_tag'}}{{/if}}

{{#if theme_settings.yen-promo-banner-title}}{{{theme_settings.yen-promo-banner-title}}}{{else if theme_settings.yen-content-set '===' 'food'}}{{{lang 'homepage.food_promo_title'}}}{{else}}{{{lang 'homepage.promo_title'}}}{{/if}}

{{#if theme_settings.yen-promo-banner-desc}}{{theme_settings.yen-promo-banner-desc}}{{else if theme_settings.yen-content-set '===' 'food'}}{{{lang 'homepage.food_promo_desc'}}}{{else}}{{{lang 'homepage.promo_desc'}}}{{/if}}

{{#if theme_settings.yen-promo-banner-btn}}{{theme_settings.yen-promo-banner-btn}}{{else}}{{lang 'homepage.promo_btn'}}{{/if}} {{!-- Each claim only while its hero pill shows (components/common/promise-pill-vars). --}} {{> components/common/promise-pill-vars}} {{#if theme_settings.yen-promo-banner-show-trust}}{{#or (getVar 'yenPill1Shows') (getVar 'yenPill2Shows') (getVar 'yenPill3Shows')}}
{{#if (getVar 'yenPill1Shows')}}{{#or (trim theme_settings.yen-trust-shipping-title) (if (getVar 'yenPillThr') '>' 0)}} {{#if theme_settings.yen-trust-shipping-title}}{{theme_settings.yen-trust-shipping-title}}{{else if (getVar 'yenPillThr') '>' 0}}{{lang 'homepage.trust_shipping_title'}}{{/if}} {{!-- The store's own threshold, restated in the shopper's currency by convertThresholds(), as in the header's topbar sentence. Left out when the store has no threshold. --}} {{#if theme_settings.yen-cart-show-shipping-progress}}{{#if theme_settings.yen-cart-free-shipping-threshold '>' 0}}' 1}} data-yen-threshold-pending{{/if}}>{{lang 'homepage.trust_shipping_note' amount=(concat settings.money.currency_token theme_settings.yen-cart-free-shipping-threshold)}}{{/if}}{{/if}} {{/or}}{{/if}} {{#if (getVar 'yenPill2Shows')}} {{#if theme_settings.yen-trust-returns-title}}{{theme_settings.yen-trust-returns-title}}{{else}}{{lang 'homepage.trust_returns_title'}}{{/if}} {{#if (trim theme_settings.yen-trust-returns-note)}}{{trim theme_settings.yen-trust-returns-note}}{{else}}{{lang 'homepage.trust_returns_note'}}{{/if}} {{/if}} {{#if (getVar 'yenPill3Shows')}} {{#if theme_settings.yen-trust-secure-title}}{{theme_settings.yen-trust-secure-title}}{{else}}{{lang 'homepage.trust_secure_title'}}{{/if}} {{lang 'homepage.trust_secure_note'}} {{/if}}
{{/or}}{{/if}}
{{/if}} {{/if}} {{/if}} {{!-- Product Tabs: Featured / Best Sellers / New Arrivals. The market preset shows the feeds as shelves instead, below the flash sale; its `home_above_products` region moves with them, so it is always directly above the first product feed. --}} {{#if theme_settings.yen-layout-preset '===' 'market'}}{{else}}{{{region name="home_above_products"}}}{{/if}} {{#if theme_settings.yen-layout-preset '===' 'market'}}{{else}}{{> components/home/product-tabs}}{{/if}} {{!-- Trust/Promo Badges. The market preset has them as the strip under the hero. --}} {{#if theme_settings.yen-layout-preset '===' 'market'}}{{else}} {{#if theme_settings.yen-show-trust-badges}} {{!-- Each badge only while its hero pill shows and it has a title (promise-pill-vars). --}} {{> components/common/promise-pill-vars}} {{#or (getVar 'yenPill1Shows') (getVar 'yenPill2Shows') (getVar 'yenPill3Shows')}}
{{#if (getVar 'yenPill1Shows')}}{{#if (trim theme_settings.yen-trust-shipping-title)}}
{{theme_settings.yen-trust-shipping-title}}
{{#if (trim theme_settings.yen-trust-shipping-desc)}}
{{theme_settings.yen-trust-shipping-desc}}
{{/if}}
{{/if}}{{/if}} {{#if (getVar 'yenPill3Shows')}}{{#if (trim theme_settings.yen-trust-secure-title)}}
{{theme_settings.yen-trust-secure-title}}
{{#if (trim theme_settings.yen-trust-secure-desc)}}
{{theme_settings.yen-trust-secure-desc}}
{{/if}}
{{/if}}{{/if}} {{#if (getVar 'yenPill2Shows')}}{{#if (trim theme_settings.yen-trust-returns-title)}}
{{theme_settings.yen-trust-returns-title}}
{{#if (trim theme_settings.yen-trust-returns-desc)}}
{{theme_settings.yen-trust-returns-desc}}
{{/if}}
{{/if}}{{/if}}
{{/or}} {{/if}} {{/if}} {{!-- Flash Sale / Countdown. Rendered only when the chosen source has products: Fashion flags none as featured, and with the source on Featured the band drew its title and timer over an empty grid. --}} {{assignVar 'yenFlash' ''}} {{#if theme_settings.yen-flash-sale-products '==' 'featured'}}{{#if products.featured}}{{assignVar 'yenFlash' 'featured'}}{{/if}}{{else if theme_settings.yen-flash-sale-products '==' 'new'}}{{#if products.new}}{{assignVar 'yenFlash' 'new'}}{{/if}}{{else}}{{#if products.top_sellers}}{{assignVar 'yenFlash' 'top'}}{{/if}}{{/if}} {{!-- Only discounted products are a sale: the band shows those and nothing without one. --}} {{assignVar 'yenFlashHit' 0}} {{#if (getVar 'yenFlash') '===' 'featured'}}{{#each products.featured}}{{> components/home/flash-discount}}{{/each}}{{else if (getVar 'yenFlash') '===' 'new'}}{{#each products.new}}{{> components/home/flash-discount}}{{/each}}{{else if (getVar 'yenFlash') '===' 'top'}}{{#each products.top_sellers}}{{> components/home/flash-discount}}{{/each}}{{/if}} {{#if theme_settings.yen-show-flash-sale}}{{#if (getVar 'yenFlashHit')}}

{{#if theme_settings.yen-flash-sale-title}}{{theme_settings.yen-flash-sale-title}}{{else}}{{lang 'homepage.flash_sale'}}{{/if}}

{{!-- "Hurry up" only against an end date the merchant set; no date, no countdown. --}} {{#if theme_settings.yen-flash-sale-desc}}

{{theme_settings.yen-flash-sale-desc}}

{{else if theme_settings.yen-flash-sale-end}}

{{lang 'homepage.flash_sale_desc'}}

{{/if}}
{{#if theme_settings.yen-flash-sale-end}}
{{/if}}
{{#if (getVar 'yenFlash') '===' 'featured'}} {{#each products.featured}}{{#or price.sale_price_with_tax.value price.sale_price_without_tax.value (if price.rrp_with_tax.value '>' price.with_tax.value) (if price.rrp_without_tax.value '>' price.without_tax.value)}}{{> components/products/yen-product-card theme_settings=../theme_settings settings=../settings customer=../customer show_compare=../theme_settings.yen-show-compare}}{{/or}}{{/each}} {{else if (getVar 'yenFlash') '===' 'new'}} {{#each products.new}}{{#or price.sale_price_with_tax.value price.sale_price_without_tax.value (if price.rrp_with_tax.value '>' price.with_tax.value) (if price.rrp_without_tax.value '>' price.without_tax.value)}}{{> components/products/yen-product-card theme_settings=../theme_settings settings=../settings customer=../customer show_compare=../theme_settings.yen-show-compare}}{{/or}}{{/each}} {{else}} {{#each products.top_sellers}}{{#or price.sale_price_with_tax.value price.sale_price_without_tax.value (if price.rrp_with_tax.value '>' price.with_tax.value) (if price.rrp_without_tax.value '>' price.without_tax.value)}}{{> components/products/yen-product-card theme_settings=../theme_settings settings=../settings customer=../customer show_compare=../theme_settings.yen-show-compare}}{{/or}}{{/each}} {{/if}}
{{assignVar 'yenFlashSort' 'bestselling'}}{{#if (getVar 'yenFlash') '===' 'featured'}}{{assignVar 'yenFlashSort' 'featured'}}{{else if (getVar 'yenFlash') '===' 'new'}}{{assignVar 'yenFlashSort' 'newest'}}{{/if}} {{> components/home/viewall-url category="Sale" sort=(getVar 'yenFlashSort')}} {{#if (getVar 'yenViewallUrl')}} {{/if}}
{{/if}}{{/if}} {{!-- Market preset: the new arrivals, this week's deal beside the Lookbook, then the best sellers and the makers. The new-arrivals shelf went with the deli take and came back: without it the page had too little to buy (Giao, 2026-10-01). The region the tabs carry comes along. --}} {{#if theme_settings.yen-layout-preset '===' 'market'}} {{assignVar 'yenLookDir' 'img/lookbook/'}} {{#if theme_settings.yen-content-set '===' 'food'}}{{assignVar 'yenLookDir' 'img/lookbook/food/'}}{{/if}} {{{region name="home_above_products"}}} {{> components/home/market/shelf products=products.new title=(lang 'products.new') category="New Arrivals" sort="newest" viewall=(lang 'homepage.view_all_new')}} {{> components/home/market/offers}} {{> components/home/market/shelf products=products.top_sellers title=(lang 'products.top') category="Best Sellers" sort="bestselling" viewall=(lang 'homepage.view_all_top')}} {{> components/home/market/makers}} {{{region name="home_below_featured_products"}}} {{/if}} {{{region name="home_below_top_products"}}} {{!-- What Customers Say: the merchant's own quotes, with no rating or "verified" mark the theme cannot know. Off by default, and nothing at all without a quote. --}} {{#if theme_settings.yen-show-testimonials}}{{#or theme_settings.yen-testimonial-1-quote theme_settings.yen-testimonial-2-quote theme_settings.yen-testimonial-3-quote}}
{{#if theme_settings.yen-testimonials-count}} {{lang 'testimonials.eyebrow' count=theme_settings.yen-testimonials-count}} {{/if}}

{{lang 'testimonials.title_lead'}} {{lang 'testimonials.title_accent'}}
{{lang 'testimonials.title_trail'}}

{{lang 'testimonials.sub'}}

{{#if theme_settings.yen-testimonials-score}}
{{lang 'testimonials.aggregate_label' score=theme_settings.yen-testimonials-score}} {{#if theme_settings.yen-testimonials-count}} {{lang 'testimonials.based_on' count=theme_settings.yen-testimonials-count}} {{/if}}
{{/if}}
{{#if theme_settings.yen-testimonial-1-quote}}

“{{theme_settings.yen-testimonial-1-quote}}”

{{/if}} {{#if theme_settings.yen-testimonial-2-quote}}

“{{theme_settings.yen-testimonial-2-quote}}”

{{/if}} {{#if theme_settings.yen-testimonial-3-quote}}

“{{theme_settings.yen-testimonial-3-quote}}”

{{/if}}
{{/or}}{{/if}} {{!-- Brand Story / Video. Not on the market preset, whose page is products first. --}} {{#if theme_settings.yen-layout-preset '===' 'market'}}{{else}} {{#if theme_settings.yen-show-brand-story}}

{{#if theme_settings.yen-brand-story-title}}{{theme_settings.yen-brand-story-title}}{{else}}{{lang 'homepage.brand_story_title'}}{{/if}}

{{#if theme_settings.yen-brand-story-desc}}{{theme_settings.yen-brand-story-desc}}{{else}}{{lang 'homepage.brand_story_desc'}}{{/if}}

{{!-- Sample figures no store's data backs: only on the demo stores (hidden yen-demo-content). --}} {{#if theme_settings.yen-demo-content}}
{{#if theme_settings.yen-brand-stat-1-num}}{{theme_settings.yen-brand-stat-1-num}}{{else}}10K+{{/if}} {{#if theme_settings.yen-brand-stat-1-label}}{{theme_settings.yen-brand-stat-1-label}}{{else}}{{lang 'homepage.brand_story_stat_1_label'}}{{/if}}
{{#if theme_settings.yen-brand-stat-2-num}}{{theme_settings.yen-brand-stat-2-num}}{{else}}5K+{{/if}} {{#if theme_settings.yen-brand-stat-2-label}}{{theme_settings.yen-brand-stat-2-label}}{{else}}{{lang 'homepage.brand_story_stat_2_label'}}{{/if}}
{{#if theme_settings.yen-brand-stat-3-num}}{{theme_settings.yen-brand-stat-3-num}}{{else}}99%{{/if}} {{#if theme_settings.yen-brand-stat-3-label}}{{theme_settings.yen-brand-stat-3-label}}{{else}}{{lang 'homepage.brand_story_stat_3_label'}}{{/if}}
{{/if}} {{!-- Resolved from the merchant's own "About Us" Web Page: the theme cannot create that page, and a hardcoded /about-us 404s on a store that never made one, so the button is dropped instead. A duplicate page name renders the button twice, which is cosmetic — the href stays intact because {{#filter}} wraps the whole element here rather than sitting inside an attribute. --}} {{#filter pages "About Us" property="name"}} {{#if ../theme_settings.yen-brand-story-btn}}{{../theme_settings.yen-brand-story-btn}}{{else}}{{lang 'homepage.brand_story_btn'}}{{/if}} {{/filter}}
{{#if theme_settings.yen-brand-story-video}}
{{/if}}
{{/if}} {{/if}} {{{region name="home_below_new_products"}}} {{!-- Latest Blog Posts --}} {{#if blog.recent_posts.length}}
{{!-- The Food content set opens its journal on recipes (Giao, 2026-10-01). --}}

{{#if theme_settings.yen-content-set '===' 'food'}}{{lang 'homepage.food_blog_heading'}}{{else}}{{lang 'homepage.blog_heading'}}{{/if}}

{{!-- getImage resolves only a preset or a setting holding a size, so the literal '600x400' this used to pass fetched the original (~100-120 KB per card). The photo is cropped to cover its box, so a ~3:2 thumbnail (the common shape) is drawn 1.5x the box height wide whenever that beats the box width: 1.125x the width of the 4:3 frame, and 423px in market's 148x282 tile at 801px. --}} {{#if theme_settings.yen-layout-preset '===' 'market'}}{{assignVar 'yenBlogSizes' '(min-width: 801px) 423px, (min-width: 468px) 470px, calc(113vw - 56px)'}}{{else}}{{assignVar 'yenBlogSizes' '(min-width: 1600px) 569px, (min-width: 768px) calc(38vw - 30px), (min-width: 468px) 470px, calc(113vw - 56px)'}}{{/if}}
{{#each blog.recent_posts}} {{/each}}
{{/if}} {{!-- Recently Viewed Products --}} {{#if theme_settings.yen-show-recently-viewed}} {{/if}} {{!-- Newsletter CTA --}} {{#if theme_settings.yen-show-newsletter}}
{{lang 'newsletter.heading'}}

{{#if theme_settings.yen-footer-newsletter-title}}{{theme_settings.yen-footer-newsletter-title}}{{else}}{{{lang 'newsletter.deals_headline'}}}{{/if}}

{{!-- The control panel's own summary (Email marketing > Show newsletter summary) wins over the theme text. --}}
{{#all settings.show_newsletter_summary settings.newsletter_summary}}{{settings.newsletter_summary}}{{else if theme_settings.yen-footer-newsletter-desc}}{{theme_settings.yen-footer-newsletter-desc}}{{else if theme_settings.yen-demo-content}}{{lang 'newsletter.subscribe_intro'}}{{else}}{{lang 'newsletter.subscribe_intro_plain'}}{{/all}}
{{lang 'newsletter.privacy_note'}}
{{/if}} {{!-- As Seen In / Press Logos --}} {{#if theme_settings.yen-show-press}}

{{#if theme_settings.yen-press-title}}{{theme_settings.yen-press-title}}{{else}}{{lang 'homepage.press_title'}}{{/if}}

{{#if theme_settings.yen-press-1-img}} {{#if theme_settings.yen-press-1-url}}{{else}}{{/if}} {{lang 'homepage.press_logo_alt'}} {{#if theme_settings.yen-press-1-url}}{{else}}{{/if}} {{/if}} {{#if theme_settings.yen-press-2-img}} {{#if theme_settings.yen-press-2-url}}{{else}}{{/if}} {{lang 'homepage.press_logo_alt'}} {{#if theme_settings.yen-press-2-url}}{{else}}{{/if}} {{/if}} {{#if theme_settings.yen-press-3-img}} {{#if theme_settings.yen-press-3-url}}{{else}}{{/if}} {{lang 'homepage.press_logo_alt'}} {{#if theme_settings.yen-press-3-url}}{{else}}{{/if}} {{/if}} {{#if theme_settings.yen-press-4-img}} {{#if theme_settings.yen-press-4-url}}{{else}}{{/if}} {{lang 'homepage.press_logo_alt'}} {{#if theme_settings.yen-press-4-url}}{{else}}{{/if}} {{/if}} {{#if theme_settings.yen-press-5-img}} {{#if theme_settings.yen-press-5-url}}{{else}}{{/if}} {{lang 'homepage.press_logo_alt'}} {{#if theme_settings.yen-press-5-url}}{{else}}{{/if}} {{/if}}
{{/if}}
{{!-- BigCommerce Marketing Banners assigned to the bottom position. --}} {{#if banners.bottom}}
{{#each banners.bottom}}
{{{this}}}
{{/each}}
{{/if}} {{{region name="home_above_footer"}}} {{/partial}} {{> layout/base}}